;+
;$Id: bsf.pro,v 1.8 2011/06/30 20:37:15 nathan Exp $
;
; Project     : STEREO - SECCHI 
;                   
; Name        : BSF
;               
; Purpose     : An interactive widget to select a Block Sequence File (.bsf).
;               
; Use         : status= BSF(bsfile,start_time, n_sched, bsf_cad) 
;    
; Inputs      : start_time   Default time (start of schedule) to schedule the selected .bsf file  
;
; Opt. Inputs : None
;               
; Outputs     : bsfile      Name of the selected bsfile. 
;             : start_time  Selected time (default or modified) to schedule the .bsf file.
;             : n_sched     Number of time to schedule a .bsf file (default=1)
;             : bsf_cad     Cadence for multiple .bsf schedule in minutes (default = 120 min)
;             : status      Success or failuer to select a .bsf file.
;
; Opt. Outputs: None
;
; Keywords    : None 
;
; Written by  :  Ed Esfandiari, NRL, May 2004 - First Version. 
;               
; Modification History:
;              Ed Esfandiari 09/08/04  Allow all 8.3 block seq filenames.
;              Ed Esfandiari 11/04/04  Added conflict warning.
;              Ed Esfandiari 04/-2/07  Added capability to schedule a BSF file multiple times at a given cadence.
;              Ed Esfandiari 01/30/09  Used WIDGET_COMBOBOX for idl 5.6+ (uses scroll bar to see all files).
;
; $Log: bsf.pro,v $
; Revision 1.8  2011/06/30 20:37:15  nathan
; use pickfile to select bsf
;
; Revision 1.7  2009/09/11 20:28:07  esfand
; use 3-digit decimals to display volumes
;
; Revision 1.4  2005/01/24 17:56:32  esfand
; checkin changes since SCIP_A_TVAC
;
; Revision 1.2  2004/09/08 15:19:34  esfand
; allow all 8.3 block seq filenames
;
; Revision 1.1.1.2  2004/07/01 21:18:58  esfand
; first checkin
;
; Revision 1.1.1.1  2004/06/02 19:42:35  esfand
; first checkin
;
;
;-


PRO BSF_EVENT, event

COMMON LP_BSF_SHARE, lpcmdv

help,event.id
CASE (event.id) OF

   lpcmdv.dismiss : BEGIN       ;** exit program
      lpcmdv.scheduled= 0 ; false 
      lpcmdv.bsfile= '' 
      lpcmdv.start_time= ''
      WIDGET_CONTROL, /DESTROY, lpcmdv.base1
   END

   lpcmdv.schedule : BEGIN

      WIDGET_CONTROL, lpcmdv.time_text, GET_VALUE= stime
      lpcmdv.start_time= STRTRIM(stime(0),2) 
      WIDGET_CONTROL, lpcmdv.num_sched, GET_VALUE= nsched
      lpcmdv.n_sched= STRTRIM(nsched(0),2)
      WIDGET_CONTROL, lpcmdv.cadence, GET_VALUE= cad
      lpcmdv.cad= STRTRIM(cad(0),2)
      lpcmdv.scheduled= 1 ; true 

      WIDGET_CONTROL, /DESTROY, lpcmdv.base1
    END

   lpcmdv.bsfind : BEGIN
     lpcmdv.bsfile= lpcmdv.files(event.index)
   END

   lpcmdv.time_text : BEGIN
     WIDGET_CONTROL, lpcmdv.time_text, GET_VALUE= stime & stime = stime(0)
     lpcmdv.start_time= stime
   END

   lpcmdv.num_sched : BEGIN
     WIDGET_CONTROL, lpcmdv.num_sched, GET_VALUE= nsched & nsched = nsched(0)
     lpcmdv.n_sched= nsched
   END

   lpcmdv.cadence : BEGIN
     WIDGET_CONTROL, lpcmdv.cadence, GET_VALUE= cad & cad = cad(0)
     lpcmdv.cad= cad
   END

   ELSE : BEGIN
   END

ENDCASE

END

 

FUNCTION BSF,bsfile,start_time, n_sched, bsf_cad

COMMON LP_BSF_SHARE, lpcmdv

    scheduled= 0 ; false 

    IF XRegistered("BSF") THEN RETURN, scheduled   ; AEE - Mar 20, 03

    ;********************************************************************
    ;** SET UP WIDGETS **************************************************


      base1 = WIDGET_BASE(/COLUMN, TITLE='Block Sequence File (BSF)', /FRAME)

      schedule = WIDGET_BUTTON(base1, VALUE=' Insert into Plan ')

      row0 = WIDGET_BASE(base1, /ROW)

      col = WIDGET_BASE(row0, /COLUMN, /FRAME)

      ; AEE 12/29/03 - select a Block Sequence File (*.bsf) from ./BSF directory:

      row = WIDGET_BASE(col, /ROW)
      
        temp = WIDGET_LABEL(row, VALUE='Selected Block Seq File:')
	
        ;files= FINDFILE(GETENV('PT')+'/IN/BSF/*.bsf')
        ;files= FINDFILE(GETENV('PT')+'/IN/BSF/????????.???') ; allow all 8.3 filenames
        
	refind:
        IF (STRLEN(bsfile) EQ 0) THEN BEGIN
    	    files = PICKFILE(PATH= GETENV('PT')+'/IN/BSF', FILTER='*.bsf')
    	    ind= 0 
    	    bsfile= files(0)
        ENDIF ELSE BEGIN
            ;ind= WHERE(files EQ bsfile,cnt)
            IF ~file_exist(bsfile) THEN BEGIN
            	PRINT,''
            	PRINT, bsfile + ' does NOT exist.'
            	PRINT,''
            	ind= 0
		bsfile=''
		goto, refind
            ENDIF
        ENDELSE

    	bsfwi=widget_text(row,value=bsfile)

      row = WIDGET_BASE(col, /ROW)
        temp = WIDGET_LABEL(row, VALUE='                                           yyyy/mm/dd hh:mm:ss')
      row = WIDGET_BASE(col, /ROW)
        temp = WIDGET_LABEL(row, VALUE='Start Block Seq File at:')
        time_text= WIDGET_TEXT(row, /EDITABLE, YSIZE=1, XSIZE=24,VALUE=STRMID(start_time,0,19))
        temp = WIDGET_LABEL(row, VALUE=' Schedule ')
        n_sched= '1'
        num_sched= WIDGET_TEXT(row, /EDITABLE, YSIZE=1, XSIZE=3,VALUE=n_sched)
        temp = WIDGET_LABEL(row, VALUE=' at Cadence of ')
        cad= '120'
        cadence= WIDGET_TEXT(row, /EDITABLE, YSIZE=1, XSIZE=5,VALUE=cad)
        temp = WIDGET_LABEL(row, VALUE=' minutes')

      row = WIDGET_BASE(col, /ROW)
      
      msg= '          Schedule is NOT checked for possible BSF insert conflicts. Insert only in an empty section of schedule.'
      font='-adobe-times-bold-r-normal--14-140-75-75-p-77-iso8859-1'
      ;temp = WIDGET_LABEL(row, VALUE= msg, /ALIGN_CENTER, FONT=font)
      temp = WIDGET_LABEL(row, VALUE= msg, FONT=font)

     dismiss = WIDGET_BUTTON(base1, VALUE=' Dismiss ')

    ;********************************************************************
    ;** REALIZE THE WIDGETS *********************************************

    WIDGET_CONTROL, /REAL, base1
    WIDGET_CONTROL, time_text, /INPUT_FOCUS

    lpcmdv = CREATE_STRUCT( 'base1', base1,                     $
                             'files',files,                     $
                             'bsfind', 0,                  $
                             'bsfile', bsfile,                  $ 
                             'start_time', start_time,          $
                             'time_text', time_text,            $
                             'num_sched',num_sched,             $
                             'n_sched', n_sched,                $
                             'cadence',cadence,                 $
                             'cad',cad,                         $
                             'dismiss', dismiss,                $
                             'scheduled', scheduled,            $
                             'schedule', schedule)

    XMANAGER, "BSF", base1, /MODAL

bsfile= lpcmdv.bsfile
start_time= lpcmdv.start_time 
n_sched= FIX(lpcmdv.n_sched)
bsf_cad= DOUBLE(lpcmdv.cad)

; help,start_time,n_sched,bsf_cad

  RETURN,lpcmdv.scheduled

END