
;+ ***********************************************************************
; NAME:
;	MENUTRACECARTE2D
;
; PURPOSE:
;	Cette procedure contient les WIDGETS pour letrace des cartes a 2
;	dimensions
;	"Button" MAP du menu principal
;
; CATEGORY:
;	NRH1 Menu
;
; CALLING SEQUENCE:
;	MENUTRACECARTE2D
;
; INPUTS:
;	Non
;
; KEYWORD PARAMETERS:
;	Non
;
; OUTPUTS:
;	Non
;
; COMMON BLOCKS:
;	NRH1_GLOBAL
;	NRH1_HELIO
;
;	MANUPOS	(trace des positions entrees manuellement)
;	FOV	(limites du champ a tracer)
;	LAYOUT	(opitions de mise en page et du style du trace)
;
; MODIFICATION HISTORY: (bonmartin@obspm.fr)
;	03/12/98 adapte du logiciel XHELIO
;	12/11/97: Controle du nom du fichier de position a la lecture:
;		 si le premier caractere n'est pas 'p', on suppose
;		 que les positions sont entrees manuellement (klein@obspm.fr)
;	31/03/99	modification de l'appel de la routine 
;			plot_hg_man (transfert de la date) (klein@obspm.fr),
;	08/04/99 (Ludwig.klein@obspm.fr):
;		- groupement des options de mise en page du trace dans la
;			nouvelle routine MENULAYOUT2D et le COMMON layout;
;		- groupement des parametres du champ trace dans MENULIMFOV
;			et le COMMON fov
;	13/04/99 (Ludwig.klein@obspm.fr):
;		ajout lecture de fichiers .jpg and .fts
;
PRO MENUTRACECARTE2D_EVENT, ev

common NRH1_GLOBAL,nomfich,fichinfo
common NRH1_HELIO,mainstruct

;	donnees "manuelles" lues de manupos_nrh.dat
common manupos, idate, heurms, frequence, canew, fwhmew, cansn, $
		fwhmsn
common fov, edge	; cadre du trace: edge=[est, sud, quest, nord]
common layout, lo_params, timelab, symbol, lnstl, figure, fill, taille

; on charge les variables locales 
stash = WIDGET_INFO ( ev.top, /CHILD )
WIDGET_CONTROL, stash, GET_UVALUE = state

IF (ev.id EQ state.files(0)) THEN BEGIN ; *** Nom + parametres fichier pos. (1D ou 2D)
        WIDGET_CONTROL,/HOURGLASS
        WIDGET_CONTROL, state.files(0), GET_VALUE = fpos
	pos = RSTRPOS( fpos,'/')
	IF STRUPCASE(STRMID(fpos,pos+1,1)) EQ 'P' THEN $
		err = newlitentete(1, fpos(0), file) ELSE err=1
	IF (err EQ 1) THEN BEGIN
		WIDGET_CONTROL, state.files(0), SET_VALUE = '.dat'
		RETURN
	ENDIF
	fintemp = file.heurfin
	debutemp = file.heurdeb
	pastempo = file.paspix(0) ; Pas de temps entre deux enregistrements
	WIDGET_CONTROL, state.heures, $
		SET_VALUE = [MSH(debutemp), MSH(fintemp)]
	nbpos = file.nbpix(1)/file.facbloc(1)
	options = '' + STRCOMPRESS(string(indgen(nbpos+1)-1))
	options(0) = 'All'
	WIDGET_CONTROL, state.lis_numpos, SET_VALUE = options
	c2idate, fichinfo(1).date, idate
	WIDGET_CONTROL,state.date_y,SET_DROPLIST_SELECT=idate(2)-80
	WIDGET_CONTROL,state.date_m,SET_DROPLIST_SELECT=idate(1)-1
	WIDGET_CONTROL,state.date_d,SET_DROPLIST_SELECT=idate(0)-1
	WIDGET_CONTROL,state.can_ew,SET_VALUE = 0.
	WIDGET_CONTROL,state.can_sn,SET_VALUE = 0.
	WIDGET_CONTROL,state.fwhm_ew,SET_VALUE = 0.
	WIDGET_CONTROL,state.fwhm_sn,SET_VALUE = 0.
ENDIF

IF(ev.id EQ state.heures) THEN heures = ev.value

IF(ev.id EQ state.lis_numpos) THEN BEGIN
	numpos = WIDGET_INFO(state.lis_numpos, /DROPLIST_SELECT)
	WIDGET_CONTROL, state.lis_numpos, SET_DROPLIST_SELECT = numpos
ENDIF

IF (ev.id EQ state.zoom) THEN BEGIN
   message = ['Adjust plot window: -   left button to move the window', $
'                                   -   central button to blow up or shrink', $
'                                   -   push right button to exit' ]
   WIDGET_CONTROL, state.txt_message, SET_VALUE=message, /APPEND
   result=NRH1_getzone()
   IF (N_ELEMENTS(result) LT 1) THEN RETURN
   est = MIN( [result(0), result(2)], MAX=ouest )
   sud = MIN( [result(1), result(3)], MAX=nord )
   edge = [est, sud, ouest, nord]
ENDIF

IF ( ev.id EQ state.curseur ) THEN BEGIN
	message = "Click on the position to be measured"
	WIDGET_CONTROL, state.txt_message, SET_VALUE=message, /APPEND
	result=NRH1_getzone(SINGLE=1)
	message = "East-west: " + STRCOMPRESS(STRING(result(0))) + $
		", south-north: " + STRCOMPRESS(STRING(result(1)))
	WIDGET_CONTROL, state.txt_message, SET_VALUE=message, /APPEND
ENDIF

IF ev.id EQ state.bgroup_manu THEN BEGIN  ; Lecture donnees "manuelles"

	IF ev.value EQ 0 THEN BEGIN
		idate= [0,0,0] & heurms=0. & frequence = 0.
		canew=0. & fwhmew=0. & cansn=0. & fwhmsn=0.
		WIDGET_CONTROL, state.files(0), SET_VALUE = '.dat'
; 			pour empecher la lecture d'un fichier pos 1D ou 2D
		menumanupos
	ENDIF

	IF ev.value EQ 1 THEN BEGIN
		WIDGET_CONTROL,state.date_y,SET_DROPLIST_SELECT=idate(2)-80
		WIDGET_CONTROL,state.date_m,SET_DROPLIST_SELECT=idate(1)-1
		WIDGET_CONTROL,state.date_d,SET_DROPLIST_SELECT=idate(0)-1

		hou = heurms/3600000 & reste = heurms MOD 3600000
		min = reste/60000 & reste = reste MOD 60000
		secs = reste / 1000  & reste = reste MOD 1000
		fsecs = (10*reste) / 1000
		WIDGET_CONTROL, state.time_hh, SET_VALUE = hou
		WIDGET_CONTROL, state.time_mm, SET_VALUE = min
		WIDGET_CONTROL, state.time_ss, SET_VALUE = secs
		WIDGET_CONTROL, state.time_fss, SET_VALUE = fsecs

		WIDGET_CONTROL,state.freqman,SET_VALUE=frequence
		WIDGET_CONTROL,state.can_ew,SET_VALUE = canew
		WIDGET_CONTROL,state.can_sn,SET_VALUE = cansn
		WIDGET_CONTROL,state.fwhm_ew,SET_VALUE = fwhmew
		WIDGET_CONTROL,state.fwhm_sn,SET_VALUE = fwhmsn
	ENDIF

	IF ev.value EQ 2 THEN BEGIN
		idate = lonarr(3)
; 				jour, mois, an-1900 (voir procedure C2IDATE)
		idate(0) = WIDGET_INFO(state.date_d, /DROPLIST_SELECT) + 1
		idate(1) = WIDGET_INFO(state.date_m, /DROPLIST_SELECT) + 1
		idate(2) = WIDGET_INFO(state.date_y, /DROPLIST_SELECT) + 80

		WIDGET_CONTROL, state.time_hh, GET_VALUE = hou
		WIDGET_CONTROL, state.time_mm, GET_VALUE = min
		WIDGET_CONTROL, state.time_ss, GET_VALUE = secs
		WIDGET_CONTROL, state.time_fss, GET_VALUE = fsecs
		heurms = 100*LONG(fsecs) + 1000*(LONG(secs) + 60*LONG(min) + $
					3600*LONG(hou))

		WIDGET_CONTROL,state.freqman, GET_VALUE=frequence
		WIDGET_CONTROL,state.can_ew, GET_VALUE = canew
		WIDGET_CONTROL,state.can_sn, GET_VALUE = cansn
		WIDGET_CONTROL,state.fwhm_ew, GET_VALUE = fwhmew
		WIDGET_CONTROL,state.fwhm_sn, GET_VALUE = fwhmsn

; Ecriture des donnees entrees manuellement dans les fichier manpos_nrh.dat
		write_manpos, 'manpos_nrh.dat', idate, heurms, $
				frequence, canew, fwhmew, cansn, fwhmsn, err
		IF err EQ 0 THEN message = $
			"Coordinates written on file manpos_nrh.dat" $
		ELSE message = !ERR_STRING
		WIDGET_CONTROL, state.txt_message, $
				SET_VALUE=message, /APPEND
	ENDIF

	IF ev.value EQ 3 THEN BEGIN
		aide, SUJET = "pos_man", message
	   	txt = WIDGET_MESSAGE(message, /INFORMATION, $
			TITLE = 'How to enter NRH source positions')
	ENDIF
ENDIF

IF NOT KEYWORD_SET(lo_params) THEN image = 0 ELSE image =  lo_params(5)
;IF image GT 0 THEN WIDGET_CONTROL,state.base_image,SENSITIVE=1 ELSE $
;	 WIDGET_CONTROL,state.base_image,SENSITIVE=0

; Calcul du centre et du nord de l'image solaire  (pixels)
;

IF ( ev.id EQ state.bg_image) THEN BEGIN

   IF ev.value LE 1 THEN BEGIN ; ---Trace image, evaluation centre, rayon, inclinaison
;	Trace de l'image:
 	        WIDGET_CONTROL, state.imfiles(0), GET_VALUE = imfile
		type = STRLOWCASE( nrh_fileext(imfile) )
		WIDGET_CONTROL, state.anglax, GET_VALUE = inclin
			SZ = SIZE(FINDFILE(Imfile))
		IF SZ(0) EQ 0 THEN BEGIN
			message='File ' + imfile + ' does not exist'
		  WIDGET_CONTROL, state.txt_message, SET_VALUE=message,/APPEND
			GOTO, END_IMAGE
		ENDIF 
		CASE type OF
			'png':	read_png, imfile, imtab, r, g, b
			'jpg':read_jpeg, imfile, imtab
			'jpeg':	read_jpeg, imfile, imtab
			'fts':	imtab = mrdfits(imfile, 0, hdr)
			'fits':	imtab = mrdfits(imfile, 0, hdr)
			'ras':	read_srf, imfile, imtab, r, g, b
			'bmp':	imtab = read_bmp(imfile, r, g, b)
			ELSE:	BEGIN
			  message="Readable file types: *.png, *.jpg/*.jpeg"+ $
					"*.ras, *.bmp, *.fts/fits"
			   WIDGET_CONTROL, state.txt_message, $
						SET_VALUE=message, /APPEND
			   GOTO, END_IMAGE
			END
		ENDCASE
		imsize = SIZE(imtab)
               	win = get_window(13,16,$
			TITLE='Compute radius, centre or inclination',$
			XSIZE=imsize(1), ysize=imsize(2))

		tvscl, imtab
		IF type NE 'fts' AND type NE 'fits' THEN tvlct, r, g, b
		IF ev.value EQ 0 THEN BEGIN ; 	evaluation centre, rayon
			x = fltarr(3) & y = fltarr(3)
		    message = "Click on three points on the solar limb"
		   WIDGET_CONTROL, state.txt_message, SET_VALUE=message, /APPEND
			FOR i = 0, 2 DO BEGIN
				CURSOR, x0, y0, /DEVICE, /DOWN
				x(i) = float(x0) 
				y(i) = float(y0)
			ENDFOR
			CIR_3PNT, x, y, rayon, xcentre, ycentre
			plots, [xcentre - rayon, xcentre+rayon], [ycentre, ycentre], /DEVICE
			plots, [xcentre, xcentre], [ycentre-rayon, ycentre+rayon], /DEVICE
			WIDGET_CONTROL, state.centrimx, SET_VALUE = ROUND(xcentre)
			WIDGET_CONTROL, state.centrimy, SET_VALUE = ROUND(ycentre)
			WIDGET_CONTROL, state.radius, SET_VALUE = ROUND(rayon)
		ENDIF ELSE IF ev.value EQ 1 THEN BEGIN ; evaluation inclinaison
			WIDGET_CONTROL, state.centrimx, GET_VALUE = xcentre
			WIDGET_CONTROL, state.centrimy, GET_VALUE = ycentre
			WIDGET_CONTROL, state.radius, GET_VALUE = rayon
			message = "Click on north of the solar disk"
			WIDGET_CONTROL, state.txt_message, SET_VALUE=message, /APPEND
				cursor, xnorth, ynorth, /DOWN, /DEVICE
			inclin = 180./!PI * $
				ATAN( FLOAT(xnorth-xcentre) / FLOAT(ynorth-ycentre))
			TVSCL, ROT(imtab, -inclin, 1., xcentre, ycentre, /PIVOT)
			plots, [xcentre - rayon, xcentre+rayon], [ycentre, ycentre], /DEVICE
			plots, [xcentre, xcentre], [ycentre-rayon, ycentre+rayon], /DEVICE
			WIDGET_CONTROL, state.anglax, SET_VALUE = inclin
		ENDIF
		END_IMAGE:

   ENDIF ELSE IF ev.value EQ 2 THEN BEGIN	; print header of fits-file
 	        WIDGET_CONTROL, state.imfiles(0), GET_VALUE = imfile
		type = STRLOWCASE( nrh_fileext(imfile) )
		IF type EQ 'fts' OR type EQ 'fits' THEN BEGIN
			imtab = mrdfits(imfile, 0, hdr)
			PRINT, 'Fits file header:'
			print, hdr
		ENDIF
   ENDIF ELSE IF ev.value EQ 3 THEN BEGIN
		aide, SUJET = "par_image", message
	   	txt = WIDGET_MESSAGE(message, /INFORMATION, $
			TITLE = 'Image parameters')
   ENDIF

ENDIF

IF (ev.id EQ state.plot_layout) THEN BEGIN ; Options du trace
	MENULAYOUT2D
ENDIF

IF (ev.id EQ state.fieldofview) THEN BEGIN ; Choix des valeurs du bord du cdv
	MENULIMFOV
ENDIF

; bouton de controle

IF ( ev.id EQ state.bgroup_control ) THEN BEGIN 

	IF(ev.value LE 1) THEN BEGIN
		noerase = 1 - ev.value
		IF noerase NE 0 THEN BEGIN
			win = get_oldwindow(13,16)
			WIDGET_CONTROL,state.bgroup_control, GET_UVALUE = number
			WIDGET_CONTROL,state.bgroup_control, SET_UVALUE = number+1
		ENDIF ELSE BEGIN
			WIDGET_CONTROL,state.bgroup_control, SET_UVALUE = 0
                	win = get_window(13,16,$
			TITLE='Heliographic map',$
			XSIZE=mainstruct.winxsize,YSIZE=mainstruct.winxsize)
		ENDELSE
;	Options du trace (cadre, annotations ...)
		IF NOT KEYWORD_SET(lo_params) THEN lo_params = [1,1,0,1,0,0]
		IF NOT KEYWORD_SET(symbol) THEN symbol=0
		IF NOT KEYWORD_SET(lnstl) THEN lnstl=0
		IF NOT KEYWORD_SET(figure) THEN figure=0
		IF NOT KEYWORD_SET(fill) THEN fill=0
		IF NOT KEYWORD_SET(taille) THEN taille=0
		cadre = lo_params(0)
		limb = lo_params(1)
		shade = lo_params(2)
		tracedate = lo_params(3)
		annotation = lo_params(4)
		image =  lo_params(5)
;		image=WIDGET_INFO(state.traceimage, /DROPLIST_SELECT)
;		IF image GT 0 THEN WIDGET_CONTROL,state.base_image,SENSITIVE=1
; 	Traces du cadre et du limbe du Soleil
;		image=WIDGET_INFO(state.traceimage, /DROPLIST_SELECT)
		IF NOT KEYWORD_SET(edge) THEN edge=[-2., -2., 2., 2.] 
;	Trace du disque photospherique
		IF image EQ 0 THEN BEGIN
			plotphot, edge, CADRE=cadre, LIMB=limb, $
				ANNOTATION=annotation, NOERASE=noerase
			IF (mainstruct.laser EQ 1) THEN BEGIN
				NRH1_postscript, /ON		
				plotphot, edge, CADRE=cadre, LIMB=limb, $
					ANNOTATION=annotation, NOERASE=noerase
				NRH1_postscript, /OFF	
			ENDIF
		ENDIF

;	Trace d'une image a laquelle les coord. RH seront superposees
		IF image GT 0 AND noerase EQ 0 THEN BEGIN
		        WIDGET_CONTROL, state.imfiles(0), GET_VALUE = imfile
			WIDGET_CONTROL, state.centrimx, GET_VALUE = xcentre
			WIDGET_CONTROL, state.centrimy, GET_VALUE = ycentre
			WIDGET_CONTROL, state.radius, GET_VALUE = rayon
			WIDGET_CONTROL, state.anglax, GET_VALUE = inclin
			WIDGET_CONTROL, state.bg_scale,GET_VALUE = scale
			scale = scale-1
			plotimage, imfile, [xcentre, ycentre], $
				rayon, inclin, edge, CADRE=cadre, $
				ANNOTATION=annotation, LIMB=limb, IMAGE=image, $
				LASER=mainstruct.laser, SCALE=scale, message
			WIDGET_CONTROL, state.txt_message, $
				SET_VALUE=message, /APPEND
		ENDIF

; 
;	1) Trace a partir d'un fichier de positions
		WIDGET_CONTROL, state.files(0), GET_VALUE = fpos
		pos = RSTRPOS( fpos,'/')
		IF STRUPCASE(STRMID(fpos,pos+1,1)) NE 'P' THEN err=1 ELSE BEGIN
			filenames=FINDFILE(fpos, COUNT=ict)
			IF ict EQ 1 THEN err=newlitentete(1, fpos(0), file) $
				ELSE err=1
		ENDELSE
		IF (err EQ 1) THEN BEGIN
			typeRH = 'manuel'
		ENDIF ELSE BEGIN
			typeRH = motcle(1, 'LABEL') 
			IF typeRH EQ 'EW-NS' THEN BEGIN	; fichier pos. 2D
				err = newlecp2d(4, tabpos, structab, $
					FICHIER=fpos, /oldmode)
			ENDIF ELSE BEGIN	; fichier pos. 1D
				err = newlecp1d(4,tabpos, structab, $
					FICHIER=fpos, /oldmode)
			ENDELSE
			chfreq = motcle(4, 'FREQ')
			close, 4
			IF (err EQ 1) THEN RETURN
			reads, chfreq,frequence,format='(f5.1)'
			WIDGET_CONTROL,state.freqman,SET_VALUE=frequence
			pastempo = file.paspix(0)
			posinfo = structab.tabe(1:2,*)	
					; debut/nbre de chaque pos.
			WIDGET_CONTROL, state.heures, GET_VALUE = heures
; inclure ici d'autres possibilites de selectionner l'heure (voir PROFIL)

			numpos=WIDGET_INFO(state.lis_numpos, /DROPLIST_SELECT)
			firstinst = hms(heures(0)) & lastinst = hms(heures(1))
;	Trace des positions 2D
			IF typeRH EQ 'EW-NS' THEN BEGIN
				IF numpos LE 0 THEN $
				plotpos2d, tabpos, posinfo, pastempo, $
					frequence, fichinfo(4).date, $
					heures = [firstinst, lastinst], $
					SYMBOL=symbol, SHADE=shade, $
					DATE=tracedate, FIGURE=figure,  $
					FILL=fill, SYMSIZE=taille $
				ELSE $
				plotpos2d, tabpos, posinfo, pastempo, $
					frequence, fichinfo(4).date, $
					heures = [firstinst, lastinst], $
					DATE=tracedate,  FIGURE=figure,  $
					FILL=fill, SYMSIZE=taille, $
					SYMBOL=symbol, $
					SHADE=shade, numpos = numpos
				IF (mainstruct.laser EQ 1) THEN BEGIN
					NRH1_postscript, /ON
					IF numpos LE 0 THEN $
						plotpos2d, tabpos, posinfo, pastempo, $
						frequence, fichinfo(4).date, $
						heures = [firstinst, lastinst], $
						SYMBOL=symbol, SHADE=shade, $
						DATE=tracedate,  FIGURE=figure,  $
						FILL=fill, SYMSIZE=taille $
					ELSE $
						plotpos2d, tabpos, posinfo, pastempo, $
						frequence, fichinfo(4).date, $
						heures = [firstinst, lastinst], $
						DATE=tracedate,  FIGURE=figure,  $
						FILL=fill, SYMSIZE=taille, $
						SYMBOL=symbol, $
						SHADE=shade, numpos = numpos
					NRH1_postscript, /OFF
				ENDIF
;	Initialisation des parametres du trace de positions 1D
			ENDIF ELSE BEGIN

				WIDGET_CONTROL, state.time_hh, GET_VALUE = hou
				WIDGET_CONTROL, state.time_mm, GET_VALUE = min
				WIDGET_CONTROL, state.time_ss, GET_VALUE = secs
				WIDGET_CONTROL, state.time_fss, GET_VALUE = fsecs

				instant = 100*LONG(fsecs) + 1000*(LONG(secs) + 60*LONG(min) + $
					3600*LONG(hou))
				IF numpos EQ 0 THEN numpos = 1 ; numpos=0: toutes les positions
				numpos = numpos-1	; compteur pos.: debut a 0
				num = $
				ROUND((instant-structab.tabe(1,numpos))/pastempo)
				IF num LT 0 THEN num=0
				IF num GE structab.tabe(2,numpos) THEN $
					num = structab.tabe(2,numpos)-1
				instant = structab.tabe(1,numpos) + num*ROUND(pastempo)
				hou = instant/3600000 & reste = instant MOD 3600000
				min = reste/60000 & reste = reste MOD 60000
				secs = reste / 1000  & reste = reste MOD 1000
				fsecs = (10*reste) / 1000
				
			WIDGET_CONTROL, state.time_hh, SET_VALUE = hou
			WIDGET_CONTROL, state.time_mm, SET_VALUE = min
			WIDGET_CONTROL, state.time_ss, SET_VALUE = secs
			WIDGET_CONTROL, state.time_fss, SET_VALUE = fsecs

				canal = tabpos(numpos, 1, num)
;					1=canal
				IF STRUPCASE(STRMID(typeRH,0,1)) EQ 'E' $
					THEN BEGIN
					canew0=canal & cansn0 = 0.
					fwhmew=0. & fwhmsn=64.
				ENDIF ELSE BEGIN
					canew0 = 0. & cansn0 = canal
					fwhmew=128. & fwhmsn=0.
				ENDELSE
				WIDGET_CONTROL,state.can_ew,SET_VALUE = canew0
				WIDGET_CONTROL,state.can_sn,SET_VALUE = cansn0
				WIDGET_CONTROL,state.fwhm_ew,GET_VALUE = aux
				IF aux EQ 0. THEN $
				WIDGET_CONTROL,state.fwhm_ew,SET_VALUE = fwhmew
				WIDGET_CONTROL,state.fwhm_sn,GET_VALUE = aux
				IF aux EQ 0. THEN $
				WIDGET_CONTROL,state.fwhm_sn,SET_VALUE = fwhmsn
			ENDELSE
		ENDELSE		

; ----------------------------------------------------------------------------

;	2) Trace a partir des donnees entrees manuellement ou d'un fichier 1D
		IF typeRH NE 'EW-NS' THEN BEGIN
			idate = lonarr(3)
; 				jour, mois, an-1900 (voir procedure C2IDATE)
			idate(0) = WIDGET_INFO(state.date_d, $
							/DROPLIST_SELECT) + 1
			idate(1) = WIDGET_INFO(state.date_m, $
							/DROPLIST_SELECT) + 1
			idate(2) = WIDGET_INFO(state.date_y, $
							/DROPLIST_SELECT) + 80

		WIDGET_CONTROL, state.time_hh, GET_VALUE = hou
		WIDGET_CONTROL, state.time_mm, GET_VALUE = min
		WIDGET_CONTROL, state.time_ss, GET_VALUE = secs
		WIDGET_CONTROL, state.time_fss, GET_VALUE = fsecs

			heurms = 100*LONG(fsecs)+ 1000 *(LONG(secs)+ 60*( (LONG(min) + 60*LONG(hou)) ))
			WIDGET_CONTROL,state.freqman,GET_VALUE = frequence
			WIDGET_CONTROL,state.can_ew,GET_VALUE = canew0
			WIDGET_CONTROL,state.can_sn,GET_VALUE = cansn0
			WIDGET_CONTROL,state.fwhm_ew,GET_VALUE = fwhmew
			WIDGET_CONTROL,state.fwhm_sn,GET_VALUE = fwhmsn
			choix_iono = [0, 0, 0]
			i = WIDGET_INFO(state.iono, /DROPLIST_SELECT)
			choix_iono(i) = 1
			WIDGET_CONTROL,state.bgroup_control, GET_UVALUE = number
			plot_hg_man, canew0, cansn0, fwhmew, fwhmsn, $
					number, idate, frequence, heurms, $
					CORSTAT=choix_iono(1), $
					CORPOIT=choix_iono(2), SHADE=shade, $
					LABEL=timelab, DATE=tracedate, FIGURE=figure, $
					FILL=fill, SYMSIZE=taille, $
					LINESTYLE=lnstl, MESSAGE=message
			IF mainstruct.laser EQ 1 THEN BEGIN
				NRH1_POSTSCRIPT, /ON
				plot_hg_man, canew0, cansn0, fwhmew, $
					fwhmsn, number, idate, frequence, $
					heurms, CORSTAT=choix_iono(1), $
					CORPOIT=choix_iono(2), SHADE=shade, $
					LABEL=timelab, DATE=tracedate, FIGURE=figure, $
					FILL=fill, SYMSIZE=taille, $
					LINESTYLE=lnstl, MESSAGE=message
				NRH1_POSTSCRIPT, /OFF
			ENDIF
			WIDGET_CONTROL, state.txt_message, SET_VALUE=message, $
				/APPEND
		ENDIF
; ----------------------------------------------------------------------------

	ENDIF

	IF(ev.value EQ 2) THEN BEGIN
		WIDGET_CONTROL, stash, SET_UVALUE = state
		WIDGET_CONTROL, ev.top, /DESTROY
		RETURN
	ENDIF

ENDIF


; on sauve les modifications
WIDGET_CONTROL, stash, SET_UVALUE = state
END



PRO MENUTRACECARTE2D

common NRH1_GLOBAL,nomfich,fichinfo
common NRH1_HELIO,mainstruct
common layout, lo_params, timelab, symbol, lnstl, figure, fill, taille

Title = "MAP of heliographic positions"
;         initialisation du button group

files = lonarr ( 1 ) 
imfiles = lonarr ( 1 ) 

ISCROLL = 0
DEVICE, GET_SCREEN_SIZE = SCR_SIZE
RETBASE:			;Retour pour  Ascenseur
IF ISCROLL THEN $
    base = WIDGET_BASE (TITLE = title,/FRAME,/COLUMN,XOFFSET = 200, $
       YOFFSET = 200,/SCROLL,X_SCROLL_SIZE = Xss,Y_SCROLL_SIZE = Yss ) $
ELSE $
    base = WIDGET_BASE (TITLE = title,/FRAME,/COLUMN, XOFFSET =  200,$
                                                  YOFFSET = 200 )
base_zone = WIDGET_BASE(base, /Column, /FRAME)	; zone pour parametres du fichier de position
base_manu = WIDGET_BASE(base, /COLUMN, /FRAME)	; zone pour positions en entree manuelle
base_image = WIDGET_BASE(base, /COLUMN, /FRAME)	; zone pour trace d'image
base_ploptions = WIDGET_BASE(base,/ROW,/FRAME)



base_param = WIDGET_BASE(base, column = 4, /FRAME)



	heure = ['00:00:00', '00:00:00']
	deltat = 0
	nbpos = 0

; Plot heliographic positions stored in a 2d position file
lab_posfile = WIDGET_LABEL(base_zone,  VALUE= $
	'Source positions stored in a file:')
base_file = WIDGET_BASE ( base_zone,/COLUMN )
files(0)= CW_pickfile_nrh(base_file, TITLE = 'Position file:', $
              VALUE = mainstruct.ewfile, FILTER='p*.*')
base_zone1 = WIDGET_BASE(base_zone, /ROW)
heures = CX_HEURES (base_zone1,VALUE=heure)
base_zone2 = WIDGET_BASE(base_zone1, /COLUMN)
lab_numpos = WIDGET_LABEL(base_zone2, VALUE = "Source #: ")
lis_numpos = WIDGET_DROPLIST(base_zone2, VALUE= ['All', '0'])

; General options for plot layout and field of view 
plot_layout =  WIDGET_BUTTON(base_ploptions,VALUE='Plot layout')
fieldofview = WIDGET_BUTTON(base_ploptions,VALUE='Field of view')
zoom = WIDGET_BUTTON(base_ploptions,VALUE='ZOOM')
curseur = WIDGET_BUTTON(base_ploptions,VALUE='CURSOR')

; Parametres du trace de l'image de fond
lab_image = WIDGET_LABEL(base_image,  VALUE= $
	'Underlaid image:')
imfiles(0) = CW_pickfile_nrh(base_image, TITLE = 'Image file:', $
              VALUE = '*.png', FILTER='*.png' )
base_image1 = WIDGET_BASE(base_image, column=4)
base_image11= WIDGET_BASE(base_image1, ROW=3)
lab_centr = WIDGET_LABEL(base_image11, VALUE = "Centre: ")
centrimx = CW_FIELD(base_image11,TITLE="x",/INTEGER, VALUE=0, $
                     /RETURN_EVENTS, XSIZE=4)
centrimy = CW_FIELD(base_image11,TITLE="y",/INTEGER, VALUE=0, $
                     /RETURN_EVENTS, XSIZE=4)
base_image12= WIDGET_BASE(base_image1, ROW=3)
lab_ri = WIDGET_LABEL(base_image12, VALUE = "Radius, inclination: ")
radius = CW_FIELD(base_image12,TITLE="R [pix]:",/INTEGER, VALUE=0,$
                     /RETURN_EVENTS, XSIZE=4)
anglax = CW_FIELD(base_image12,TITLE="I [deg]:",/FLOAT, VALUE=0.,$
                     /RETURN_EVENTS,XSIZE=9)
bg_image = CW_BGROUP( base_image1, ['COMP. C, r', 'COMP. incl.', 'FITS HDR', 'HELP'], $
	/COLUMN)
base_image13= WIDGET_BASE(base_image1, /COLUMN)
lab_sc = WIDGET_LABEL(base_image13, VALUE = "Plot procedure: ")
bg_scale = CW_SWITCH(base_image13,[' TV ', 'TVSCL'],VALUE = 2)

; Parametres des sources pour entree manuelle

base_manu0 = WIDGET_BASE(base_manu,  column = 4)
lab_manu0 = WIDGET_LABEL(base_manu0,  VALUE= $
	'Manual entry of source positions:')
bgroup_manu = CW_BGROUP( base_manu0, ['READ', ' SET ', 'WRITE', 'HELP'], /ROW)

base_manu1 = WIDGET_BASE(base_manu, column=3)
base_manu11 = WIDGET_BASE(base_manu1, /COLUMN)
lab_manu11 = WIDGET_LABEL(base_manu11, VALUE = "East-west: ")
can_ew = CW_FIELD(base_manu11,TITLE="Channel:",/FLOAT,VALUE=0.,$
                     /RETURN_EVENTS,XSIZE=9)
fwhm_ew = CW_FIELD(base_manu11,TITLE=" Width :",/FLOAT,VALUE=0.,$
                     /RETURN_EVENTS,XSIZE=9)

base_manu12 = WIDGET_BASE(base_manu1, /COLUMN)
lab_manu12 = WIDGET_LABEL(base_manu12, VALUE = "South-north: ")
can_sn = CW_FIELD(base_manu12,/FLOAT,TITLE=" ",VALUE=0.,$
                     /RETURN_EVENTS,XSIZE=9)
fwhm_sn = CW_FIELD(base_manu12,TITLE=" ",/FLOAT,VALUE=0.,$
                     /RETURN_EVENTS,XSIZE=9)

base_manu13 = WIDGET_BASE(base_manu1, /COLUMN)
lab_manu13 = WIDGET_LABEL(base_manu13, VALUE = "Freq. (MHz): ")
freqman = CW_FIELD(base_manu13,TITLE=" ",/FLOAT,VALUE=164.,$
                     /RETURN_EVENTS,XSIZE=9)
iono = WIDGET_DROPLIST(base_manu13, $
	VALUE= ['No corr.', 'Static corr.', 'Poitiers'])


base_manu2 = WIDGET_BASE(base_manu, column=7)
lab_manu21 = WIDGET_LABEL(base_manu2, VALUE = "Day: ")
days = STRARR(31)
FOR i = 0, 30 DO days(i) = STRCOMPRESS(i+1)
date_d = WIDGET_DROPLIST(base_manu2, VALUE=days)
lab_manu22 = WIDGET_LABEL(base_manu2, VALUE = "Month: ")
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', $
		'Oct', 'Nov', 'Dec'] 
date_m = WIDGET_DROPLIST(base_manu2, VALUE= months)
lab_manu23 = WIDGET_LABEL(base_manu2, VALUE = "Year: ")
years = STRARR(20)
FOR i = 0, 19 DO years(i) = STRCOMPRESS(i+1980)
date_y = WIDGET_DROPLIST(base_manu2, VALUE= years)

lab_manu24 = WIDGET_LABEL(base_manu2, VALUE = "Hour: ")
hours = STRARR(24)
FOR i = 0, 23 DO hours(i) = STRCOMPRESS(i)
time_hh= CW_FIELD(base_manu2,TITLE=" ",/INTEGER,VALUE=0,$
                     /RETURN_EVENTS,XSIZE=5)
lab_manu25 = WIDGET_LABEL(base_manu2, VALUE = "Min.: ")
mins = STRARR(60)
FOR i = 0, 59 DO mins(i) = STRCOMPRESS(i)
time_mm= CW_FIELD(base_manu2,TITLE=" ",/INTEGER,VALUE=0,$
                     /RETURN_EVENTS,XSIZE=5)
lab_manu26 = WIDGET_LABEL(base_manu2, VALUE = "Secs: ")
time_ss= CW_FIELD(base_manu2,TITLE=" ",/INTEGER,VALUE=0,$
                     /RETURN_EVENTS,XSIZE=5)
lab_manu27 = WIDGET_LABEL(base_manu2, VALUE = '*0.1 s:')
fracs = STRARR(10)
FOR i = 0, 9 DO fracs(i) = STRCOMPRESS(i)
time_fss= CW_FIELD(base_manu2,TITLE=" ",/INTEGER,VALUE=0,$
                     /RETURN_EVENTS,XSIZE=5)

bgroup_control = CW_BGROUP( base, ['OPLOT', 'PLOT', 'QUIT'], /ROW)

txt_message = WIDGET_TEXT( base, VALUE = ' ', YSIZE=3, /SCROLL)

state = { base:base,$
	bgroup_control:bgroup_control , heures:heures, $
	plot_layout:plot_layout, $
	zoom:zoom, curseur:curseur, $
	txt_message:txt_message,  $
	lis_numpos:lis_numpos, $
	files:files, $
	base_image:base_image, centrimx:centrimx, centrimy:centrimy, $
	radius:radius, anglax:anglax, bg_image:bg_image, bg_scale:bg_scale, $
	imfiles:imfiles, $
	base_manu:base_manu, base_zone:base_zone, base_file:base_file, $
	bgroup_manu:bgroup_manu, $
	can_ew:can_ew, fwhm_ew:fwhm_ew, can_sn:can_sn, fwhm_sn:fwhm_sn, $
	freqman:freqman, date_d:date_d, date_m:date_m, date_y:date_y, $
	time_hh:time_hh, time_mm:time_mm, time_ss:time_ss, time_fss:time_fss, $
	fieldofview:fieldofview, iono:iono  $
	}


;IF lo_params(5) EQ 0 THEN WIDGET_CONTROL, base_image, SENSITIVE=0 ELSE $
;	WIDGET_CONTROL, base_image, SENSITIVE=1

WIDGET_CONTROL, WIDGET_INFO ( base, /CHILD ), SET_UVALUE = state 

WIDGET_CONTROL, base ,/REALIZE,TLB_GET_SIZE = Wid_size

    IF(Wid_size(0) GT Scr_size(0) OR Wid_size(1) GT  Scr_size(1)*0.8 $
			AND NOT Iscroll ) THEN BEGIN
		WIDGET_CONTROL, Base, /DESTROY
		Iscroll = 1
		XSS = Scr_size(0) * 0.55
		YSS = Scr_size(1) * 0.8
				GOTO, RETBASE
	ENDIF

XMANAGER,'MENUTRACECARTE2D', base,GROUP_LEADER = mainstruct.root, /NO_BLOCK


END


 
