
;+ ***********************************************************************
; NAME:
;	NRH_ANIM
;
; PURPOSE:
;	Cette procedure visualise les images suceesives contenues dans un 
;       fichier NRH 2D 
;
; CATEGORY:
;	WIDGET
;
; CALLING SEQUENCE:
;       NRH_ANIM, GROUP= group
;
; INPUTS:
;	
; KEYWORD PARAMETERS:
;	GROUP	Identification du widget appelant
;
; OUTPUTS:
;
; COMMON BLOCKS:
;	FICRH, str_fic	structure definissant le fichier traite 9voit RH_2D)
;	INFO2D	Str_inf2d	information sur les fichiers
;	LIMIT	Str_lim		limites de traitement
;
; PROCEDURE:
;	Cette procedure recherche dans un fichier FITS NRH-2D l'image
;       correspondant a l'heure de debut et affiche les images successives
;	en tenant compte de l'increment.
;	Le retour en arriere s'effectue par le WIDGET: '-'
;	Le WIDGET: '+' redonne la marche avant
;	'POSE' arrete le defilement. 'CONTINUE' contnue la ou on etait
;	'START' recommence au debut 
;
; EXAMPLE:
;	
; MODIFICATION HISTORY:
;	Ecrit par:J Bonmartin le 08/12/97 (bonmartin@obspm.fr)
;	Le 10/03/99	return_event->All_events (JB)
;			Modifie les niveaux MAX,MIN
;	le 13/03/99	modification de la fin de boucle
;	Le 19/01/01	Modif ouverture de fichiers HESSI (JB)
;-*******************************************************************
PRO NRH_ANIM_EVENT, event

COMMON FICRH,str_fic
COMMON INFO2D,str_inf2d
COMMON LIMIT,str_lim
COMMON WID_ANIM,str_anim, Str_im
COMMON Base_anim,id_anim
COMMON WID_CONTROL,inc,p

if tag_names(event,/structure_name) eq 'WIDGET_TIMER' THEN BEGIN
	
	if str_anim.pause eq 0 THEN Begin
 		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Image: '+ $
						Str_im.time
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb, Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = 0, INDIC=Str_anim.inc
		WSET,Str_anim.wini
		Nrh_display_im,Donnee, Str_im, str_lim, $
			Str_anim.Niv, MAX=Str_anim.nmax, $
			MIN = Str_anim.nmin

	   IF Str_anim.Stk EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb, Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = 1, INDIC=Str_anim.inc
		WSET,Str_anim.winv
		Nrh_display_im,Donnee, Str_im, str_lim, $
			Str_anim.Niv, MAX=Str_anim.nmax, $
			MIN = Str_anim.nmin, /STK
	   ENDIF
		str_anim.inc = str_anim.inc +str_anim.delta	
	end

	if str_anim.inc ge 0 and str_anim.inc lt str_anim.npt THEN $
				widget_control, event.top,timer=0.01 $

	Else BEGIN
		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Done'
		Str_anim.pause = 1
	ENDELSE
	return
ENDif

WIDGET_CONTROL, event.id, get_uvalue= ev

case ev of
	'Hdeb': BEGIN
		Str_anim.hdeb = event.value
		str_anim.ind = 0
		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Searching TIME'
		Str_anim.ind = TIME_IND_NRH( Str_fic.file, Str_anim.Hdeb)
		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Done'
		end

	'Delta': str_anim.delta = event.value
	'Cmax':	 Str_anim.Nmax = Event.value
	'Cmin':	 Str_anim.Nmin = Event.value

	'Reset': BEGIN
		str_anim.npt = Str_inf2d.Nim
		str_anim.hdeb= str_inf2d.hd & Str_anim.Ind = 0
		WIDGET_CONTROL,id_anim.hdeb, set_value=str_anim.hdeb
		WIDGET_CONTROL,id_anim.npt, set_value=str_anim.npt
		END

	'Npt':	str_anim.npt = event.value

	'Stokes': BEGIN
		Str_anim.Stk = event.Index
		IF Str_anim.Stk EQ 1 THEN BEGIN
			window,/free,xsize=256,ysize=256, XPOS=300, YPOS=200
			Str_anim.winv= !D.window
		ENDIF ELSE BEGIN
			IF Str_anim.Winv NE 0 THEN WDELETE,Str_anim.winv
			Str_anim.Winv = 0
		ENDELSE
		END

	'Normal':BEGIN
		str_anim.niv = event.index
	    IF Str_anim.niv EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb,Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = Str_anim.stk, INDIC=Str_anim.ind
		NMAX= MAX(Donnee, MIN = Nmin)
		Str_anim.Nmax= 2.*Nmax & Str_anim.nmin= 2.*Nmin
		WIDGET_CONTROL,Id_anim.cmax,SET_VALUE=Str_anim.nmax
		WIDGET_CONTROL,Id_anim.cmin,SET_VALUE=Str_anim.nmin
	    ENDIF ELSE BEGIN
		WIDGET_CONTROL,Id_anim.cmax,SET_VALUE=0.0
		WIDGET_CONTROL,Id_anim.cmin,SET_VALUE=0.0
	    ENDELSE
		END

	'Region':  BEGIN
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb,Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = Str_anim.stk, INDIC=Str_anim.ind
		cw_selfield,DONNEE, Str_im, Str_lim, GROUP=event.top 
		End
	
	'Pause': str_anim.pause = 1
	'+':	 str_anim.delta= ABS(str_anim.delta)
	'-':	 str_anim.delta=-ABS(str_anim.delta)

	'Plus': BEGIN
		str_anim.inc = str_anim.inc + 1
	   if str_anim.inc lt 0 or str_anim.inc ge str_anim.npt THEN BEGIN
			r=widget_message('OUT of range')
			str_anim.inc =str_anim.inc - 1
			return
			end
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb, Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = 0, INDIC=Str_anim.inc
		WSET,Str_anim.wini
		Nrh_display_im,Donnee, Str_im, str_lim, $
			Str_anim.Niv, MAX=Str_anim.nmax, $
			MIN = Str_anim.nmin

	   IF Str_anim.Stk EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb, Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = 1, INDIC=Str_anim.inc
		WSET,Str_anim.winv
		Nrh_display_im,Donnee, Str_im, str_lim, $
			Str_anim.Niv, MAX=Str_anim.nmax, $
			MIN = Str_anim.nmin, /STK
	   ENDIF

 		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Image: '+ $
						Str_im.time
		end

	'Moins': BEGIN
		str_anim.inc = str_anim.inc - 1
	   if str_anim.inc lt 0 or str_anim.inc ge str_anim.npt THEN BEGIN
			r=widget_message('OUT of range')
			str_anim.inc =str_anim.inc + 1
			return
			end
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb, Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = 0, INDIC=Str_anim.inc
		WSET,Str_anim.wini
		Nrh_display_im,Donnee, Str_im, str_lim, $
			Str_anim.Niv, MAX=Str_anim.nmax, $
			MIN = Str_anim.nmin
print,'MAX:',Str_anim.nmax
	   IF Str_anim.Stk EQ 1 THEN BEGIN
		READ_NRHIM, Str_fic.file, Str_anim.Hdeb, Str_inf2d,  $
				DONNEE, Str_im, $
				STOKES = 1, INDIC=Str_anim.inc
		WSET,Str_anim.winv
		Nrh_display_im,Donnee, Str_im, str_lim, $
			Str_anim.Niv, MAX=Str_anim.nmax, $
			MIN = Str_anim.nmin, /STK
	   ENDIF

 		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Image: '+ $
						Str_im.time
		end

	'Continue': str_anim.pause=0

	'Start': BEGIN
              if str_inf2d.nim eq 1 then begin
              ret = widget_message('NOT allowed on this File'+'Please Select Nrh file') 
              RETURN
	      END
		WIDGET_CONTROL, Id_anim.text, SET_VALUE='Display'
		str_anim.inc = str_anim.ind
		IF Str_anim.pause EQ 1 THEN $
			widget_control, event.top,timer=0.01
		str_anim.pause=0
		end

	'Fichiers': Begin

		Str_fic.File=DIALOG_PICKFILE( PATH= str_fic.rep, $
			FILTER= str_fic.filtre,/Read, /Noconfirm)


		NRH_FOPEN, Str_fic.File, Str_inf2d, Str_lim, $
						Physpar, Lfreq
		IF Physpar[1] NE '' THEN Physpar[1]='Stokes I&V'
		Hsel= str_inf2d.hd
		str_anim.ind=0
		Str_anim.Stk = 0
		str_anim.hdeb= str_inf2d.hd
		str_anim.npt = str_inf2d.nim

		WIDGET_CONTROL,id_anim.polar, set_value=Physpar		
		WIDGET_CONTROL,id_anim.hdeb, set_value=str_anim.hdeb
		WIDGET_CONTROL,id_anim.npt, set_value=str_anim.npt
		Id_anim.Info = Cw_infonrh(Id_anim.Info, Str_inf2d, /INFO)
		IF Str_anim.wini EQ 0 THEN BEGIN
			window,/free,xsize=256,ysize=256,XPOS=300, YPOS=500
			Str_anim.wini= !D.window
		ENDIF
             end

	'Couleurs': XLOADCT

	'Exit':  BEGIN
		WDELETE,Str_anim.wini
		IF Str_anim.Winv NE 0 THEN WDELETE,Str_anim.winv
		WIDGET_CONTROL, event.top, /DESTROY
		NRH_FCLOSE, Str_inf2d
		end

endcase

END


PRO NRH_ANIM, GROUP= group

COMMON FICRH,str_fic
COMMON INFO2D,str_inf2d
COMMON LIMIT, str_lim
COMMON WID_ANIM,str_anim, Str_im
COMMON Base_anim,id_anim

STR_IM = {Nrh_str_image}
STR_ANIM = {Str_anim, HDEB:' ', DELTA:1, IND:0, INC:0, NIV:0, $
		STK:0, NPT:0, PAUSE:1, Unit:0, Cold:0, Colt:0, $
		NMAX:0.0, NMIN:0.0, Wini:0, Winv:0}

ID_ANIM = {id_anim, INFO:0L, HDEB:0L, HFIN:0L, DELTA:0L, PAUSE:0L, $
		NPT:0L, Polar:0L, Text:0L, Cmin:0L, Cmax:0L}

if N_ELEMENTS(Group) Eq 0 THEN GROUP=0

BASE = WIDGET_BASE( GROUP_LEADER= group, TITLE = ' NRH ANIMATE', COLUMN=1)

	PHYSPAR = ['','']& LFREQ = ''
; selection d'un fichier Nrh 
	IF str_fic.file EQ ' ' OR strlen(str_fic.file) EQ '' $
        OR str_inf2d.nim eq 1 THEN $   ; fichier png ou jpg (06/11/2008)
		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

		IF Physpar[1] NE '' THEN Physpar[1]='Stokes I&V' 
		Str_anim.stk = 0
		Hdeb = Str_inf2d.Hd 
		str_anim.hdeb= str_inf2d.hd
		str_anim.npt = str_inf2d.nim


BASE1= WIDGET_BASE(Base,/column,/frame,/align_center)
         l=widget_label(base1,value='PARAMETERS',/align_center)
	 id_anim.hdeb = cw_field(base1, value= str_anim.hdeb, $
			Uvalue= 'Hdeb',/string, $
		        Title='SELECT Time:',/ALL_events, Xsize=20)
			STR_ANIM.IND=0
			STR_ANIM.DELTA=1


	Base11=WIDGET_BASE(base1,Column=2,/align_center)
	 id_anim.polar = WIDGET_DROPLIST(base11, $
			value = Physpar, Uvalue = 'Stokes')
	 id_anim.delta = cw_field(base11, value= str_anim.delta, $
		Uvalue= 'Delta',/floating, $
		    Title='Increment: ',/ALL_events, Xsize=3)
	 id_anim.npt =cw_field(base11, value=string(str_anim.npt), $
			UVALUE= 'Npt',/integer, $
		        Title='Images:',/ALL_events, Xsize=5)
			Norm=['By image','Constant']
	 b = WIDGET_DROPLIST(base11, $
			value = Norm, Uvalue = 'Normal',Title='Level')
	Id_anim.cmax= CW_FIELD(Base11, Value=0.0,Uvalue='Cmax',$
		/Floating, Title='Max=',/All_events,Xsize=12)
	Id_anim.cmin= CW_FIELD(Base11, Value=0.0,Uvalue='Cmin',$
		/Floating, Title='Min=',/All_events,Xsize=12)

         b= widget_button( base1,Uvalue = 'Region', value= 'Select REGION')
         b = widget_button( base1,Uvalue = 'Reset',   value= 'RESET Param')
	 b = widget_button( base1,Uvalue = 'Fichiers',value='Select FILE')

	Id_anim.Info = Cw_infonrh(Base, Str_inf2d)

base2 = widget_base(base, /column,/frame,/align_center,$
			  title= 'FUNCTIONS', Xsize=200)
        l= widget_label(base2, value= 'FONCTIONS: ', /align_center)
        b = widget_button( base2,Uvalue = 'Start', value= 'START')
        b = widget_button( base2,Uvalue = 'Continue', value= 'CONTINUE')
        b = widget_button( base2,Uvalue = 'Pause', value= 'PAUSE')
        b = widget_button( base2,Uvalue = '+',   value= ' -> ')
        b = widget_button( base2,Uvalue = '-',   value= ' <- ')
        b = widget_button( base2,Uvalue = 'Plus',   value= ' + 1 ')
        b = widget_button( base2,Uvalue = 'Moins',   value= ' - 1 ')

	b = widget_button( base,Uvalue = 'Couleurs',value='Colors')
	b = widget_button( base,Uvalue = 'Exit',value='Return')
	Id_anim.Text = WIDGET_TEXT(base,Value='',/align_center)

str_anim.pause=1
SET_PLOT, GETENV('NRH_DEV')
widget_control, base,/Realize
			window,/free,xsize=256,ysize=256,XPOS=300, YPOS=500
			Str_anim.wini= !D.window
Xmanager, 'NRH_ANIM', base, /NO_BLOCK


end
