;*************************************************************************
;		FICHIER : NRH1.PRO
;
;   le 15/01/99 Initialisation des noms de fichiers = '' au lieu de '.dat'
;   le 31/03/99 Changement du nom des operations BACKGROUND en DIFFERENCE
;		et SHIFT IM en SHIFT FOV
;   le 26/09/03 passage du format GIF au format PNG
;*************************************************************************

PRO NRH1_event,ev

Common NRH1_HELIO,mainstruct
Common NRH1_GLOBAL,nomfich,fichinfo

stash = WIDGET_INFO ( ev.top , /CHILD )     ; on recupere les variables
WIDGET_CONTROL, stash , GET_UVALUE = state  ; globales du main 

IF (ev.id EQ state.startlaser) THEN BEGIN
   WIDGET_CONTROL,state.startlaser,GET_VALUE = position
   IF (position EQ 2) THEN BEGIN
      mainstruct.laser=1 
   ENDIF ELSE BEGIN 
      mainstruct.laser=0
      NRH1_postscript,/STOP
   ENDELSE
ENDIF

IF (ev.id EQ state.lasercouleur) THEN BEGIN
   WIDGET_CONTROL,state.lasercouleur,GET_VALUE = position
   IF (position EQ 2) THEN BEGIN
      mainstruct.pscouleur=0
   ENDIF ELSE BEGIN 
      mainstruct.pscouleur=1
   ENDELSE
ENDIF

IF (ev.id EQ state.laserorient) THEN BEGIN
   WIDGET_CONTROL,state.laserorient,GET_VALUE = position
   IF (position EQ 2) THEN BEGIN
      mainstruct.psorient=0
   ENDIF ELSE BEGIN 
      mainstruct.psorient=1
   ENDELSE
ENDIF

IF (ev.id EQ state.printps) THEN BEGIN
   WIDGET_CONTROL,state.lasername,GET_VALUE=lasername
   comm = 'lpr -h -P' + lasername(0) + ' ' +  mainstruct.psfilename
   spawn, comm
ENDIF

IF (ev.id EQ state.viewps) THEN BEGIN
   comm = 'ghostview ' +  mainstruct.psfilename
   spawn, comm
ENDIF

IF (ev.id EQ state.help_plot) THEN BEGIN
	Aide, SUJET = "plot_options", message
	txt = WIDGET_MESSAGE(message, /INFORMATION, TITLE = 'Plot options')
ENDIF

IF (ev.id EQ state.wxsize) THEN BEGIN
   mainstruct.winxsize=ev.value(0)
   !p.multi(0) = 0
ENDIF

IF (ev.id EQ state.wysize) THEN BEGIN
   mainstruct.winysize=ev.value(0)
   !p.multi(0) = 0
ENDIF

IF (ev.id EQ state.nbcolonne) THEN BEGIN
   !p.multi(1) = ev.value(0)
   !p.multi(0) = 0
ENDIF

IF (ev.id EQ state.nbligne) THEN BEGIN
   !p.multi(2) = ev.value(0)
   !p.multi(0) = 0
ENDIF

IF (ev.id EQ state.fenreset) THEN BEGIN
   !p.multi(0) = 0
ENDIF



IF ( ev.id EQ state.bgroup_traces ) THEN BEGIN
    CASE ev.value OF

	0 :  BEGIN
		Aide, SUJET = "traces", message
	   	txt = WIDGET_MESSAGE(message, /INFORMATION, $
			TITLE = 'Plotting data with X - H E L I O')
		END

        1 :  MENUTRACEISOPH        ; ISOPHOTES      
                                    ; WIN : ->1,2,3,4
        2 :  MENUTRACEPROF          ; PROFIL
                                    ; WIN : ->7,8,9,10
        3 :   MENUTRACEPOS          ; POSITION
                  	            ; WIN : ->5,6
;	4 :  MENUTRACECARTE               ; CARTE
	4 :  MENUTRACECARTE2D               ; CARTE
                                    ; WIN : -> 11,12 
         ENDCASE
ENDIF 

IF ( ev.id EQ state.bgroup_divers ) THEN BEGIN
    CASE ev.value OF

	0 :  BEGIN
		Aide, SUJET = "listings", message
	   	txt = WIDGET_MESSAGE(message, /INFORMATION, $
			TITLE = 'Info on file contents')
		END
	1 : MENUVERIF               ; VERIF

	2 : MENULISTPOS		   ; Listing d'un fichier de positions 1D ou 2D

       ENDCASE 
ENDIF 

IF ( ev.id EQ state.bgroup_infos ) THEN BEGIN
;    CASE ev.value OF

		Aide, SUJET = "filenames", message
	   	txt = WIDGET_MESSAGE(message, /INFORMATION, $
			TITLE = 'Standard file names used by X - H E L I O')

;       ENDCASE 
ENDIF 

IF ( ev.id EQ state.bgroup_calculs ) THEN BEGIN
    CASE ev.value OF
           
	0 :  BEGIN
		Aide, SUJET = "calculs", message
	   	txt = WIDGET_MESSAGE(message, /INFORMATION, $
			TITLE = 'Computing with X - H E L I O')
		END
        1 : MENUCALCPOS2D           ; CALCUL DE FICHIER
                                    ; DE POSITION 2D
        2 : MENUCALCFLUX1D          ; CALCUL DE FICHIER DE FLUX

	3 : MENUBCKGRD			; SOUSTRACTION FOND

	4 : MENUSHIFTRH1D		; CHANGEMENT CANAL D'ORIGINE

         ENDCASE 
ENDIF 


IF ( ev.id EQ state.bgroup_options ) THEN BEGIN
      CASE ev.value OF
          0 :  XLOADCT,GROUP=ev.top    ; COLOR TABLE              
          1:   XPALETTE,GROUP=ev.top   ; PALETTE
      ENDCASE
ENDIF


IF ( ev.id EQ state.bgroup_controle ) THEN BEGIN
      CASE ev.value OF
          0 :  BEGIN                           ; QUIT AND SAVE
                  IF (mainstruct.laser EQ 1) THEN BEGIN
                     XPRINT,['Impossible de quitter','impression en cours']
                     RETURN
                  ENDIF 
                ; on ferme toutes les fenetres eventuellement ouvertes
                  DEVICE,window_state=win
                  FOR i=0,31 DO BEGIN
                     IF win(i) EQ 1 THEN WDELETE,i
                  ENDFOR
 
         ; on sauve les commons pour la session suivante
			SZ = SIZE(FINDFILE('xhelio.sav;1'))
		  IF SZ(0) EQ 1 THEN $
                     spawn,'delete xhelio.sav;1'  ;change under unix
                  SAVE,mainstruct,$;nomfich,fichinfo,$
                  FILENAME='xhelio.sav;1',/verbose
   
                  WIDGET_CONTROL, ev.top, /DESTROY
                  RETURN
               END
          1 :  BEGIN                           ; QUIT
                 IF (mainstruct.laser EQ 1) THEN BEGIN
                     MES = WIDGET_MESSAGE('Print job active')
                    RETURN
                  ENDIF 
           ; on ferme toutes les fenetres eventuellement ouvertes
                  DEVICE,window_state=win
                  FOR i=0,31 DO BEGIN
                     IF win(i) EQ 1 THEN WDELETE,i
                  ENDFOR
                  WIDGET_CONTROL, ev.top, /DESTROY
                  RETURN
               END
       ENDCASE
ENDIF

IF ( ev.id EQ state.savepng ) THEN BEGIN
	image = TVRD()
	WRITE_PNG, 'xhelio.png', image
	message = 'Screen copied to file xhelio.png'
	print, message
ENDIF

WIDGET_CONTROL, stash, SET_UVALUE = state
END


;************************************************************************
 
PRO NRH1,GROUP=group,NOLOAD=noload


Common NRH1_GLOBAL,nomfich,fichinfo
COMMON NRH1_HELIO,mainstruct

Defsysv, '!time', lonarr(3)
Defsysv, '!chemin',''
DefSysV, '!Old_Device', !D.Name

; Creation d'une structure contenant le descripteur d'une image 
TailleMax = 200
textinfo = { nrh1_textinfo}
file     = { nrh1_fileinfo }
FichInfo = REPLICATE( {nrh1_fileinfo}, 10 )
NomFich = STRARR(10)
 
SET_PLOT,'X'
;INIT

!P.MULTI=0

array = 0		;lecture FITS de l'EW par defaut
ewfile='' 
nsfile=''
pewfile=''
pnsfile=''
p2dfile=''
psfilename='result.ps'
pscouleur=0
psorient=0
laser=0
heures=['0:0:0:0','0:0:0:0']
canaux=[0,0]
winxsize=400
winysize=400
oldp=!p



FOR i=1,9 DO close,i


files=strarr(10)
files(0)='test.ew1'   ; variables globales par defaut
files(1)='test.ns1'
fileformat = fltarr(10) 
filesizemax = 100000
filedata = fltarr(filesizemax,/NOZERO)
filename = ''

titre='X   -   H       E       L       I       O'

main_base = WIDGET_BASE(TITLE = titre,/COLUMN, XOFFSET = 200)

base_modules = WIDGET_BASE(main_base,TITLE = 'modules',/COLUMN,/FRAME)
base_vide =  WIDGET_BASE(main_base)
base_options = WIDGET_BASE(main_base,TITLE = 'options',/COLUMN,/FRAME)
base_laser = WIDGET_BASE(base_options,TITLE = 'laser',/ROW)
base_laser2 = WIDGET_BASE(base_options,TITLE = 'laser',/ROW)
base_fenetre  = WIDGET_BASE(base_options,TITLE = 'fenetre',/ROW)
base_vide =  WIDGET_BASE(main_base,YSIZE=20)
base_controle = WIDGET_BASE(main_base,/FRAME,/align_center)

bgroup_traces = CW_BGROUP ( base_modules, LABEL_LEFT = 'Plots:', $
         ['HELP', 'CONTOURS','SCAN','F(TIME)','MAP'],/ROW,SPACE=30)

bgroup_calculs = CW_BGROUP ( base_modules, LABEL_LEFT = 'Computations:',$
         ['HELP', '2D POS','1D FLUX', 'DIFFERENCE', 'SHIFT FOV'],/ROW,SPACE=36)

bgroup_divers = CW_BGROUP ( base_modules, LABEL_LEFT = 'Listings:',$
         ['HELP', 'CHECK HEADER','F(TIME)' ],/ROW,SPACE=30)

bgroup_infos = CW_BGROUP ( base_modules, LABEL_LEFT = 'Infos:',$
         ['File names' ],/ROW,SPACE=30)

bgroup_options = CW_BGROUP ( base_options,$
         ['MODIFY COLOUR TABLE',$
          'CREATE COLOUR TABLE'],/ROW)

help_plot = WIDGET_BUTTON ( base_laser,$
                           VALUE = 'HELP')

startlaser= CW_SWITCH(base_laser,['Plot to X ',$
                             'Plot to PS'],VALUE = 1)
lasercouleur= CW_SWITCH(base_laser,['COLOUR',$
                             'BLACK & WHITE'],VALUE = 2)
laserorient= CW_SWITCH(base_laser,['LANDSCAPE',$
                             ' PORTRAIT '],VALUE = 2)
printps = WIDGET_BUTTON ( base_laser,$
                           VALUE = 'PRINT PS FILE')
lasername = CW_FIELD (base_laser,XSIZE=8,$
                           TITLE='printer',/STRING,VALUE='ljps')
viewps = WIDGET_BUTTON ( base_laser,$
                           VALUE = 'VIEW PS FILE')

nbcolonne = CW_FIELD(base_fenetre,XSIZE=5,VALUE=1,$
                      TITLE='Nb. of plots (x)',/INTEGER,/RETURN_EVENTS)

nbligne = CW_FIELD(base_fenetre,XSIZE=5,VALUE=1,$
                      TITLE='Nb. of plots (y)',/INTEGER,/RETURN_EVENTS)

wxsize = CW_FIELD(base_fenetre,XSIZE=6,VALUE=winxsize,$
                      TITLE='Window width',/INTEGER,/RETURN_EVENTS)

wysize = CW_FIELD(base_fenetre,XSIZE=6,VALUE=winysize,$
                      TITLE='Window height',/INTEGER,/RETURN_EVENTS)

fenreset = WIDGET_BUTTON(base_fenetre,VALUE ='New page')

savepng = WIDGET_BUTTON ( base_options,$
                           VALUE = 'Save latest screen to png file ',XSIZE=50 )

bgroup_controle = CW_BGROUP ( base_controle,$
           ['SAVE VARIABLES AND QUIT',$
            'QUIT XHELIO'],/ROW,SPACE=30)


window = intarr(32)  ; tableau pour la gestion des ouvertures de fenetres
window(*) = 0  

state = { bgroup_traces:bgroup_traces, bgroup_calculs:bgroup_calculs,$
          bgroup_divers:bgroup_divers,bgroup_options:bgroup_options,$
          bgroup_controle:bgroup_controle, bgroup_infos:bgroup_infos, $
	savepng:savepng,$
          startlaser:startlaser,printps:printps, viewps:viewps, $
	help_plot:help_plot, lasername:lasername,lasercouleur:lasercouleur,$
	laserorient:laserorient, $
          nbligne:nbligne,nbcolonne:nbcolonne,wxsize:wxsize,$
          wysize:wysize,fenreset:fenreset }

mainstruct = { root:main_base,filedata:filedata,filename:filename,$
        fileformat:fileformat,filesizemax:filesizemax,window:window,$
        winxsize:winxsize,winysize:winysize,$
	array:array,$		pour la lecture FITS
        ewfile:ewfile,nsfile:nsfile,pewfile:pewfile,pnsfile:pnsfile,$
        p2dfile:p2dfile,oldp:oldp,$;laserattr:laserattr,$
        laser:laser,psfilename:psfilename,pscouleur:pscouleur, $
	psorient:psorient, heures:heures,canaux:canaux }



; on recupere les commons sauvegardes
	SZ= SIZE(FINDFILE('xhelio.sav'))
IF NOT KEYWORD_SET(NOLOAD) AND SZ(0) EQ 1 THEN BEGIN
    RESTORE,'xhelio.sav;1',/verbose
    mainstruct.window(*)=0
    mainstruct.root=main_base
    mainstruct.laser=0
    WIDGET_CONTROL,wxsize,SET_VALUE=mainstruct.winxsize
    WIDGET_CONTROL,wysize,SET_VALUE=mainstruct.winysize
ENDIF

WIDGET_CONTROL, WIDGET_INFO ( main_base,/CHILD ) , $
                SET_UVALUE = state , /REALIZE
XMANAGER,'NRH1',main_base,GROUP_leader=GROUP, /NO_BLOCk
END
