; -------------------------------------------------------------------
; Gestion des evenements
; -------------------------------------------------------------------

PRO rh_w_integre_Event, Event

  COMMON wintegre_rh, fl, s_fichier, hd, hf, fichier_out, s_integ, integ

  WIDGET_CONTROL,Event.Id,GET_UVALUE=Ev
  CASE Ev OF 
       'Nomf': 
       'heudeb': widget_control,event.id,GET_VALUE = hd
       'heudfi': widget_control,event.id,GET_VALUE = hf
       'itg' : integ = EVENT.VALUE(0)
       'ann':  BEGIN
               fl = 0
               WIDGET_CONTROL,EVENT.TOP,/DESTROY
               END
       'ok':   BEGIN
               fl = 1
               widget_control, s_fichier, get_value = fich
               fichier_out = fich(0)			
               widget_control, s_integ, get_value = integ
	       WIDGET_CONTROL,EVENT.TOP,/DESTROY			
               END
  ENDCASE
END

; --------------------------------------------------------------------
; Selection fichier integre, Heure de debut, heure de fin, integration
; --------------------------------------------------------------------

PRO rh_w_integre, liste_fichier, fichier_itg, itg, hdeb, hfin, flag, GROUP=Group

@rh_common.inc
  COMMON wintegre_rh, fl, s_fichier, hd, hf, fichier_out, s_integ, integ
  flag = 0 & fl = 0
  ; controle de la liste de fichiers : 
  nb_fich = n_elements(liste_fichier)
  fich = liste_fichier(0)
  pos1 = rstrpos(fich,rh_separator())
  strnom0 = strmid(fich,pos1+1)
  strnom1 = strnom0 
  for i=1,nb_fich-1 do begin
      fich = liste_fichier(i)
      pos1 = rstrpos(fich,rh_separator())
      strnom = strmid(fich,pos1+1)
      if strnom ne strnom1+'Z' then begin
           print,' Liste de fichiers admise : .0n .0nZ .0nZZ'
           print,' ERREUR ',strnom1, '  ',strnom
           return
       endif
   strnom1 = strnom 
  endfor     
  fl = 1
  fichier_out = fichier_itg
  fichier = liste_fichier(0)
  fichier_der = liste_fichier(n_elements(liste_fichier)-1)
; Open du 1er fichier pour donner hd
  IF NOT (rh_open(fichier)) THEN BEGIN
      print, ' PB open fichier : ',fichier
      RETURN
  ENDIF
  hd = entfi.hdeb
  hf = entfi.hfin
  integ = itg
  rh_close
;  print,' 1er fichier a lire :', fichier, entfi.hdeb, entfi.hfin
  IF nb_fich gt 1 THEN BEGIN
; Open du dernier fichier pour donner hf
      IF NOT (rh_open(fichier_der)) THEN BEGIN
          print, ' PB open fichier suite : ',fichier_der
          RETURN
      ENDIF
      hf = entfi.hfin
      rh_close
;      print,' dernier fichier a lire :',fichier_der, entfi.hdeb, entfi.hfin
  ENDIF
  MAINBASE = WIDGET_BASE(GROUP_LEADER=Group, COLUMN=1, $
            TITLE='Integration', SPACE= 25, /modal, $     ; Nancay
;             TITLE='Integrate', SPACE= 25,         $       ; Meudon
             XOFFSET=1, YOFFSET=1, /BASE_ALIGN_CENTER)

 BASE = WIDGET_BASE(mainbase, COLUMN=1, SPACE= 15, /BASE_ALIGN_CENTER,/FRAME)

  b = WIDGET_BASE(BASE, SPACE=0,/ALIGN_CENTER,/COLUMN)
  l = WIDGET_Label(b,Value='File read') 
  l = WIDGET_Label(b,Value=fichier) 
  l = WIDGET_Label(b,Value=string(format='("Integration: ",F8.3," sec")', $
                   entFI.itg/1000.)) 

  s_fichier = CW_FIELD(BASE,VALUE=fichier_out, COLUMN=1, $
                STRING=1, TITLE='File to be written', $
                RETURN_EVENTS=1, UVALUE='Nomf')
  
  l = RH_CW_TIME(BASE, MAXIMUM=HF, MINIMUM=HD, VALUE=HD,$
              TITLE='Start', UVALUE='heudeb')

  l = RH_CW_TIME(BASE, MAXIMUM=HF, MINIMUM=HD, VALUE=HF, $
              TITLE='End', UVALUE='heudfi')

  s_integ = CW_FIELD(BASE,VALUE = INTEG, /FLOATING, COLUMN=1, $
               STRING = 1, TITLE='Integration time (s)', $
               RETURN_EVENTS=1, UVALUE='itg')

  b = widget_base(mainbase, column=2,/align_center)
  b1 = WIDGET_BUTTON( b, UVALUE='ok', VALUE='Integrate', $
      xs=90, ys=35)
  b1 = WIDGET_BUTTON( b, UVALUE='ann', VALUE='Cancel', $
      xs=90, ys=35)
  WIDGET_CONTROL, MAINBASE, /REALIZE

   XMANAGER, 'rh_w_integre', MAINBASE, group=group

   fichier_itg = fichier_out
   itg = integ
   hdeb = hd
   hfin = hf
   flag = fl
   RETURN
END

;----------------------------------------------------------
;               Creation d'un fichier integre
;----------------------------------------------------------
;
;INPUTS:
;-------
; fdata:	repertoire contenant le fichier a integrer
; filter:       filtre pour selectionner le(s) fichier(s) ex: '*0305*.01'
; finteg:	repertoire du fichier integre
; letter:	lettre du fichier integre
; integ:	Integration en secondes
; fcmd:		Nom du fichier de commande
;
;KEYWORDS:
;---------
; FILE:		Liste des fichiers a integrer dans un meme fichier
; CTR1:		Controle typ1
; CTR2:		Controle typ2
; TOUT:		Integration de tout le fichier
; LATER:	Execution differe
; APPEND:	Suite du fichier de commande
; NO_BATCH:      integration lancee en interactif : option pour SolarSoft
;               car le at n'existe pas sur certaines machines
; GROUP:
;EXAMPLE:
; rh_cre_integre,'/data/nancay','*0305*.01','/poub/bouteill','j',240.,'intg'
;----------------------------------------------------------

PRO rh_cre_integre, fdata, filter, finteg, letter, integ, fcmd, $
            FILE = FILE, CTR1 = CTR1, CTR2 = CTR2, $
            LATER=LATER, APPEND=APPEND, TOUT = TOUT, $
            MULTIPLE = MULTIPLE, JUKBOX=JUKBOX, NO_BATCH = NO_BATCH, $
            ; ajout du keyword NO_BATCH pour appel par NRH de SolarSoft
            GROUP = GROUP
            
   IF KEYWORD_SET(FILE) THEN BEGIN
      liste_fichier= FILE
      fichier = liste_fichier(0)
   ENDIF ELSE BEGIN
      fichier = ''
      rh_sel_fich, fdata, filter, fichier, typ1, typ2, MULTIPLE = MULTIPLE
      liste_fichier = fichier
      fichier = liste_fichier(0)
   ENDELSE
;Controle Nom du fichier a integrer
   IF fichier EQ '' THEN return
   pos = strpos(fichier,rh_separator(),/reverse_search)

   typ1 = strmid(fichier,pos+1,1)
   IF typ1 NE '1' AND typ1 NE '2' AND typ1 NE '4' THEN RETURN
   IF KEYWORD_SET(CTR1) THEN BEGIN
      IF typ1 NE CTR1 THEN RETURN
   ENDIF
   
   typ2 = strlowcase(strmid(fichier,pos+2,1))
   IF typ2 NE 'd' AND typ2 NE 'i' AND typ2 NE 'q' THEN RETURN
   IF KEYWORD_SET(CTR2) THEN BEGIN
      IF typ2 NE CTR2 THEN RETURN
   ENDIF 
;Nom du Fichier integre
;stop
    fichier_itg = rh_nom_fich(fichier, finteg, letter)  
     
    IF KEYWORD_SET(TOUT) THEN BEGIN
       tout = 1 
       hd = [0,0,0,0]
       hf = [0,0,0,0]
    ENDIF ELSE BEGIN
       tout = 0
       rh_w_integre, liste_fichier, fichier_itg, integ, hd, hf, $
                   flag, GROUP=Group
       IF flag EQ 0 THEN RETURN      ; annulation de la demande
    ENDELSE
;Lancement de l'integration en interactif
    IF (KEYWORD_SET(NO_BATCH)) THEN BEGIN
        rh_integre, liste_fichier, fichier_itg, integ, hd, hf, TOUT = tout

    END ELSE BEGIN
;Lancement en batch :
;Chaine de commande
        s = "rh_integre, ["
        s = s+"'"+liste_fichier(0)+ "'"
        IF N_ELEMENTS(liste_fichier) GT 1 THEN BEGIN
           FOR k=1, N_elements(liste_fichier)-1 DO s =  $
                               s+",'"+liste_fichier(k)+ "'"
        ENDIF
        s =s+"],'"+fichier_itg+"',"
        s = s+strcompress(string(integ))
        s = s+',['+string(format='(3(i2.2,","),i2.2,"],[")',hd)
        s = s+string(format='(3(i2.2,","),i2.2,"]")',hf)
        s =s+",TOUT="+strcompress(string(tout))

;Entete fichier LOG
        rh_fich_ctr, fichier_itg, path, typ1, typ2  
        lab1 = '  == '
        lab = ' CREATION FICHIER '+fichier_itg
        lab = lab1+lab+lab1
  
;Ecriture du Fichier de commande
        rh_command1, fcmd,[s], LABEL=lab, LATER=LATER, APPEND=APPEND, /IDL, $
                            GROUP = group

        IF KEYWORD_SET(JUKBOX) THEN BEGIN
            s = " cp "+fichier_itg+" /data_rh2/jukbox"
            lab = lab1+' COPIE 2i '+lab1
            rh_command1, fcmd,[s], LABEL=lab, LATER=LATER, APPEND=APPEND, $
                                /NOLOG, GROUP = group
        ENDIF
    ENDELSE
    RETURN
END
