
;+ ***********************************************************************
; NAME:
;	GR_IMAGES
;
; PURPOSE:
;	WIDGET pour la visualisation de plusieurs images dans la meme fenetre
;
; CATEGORY:
;	WIDGET
;
; CALLING SEQUENCE:
;	GR_IMAGES, GROUP = group
;
; INPUTS:
;
; OPTIONAL INPUTS:
;	GROUP	Identifieur du widget appelant
;	
; COMMON BLOCKS:
;	FICHR, str_fic	structure definie dans rh_2d.pro
;					selection de fichiers
;	IMAGES_GR, str_imgr
;		 li:3,		nombre de lignes de la fenetre
;		 co:6,		nombre de colonnes de la fenetre
;		 dim:128,	dimension d'une image
;		 crli:0,	ligne courante
;		 crco:0,	colonne courante
;		 crwin:-1,	fenetre courante
;		 tsel:' ',	heure de l'image
;		 inc:		increment d'indice
;		 stk:0		Parametre de STOKES 0: I, 1: V
;	DATA_NRH2,Donnees, Header Donnees et Header lu
; 
; PROCEDURE:
;	Cette procedure permet de visualiser des images dans une meme fenetre
; et de les sortir dans un fichier PS. Les fichiers d'origine et la 
; disposition sont libres. A chaque nouvelle image la position dans la ligne
; est incrementee. En fin de ligne la colonne est incrementee.
;	L'utilisateur peut intervenir sur la position de l'image en modifiant
; les indices de lignes et de colonnes
;
; EXAMPLE:
;	GR_IMAGES
;		ou
;	GR_IMAGES,GROUP= id
;
; MODIFICATION HISTORY:
;	Ecrit par: J Bonmartin le 07/11/97 (bonmartin@obspm.fr)
;		Modif ouverture de fichiers pour HESSI le 19/01/01 (JB)
;-*******************************************************************

PRO GR_IMAGES_EVENT, event

COMMON FICRH,str_fic
COMMON INFO2D, Str_inf2d
COMMON LIMIT, Str_lim
COMMON IMAGES_GR,str_imgr
COMMON base_imgr,id_imgr

WIDGET_CONTROL, event.id, get_uvalue= ev

case ev of
         'LI': str_imgr.li = event.value

         'COL': str_imgr.co = event.value

         'DIM': str_imgr.dim = event.value

         'CRLI': str_imgr.crli = event.value

         'CRCOL': str_imgr.crco = event.value

         'CRE_WIN': BEGIN
               Xsize = str_imgr.co * str_imgr.dim
               Ysize = str_imgr.li * str_imgr.dim
               WINDOW,/free, XSIZE=xsize, YSIZE=ysize
               str_imgr.crwin = !D.WINDOW
           end

          'Time': Begin
                  Str_imgr.Tsel= event.value
             end

	  'Stokes': str_imgr.stk = event.index

          'File': Begin
		NRH_PICKFILE, Str_fic, Str_inf2d, Str_lim, Physpar, Lfreq
		id_imgr.inf = cw_infonrh(id_imgr.inf, Str_inf2d, /INFO)
		Str_imgr.Tsel = str_inf2d.hd
		Str_imgr.stk = 0
		WIDGET_CONTROL, id_imgr.stk, SET_VALUE = Physpar
		WIDGET_CONTROL,id_imgr.indt, set_value=Str_imgr.Tsel
             end

          'Regsel': BEGIN
		READ_NRHIM, Str_fic.file, Str_imgr.Tsel,Str_inf2d,  $
				DATA, Str_im, $
				STOKES = Str_imgr.Stk
		cw_selfield,Data, str_im, str_lim, Size=300, GROUP=event.top
		END

	 'Display': Begin
		if str_imgr.crwin lt 0 THEN BEGIN
			ret=widget_message('First CREATE a WINDOW') 
			Return
		end

		READ_NRHIM, Str_fic.file, Str_imgr.Tsel, Str_inf2d,$
				  DATA, Str_im, STOKES = Str_imgr.stk
		NRH_DISP_GRIMAGE, Data, Str_im , Str_lim, str_imgr
               WIDGET_CONTROL, id_imgr.crli, set_value=str_imgr.crli
               WIDGET_CONTROL, id_imgr.crco, set_value=str_imgr.crco
	     end

	  'Increment':	str_imgr.inc = event.value

	  'Plus': Begin
		if str_imgr.crwin lt 0 THEN BEGIN
			ret=widget_message('First CREATE a WINDOW') 
			Return
		end

                i1= TIME_IND_NRH(Str_fic.file, Str_imgr.tsel)
			i= i1 + str_imgr.inc
			if I GT str_inf2d.nim THEN BEGIN
				r=widget_message('END of FILE')
				RETURN 
			end 
		READ_NRHIM, Str_fic.file,'',Str_inf2d,  DATA, Str_im, $
				STOKES = Str_imgr.Stk,INDIC=i

		Str_imgr.Tsel =Str_im.time
		WIDGET_CONTROL,id_imgr.indt,SET_VALUE=Str_im.Time
		NRH_DISP_GRIMAGE, Data, Str_im , Str_lim, str_imgr
               WIDGET_CONTROL, id_imgr.crli, set_value=str_imgr.crli
               WIDGET_CONTROL, id_imgr.crco, set_value=str_imgr.crco
	     end

	  'Moins': Begin
		if str_imgr.crwin lt 0 THEN BEGIN
			ret=widget_message('First CREATE a WINDOW') 
			Return
		end
                i= TIME_IND_NRH(Str_fic.file, Str_imgr.tsel)
			i = i -	str_imgr.inc
			if I LT 0 THEN BEGIN
				r=widget_message('END of FILE')
				RETURN 
			end 
		READ_NRHIM, Str_fic.file,'',Str_inf2d,  DATA, Str_im, $
				STOKES = Str_imgr.Stk,INDIC=i

		Str_imgr.Tsel =Str_im.time
		WIDGET_CONTROL,id_imgr.indt,SET_VALUE=Str_im.Time
		NRH_DISP_GRIMAGE, Data, Str_im , Str_lim, str_imgr
               WIDGET_CONTROL, id_imgr.crli, set_value=str_imgr.crli
               WIDGET_CONTROL, id_imgr.crco, set_value=str_imgr.crco
	     end

	  'Print': Begin
		wset,str_imgr.crwin
              ;  device, get_visual_depth = thisdepth
              ;  if thisdepth gt 8 then begin
              ;      device, decomposed = 1
              ;      img = TVRD(True=1)
              ;      device, decomposed = 0
              ;  end else begin
		    img = TVRD()
              ;  endelse
		mydevice = !d.name
		SET_PLOT, 'PS'
		DEVICE, FILENAME= 'imgr.ps',/COLOR
			TV,img
		r=dialog_message('OUTPUT on IMGR.PS',DIALOG_PARENT=Event.top)
		device,/close
		SET_PLOT, mydevice
	     end

	  'Png':  BEGIN
		WSET, Str_imgr.crwin
		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
                        device, decomposed = 1
                        image = TVRD(True=1)
                        device, decomposed = 0
                        WRITE_PNG, Filename, image
                    end else begin
                        tvlct, rr, gg, bb, /get
		        WRITE_PNG, Filename, TVRD(), rr, gg, bb
                    endelse
	        end
            end
         'RESET': BEGIN
               str_imgr.crli=0
               str_imgr.crco=0
               WIDGET_CONTROL, id_imgr.crli, set_value=str_imgr.crli
               WIDGET_CONTROL, id_imgr.crco, set_value=str_imgr.crco
            end

	'Color': Xloadct

        'Return': WIDGET_CONTROL, event.top, /DESTROY

endcase

end


PRO GR_IMAGES, GROUP= group

COMMON FICRH,str_fic
COMMON INFO2D, Str_inf2d
COMMON LIMIT, Str_lim
COMMON IMAGES_GR,str_imgr
COMMON base_imgr,id_imgr

STR_IMGR = {STR_IMGR, li:3, co:6, dim:128, crli:0, crco:0, crwin:-1, $
		inc:1, tsel:' ', stk:0 }

ID_imgr = {ID_IMGR,crli:0L, crco:0L, inf:0L, indt:0L, stk:0L}

if N_ELEMENTS(Group) Eq 0 THEN GROUP=0

BASE = WIDGET_BASE( GROUP_LEADER= group, TITLE = ' 2 D  IMAGES', $
	    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_imgr.Tsel = Str_lim.Hd

BASE1= WIDGET_BASE(Base,column=2,/frame,/align_center,TITLE='DEFINITION')
         l=widget_label(base1,value='WINDOW DEFINITION',/align_center)
         dim= cw_field(base1,Value= str_imgr.dim, Title='Image size:', $
		 /integer,/return_event,Xsize=5, Uvalue= 'DIM')
         b= WIDGET_BUTTON(base1, value='Create WINDOW', Uvalue= 'CRE_WIN')
         nbco= cw_field(base1,Value= str_imgr.co, Title='Nb columns:', $
		 /integer,/return_event,Xsize=5,Uvalue='COL')
         nbli= cw_field(base1,Value= str_imgr.li, Title='Nb rows   :', $
		 /integer,/return_event,Xsize=5, Uvalue='LI')

BASE5= WIDGET_BASE(Base,column=2,/frame,/align_center)
         l=widget_label(base5,value='IMAGE position',/align_center)
         id_imgr.crli= cw_field(base5, $
                 Value= str_imgr.crli, Title='Curent row   :', $
		 /integer,/return_event,Xsize=5,Uvalue='CRLI')
         b= WIDGET_BUTTON(base5, value='RESET position', Uvalue= 'RESET')
         id_imgr.crco= cw_field(base5, $
                 Value= str_imgr.crco, Title='Curent column:', $
		 /integer,/return_event,Xsize=5,Uvalue='CRCOL')

BASE2= WIDGET_BASE(Base,/column,/frame,/align_center)
         l=widget_label(base2,value='IMAGE Selection',/align_center)
	 b= WIDGET_BUTTON(base2, value='Select FILE', Uvalue='File')
         b=WIDGET_BUTTON(Base2,Value='Select REGION', Uvalue='Regsel')
	 id_imgr.indt = cw_field(base2, value= str_imgr.tsel, $
		Uvalue= 'Time',/string, Title='Time: ',/return_event, $
		Xsize=20)

	 id_imgr.stk = WIDGET_DROPLIST(base2, value = Physpar, $
						Uvalue = 'Stokes')

	 id_imgr.inf= cw_infonrh(base2,Str_inf2d)

base3= WIDGET_BASE(base,row=1,/frame)
	b=WIDGET_BUTTON(base3,Uvalue= 'Plus',Value='+')
	b=WIDGET_BUTTON(base3,Uvalue= 'Moins',Value= '-')
	b=Cw_field(base3,Uvalue='Increment',value= str_imgr.inc, $
		/integer, TITLE='INCREMENT',/Return_event,Xsize=3)
b= WIDGET_BUTTON(base, value='DISLAY', Uvalue= 'Display')
b= WIDGET_BUTTON(base, value='PS File', Uvalue= 'Print')
b= WIDGET_BUTTON(base, value='PNG File', Uvalue= 'Png')
b= WIDGET_BUTTON(base, value='COLOR', Uvalue= 'Color')
b= WIDGET_BUTTON(base, value='Return', Uvalue= 'Return')


WIDGET_CONTROL, base,/Realize

Xmanager, 'GR_IMAGES', base, /NO_BLOCK

END
