
;+ ***********************************************************************
; NAME:
;	NRH_VISU_2D
;
; PURPOSE:
;	WIDGETS pour la visualisation des images 2D du NRH
;
; CATEGORY:
;	WIDGET
;
; CALLING SEQUENCE:
;	NRH_VISU_2D, GROUP = group
;
; INPUTS:
;
; OPTIONAL INPUTS:
;	GROUP	Identifieur du widget appelant
;	
; COMMON BLOCKS:
;	COMMON FICRH, str_fic	structure definie dans rh_2d.pro
;					selection des fichiers
;	COMMON VISU_2D str_visu	structure definie dans rh_2d.pro
;					parametres de visualisation
;	COMMON DATA_NRH2, Donnee, Header contenant les donnees lues

; PROCEDURE:
;	Cette procedure donne acces aux fonctionsde
;		-trace d'images en bitmap
;		-traces de contours
;		-traces de profils par PROFILE ou PROFILES
;		-selection d'une region dans une image
;		-selection de fichier
;
; EXAMPLE:
;	NRH_VISU_2D
;		ou
;	NRH_VISU_2D, GROUP=Id
;
; MODIFICATION HISTORY:
;	Ecrit par: J Bonmartin le 18/08/98  (bonmartin@obspm.fr)
;	Le 03/11/98 rajoute HOURGLASS (JB)
;	Le 10/03/99 affichage de la selection d'heure a l'entree (JB)
;			Return_event->All_events
;	Le 06/05/99 Affichage de STOKES I et STOKES V simultanement (JB)
;	Le 09/08/00 Modif heure coordonnees pixels,
;			dialog-message sur le widget (JB)
;	Le 17/10/00 Coordonnees de points sur Image ou contour (JB)
;	Le 19/01/01 Modification d'ouverture de fichier (JB)
;       Le 22/01/04 Modif pour ecrans 24 bits et Write_png
;       Le 22/09/2008 : bug charsize adaptable pour labels images/contours(AB)
;-*******************************************************************

PRO NRH_VISU_2D_EVENT, event

COMMON VISU_2D,str_visu
COMMON LIMIT,str_lim
COMMON FICRH,str_fic
COMMON INFO2D, str_inf2d
COMMON BASE_VISU,base2,inf,indt,bpol,Type,Bcoord, wrcoord, fcoord, Hsel, $
                 Cunit, Str_xlab

widget_control, event.id, get_uvalue= ev

case ev of
	'Images':begin
		 Type = 'I'
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		WIDGET_CONTROL, /HOURGLASS
		IF Str_inf2d.nim EQ 1 THEN BEGIN
			ret = widget_message('NOT allowed on this File') 
			RETURN
                ENDIF
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 0, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab
		IF Str_visu.polar EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 1, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab, /STKV_WIN
		ENDIF
	      end

	'Contours': Begin
		IF Str_inf2d.nim EQ 1 THEN BEGIN
			ret = widget_message('NOT allowed on this File') 
			RETURN
                ENDIF

		 Type = 'C'
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		WIDGET_CONTROL, /HOURGLASS

		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 0, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab
		IF Str_visu.polar EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 1, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab, /STKV_WIN
		ENDIF
		End

	'CoupeXY':   begin
		Type = 'X'
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 0, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab
		IF Str_visu.polar EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 1, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab, /STKV_WIN
		ENDIF
		end

	'Coupe':   begin
		Type = 'Q'
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 0, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab
		IF Str_visu.polar EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 1, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab, /STKV_WIN
		ENDIF
		end

	'Png':	BEGIN
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		WIDGET_CONTROL, /HOURGLASS
		READ_NRHIM, Str_fic.file, Hsel,Str_inf2d,  DONNEE, Str_im, $
				STOKES = Str_visu.polar, INDIC = Str_visu.ind
		NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
						SETLABEL = str_xlab
		Filename=CW_RD_STRING(GROUP=event.top,TITLE='PNG File')
		IF Filename NE '' THEN BEGIN

                device, get_visual_depth = thisdepth
                if thisdepth gt 8 then begin
        ; ajout pour tvrd avec ecrans 24 bits
                    device, decomposed = 1
                    image = TVRD(True=1)
                    device, decomposed = 0
                    WRITE_PNG, filename, image
                end else begin
        ; ajout de ,r_curr, g_curr, b_curr pour WRITE_PNG en 8bits 
        ; sans r,g,b image PNG en noir et blanc
		    WRITE_PNG, filename, TVRD(),r_curr, g_curr, b_curr
                endelse
                END




;WRITE_PNG, Filename,TVRD()
		WDELETE

		END

	'Indice':begin
		WIDGET_CONTROL, /HOURGLASS
		Hsel= event.value
		i=TIME_IND_NRH(Str_fic.file, Hsel)
		   if i lt 0 THEN BEGIN
			ret= widget_message('TIME out of range') 
			i=0
		   end
		str_visu.ind = i
		WIDGET_CONTROL, Indt, SET_VALUE = Hsel
		end
	'INCREMENT': str_visu.inc =event.value

	'Plus': begin
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		IF Str_inf2d.nim EQ 1 THEN BEGIN
			ret = widget_message('NOT allowed on this File') 
			RETURN
			END

		str_visu.ind =str_visu.ind+str_visu.inc
			IF Str_visu.ind GE Str_inf2d.nim THEN $
				str_visu.ind =str_visu.ind-str_visu.inc
		WIDGET_CONTROL, /HOURGLASS
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 0, INDIC = Str_visu.ind
		WIDGET_CONTROL,indt, set_value= Str_im.time
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab
		IF Str_visu.polar EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 1, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab, /STKV_WIN
		ENDIF
		end
	'Moins': begin
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select a FILE')
			RETURN & END
		IF Str_inf2d.nim EQ 1 THEN BEGIN
			ret = widget_message('NOT allowed on this File') 
			RETURN
			END

		str_visu.ind =str_visu.ind-str_visu.inc
			IF Str_visu.ind LT 0 THEN $
					Str_visu.ind = 0
		WIDGET_CONTROL, /HOURGLASS
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 0, INDIC = Str_visu.ind
		WIDGET_CONTROL,indt, set_value = Str_im.time
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab
		IF Str_visu.polar EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Hsel, Str_inf2d,  DONNEE, Str_im, $
				STOKES = 1, INDIC = Str_visu.ind
			NRH_IMAGE, Donnee, Str_im, Str_lim, Str_visu, Type, $
				SETLABEL = str_xlab, /STKV_WIN
		ENDIF
		end

	'Dimension':begin
		str_visu.dim = event.value
		end

	'Niveau': str_visu.cont = event.value

	'Pcent': str_visu.pcent = event.value

	'Mcent': str_visu.mcent = event.value

	'Selreg': BEGIN
		READ_NRHIM, Str_fic.file, Hsel,Str_inf2d,  DONNEE, Str_im, $
				STOKES = Str_visu.polar
		cw_selfield,DONNEE, Str_im, Str_lim, GROUP=event.top 
		End

	'REGION':begin
		str_lim.xd = event.xd
		str_lim.xf = event.xf
		str_lim.yd = event.yd
		str_lim.yf = event.yf
		end
	
	'Stokes': Str_visu.polar =event.index

	'Coord': begin
		READ_NRHIM, Str_fic.file, Hsel,Str_inf2d,  DONNEE, Str_im, $
				STOKES = Str_visu.polar, INDIC=Str_visu.ind
		IF Type NE 'C' THEN Type = 'I'
		Res = NRH_COORDPIX(Donnee, STr_im, Str_lim, $
			Str_Visu, Type, DIALOG_PARENT=Event.Top)
		Strg = STRING(Res.Xcoord, Res.Ycoord,Res.Inten, $
			FORMAT= '("X=",f5.2,",Y=",f5.2,",Val=",E9.2)')
		WIDGET_CONTROL, Bcoord, SET_VALUE= Strg
		WDELETE
		IF Wrcoord EQ 1 THEN BEGIN
			IF Fcoord EQ '' THEN BEGIN
			 r=DIALOG_MESSAGE('FIRST Open a COORD FILE',$
				DIALOG_PARENT=Event.top)
			 return & END

		NRH_WR_POINT, Cunit, Res
			END
		End

	'Wrcoord': wrcoord = event.index

	'Fcoord': BEGIN
		Fcoord = CW_FILE_NAME(Title='Coord FILE')
			IF Fcoord EQ '' THEN Return
		GET_LUN,CUNIT
		OPENW, Cunit, Fcoord
		PRINTF, CUNIT, $
		'INSTRUM   DATE      TIME        FREQ    X     Y      Value'
		End

	'Acoord': BEGIN
		Fcoord = CW_FILE_NAME(Title='Append to FILE',/OLD)
			IF Fcoord EQ '' THEN Return
		GET_LUN,CUNIT
		OPENU, Cunit, Fcoord, /APPEND
		End

	'Ccoord': Begin
			FREE_LUN, Cunit
			Fcoord =''
		End

	'Fichiers': BEGIN
		NRH_PICKFILE, Str_fic, Str_inf2d, Str_lim, Physpar, Lfreq
		inf = cw_infonrh(inf, Str_inf2d, /INFO)
		Hsel= str_inf2d.hd
		Str_visu.polar = 0
		Str_visu.ind = 0
		IF physpar[1] EQ 'Stokes V' THEN Physpar[1]='Stokes I+V or V'
		WIDGET_CONTROL, Bpol, SET_VALUE = Physpar
		WIDGET_CONTROL,indt, set_value=Hsel
            end
	'Couleurs': BEGIN
                    Xloadct
        ; ajout pour write_png en 8bits 
                    tvlct,r_curr,g_curr,b_curr,/get
                    END
        ; ajout /charsize (22 sep 2008)
	'Label': str_xlab=cw_labelnrh(Group=event.top, /charsize)

	'Laser': BEGIN
		print,'LASER = ',event.select
		Str_visu.Print = event.select
		end
 
     'Exit': BEGIN
		widget_control, event.top, /DESTROY
		NRH_FCLOSE,Str_inf2d
		END

endcase
end


PRO NRH_VISU_2D, GROUP = group

COMMON BASE_VISU,base2,inf,indt,bpol,Type,Bcoord, wrcoord, fcoord, Hsel, $
		Cunit, Str_xlab
COMMON VISU_2D,str_visu
COMMON LIMIT, str_lim
COMMON FICRH,str_fic
COMMON INFO2D, Str_inf2d

WRCOORD = 0
FCOORD = ''
str_xlab = {nrh_str_label}
if N_ELEMENTS(Group) Eq 0 THEN group = 0

ISCROLL = 0
DEVICE, GET_SCREEN_SIZE = SCR_SIZE
RETBASE:			;Retour pour  Ascenseur
IF ISCROLL THEN $
    base = WIDGET_BASE (TITLE = title,/COLUMN,$
       /SCROLL,X_SCROLL_SIZE = Xss,Y_SCROLL_SIZE = Yss ) $
ELSE $
base= widget_base(Group_leader= group, Title = 'Visualisation - 2 D',$
		 COLUMN=1)

 	PHYSPAR = ['',''] & LFREQ = ' '
	IF str_fic.file EQ ' ' OR strlen(str_fic.file) EQ '' THEN $
		NRH_PICKFILE, Str_fic, Str_inf2d, Str_lim, Physpar, Lfreq $ 
	ELSE $;IF Str_inf2d.Physpar NE 0 THEN $
		NRH_FOPEN, Str_fic.File, Str_inf2d, Str_lim, Physpar, Lfreq 

	Str_visu.polar = 0
	Hsel = Str_inf2d.Hd 
	IF physpar[1] EQ 'Stokes V' THEN Physpar[1]='Stokes I+V or V'
	Type = 'I' ; type de trace: I-images, C-contours, X-profile, Q-profiles
	Str_visu.Print = 0

base1 = widget_base(base, row=3,/frame,/align_center)
l= widget_label(base1, value= 'FONCTIONS: ', /align_center)
	base12= widget_base(base1, row=3,/align_center)
	b = widget_button( base12,Uvalue = 'Images',value='Images')
	b = widget_button( base12,Uvalue = 'Contours',value='Contours')
	b = widget_button( base12,Uvalue = 'CoupeXY',value='IDL profiles')
	b = widget_button( base12,Uvalue = 'Coupe',value='IDL profile')
	b = widget_button( base12,Uvalue = 'Png',value='Save on PNG')
	b = CW_BGROUP( base12,'Printer',row=1,Uvalue = 'Laser',$
		/nonexclusive,/return_name,SET_VALUE= string(str_visu.Print))

	base11= widget_base(base1,row=1,/frame,/align_center)
	l= widget_label(base11, value = 'Increment:',/align_center)
	b= widget_button(base11,Uvalue = 'Plus', value= ' + ')
	b= widget_button(base11,Uvalue = 'Moins', value= ' - ')
	b = cw_field( base11,Uvalue = 'INCREMENT',value=string(str_visu.inc)$
		,/integer, title= 'Value',/ALL_events,xsize=5)

	base13= widget_base(base1,column=2,/frame,/align_center)
	b = widget_button( base13,Uvalue = 'Coord',value='Pixel Coord')
	b = widget_button( base13,Uvalue = 'Fcoord',value='OPEN coord file')
	b = widget_button( base13,Uvalue = 'Acoord',value='APPEND to file')

	bcoord = widget_text(base13,value='',xsize=30)
		WRLIST=['Write OFF','Write ON']
	iwrcoord=WIDGET_DROPLIST(Base13, Uvalue= 'Wrcoord', Value=Wrlist)
	b = widget_button( base13,Uvalue = 'Ccoord',value='CLOSE coord file')


base2 = widget_base(base, Column=2,/frame,/align_center)
l= widget_label(base2, value = 'PARAMETRES:',/align_center)

	base22=WIDGET_BASE(base2,/column,/frame)
	bpol=  WIDGET_DROPLIST(Base22, Value= Physpar , Uvalue= 'Stokes')
	indt = cw_field( base22,Uvalue = 'Indice',value=Hsel $
		,/string, title= 'TIME',/Return_event,Xsize=20)
	b = cw_field( base22,Uvalue = 'Dimension',value=str_visu.dim $
		,/integer, title= 'DIM image',/ALL_events,Xsize=5)
	b = Widget_button(base22,value= 'Select a REGION',uvalue='Selreg')
	b = Widget_button(base22,value= 'Image LABEL',uvalue='Label')
	base21=WIDGET_BASE(base2,/column,/frame)
		l=widget_label(base21,Value='Contours',/Align_center)
		b=WIDGET_SLIDER(base21,Uvalue='Niveau',Title='Nb levels',$
			value=string(str_visu.cont),Maximum=30,Minimum=3)
		b=WIDGET_SLIDER(base21,Uvalue='Pcent',Title='MAX % of Max',$
			value=string(str_visu.pcent),Maximum=100,Minimum=1)
		b=WIDGET_SLIDER(base21,Uvalue='Mcent',Title='MIN % of Max',$
; modif 12 mars 2010 : 
;  pour le minimum le curseur etait limite a [1,50]; mis a [1,100]
;			value=string(str_visu.mcent),Maximum=50,Minimum=1)
			value=string(str_visu.mcent),Maximum=100,Minimum=1)
	inf = cw_infonrh(base2, Str_inf2d)


base3 = Widget_base(base,/Column,/Align_center)
	b = widget_button( base3,Uvalue = 'Fichiers',value='Select FILE')
	b = widget_button( base3,Uvalue = 'Couleurs',value='Colors')
	b = widget_button( base3,Uvalue = 'Exit',value='RETURN')

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


Xmanager, 'NRH_VISU_2D', base, /NO_BLOCK

end
