	pro filesetting_event,ev

common filesetting_Exch,Data

WIDGET_CONTROL,ev.id,GET_UVALUE = wuv

if wuv eq "INTEGRATED" then begin Data.summa=1  & wuv="MULTI" & end
if wuv eq "MAXIMUM" then begin Data.summa=0  & wuv="MULTI" & end

CASE wuv OF

"DONE":		begin

	WIDGET_CONTROL,ev.top,/DEST

	if Data.g_leader ne 0L then if WIDGET_INFO(Data.g_leader,/valid) $
	then WIDGET_CONTROL,Data.g_leader,/show

		end

"Iew":	Data.Stokes_in(0)=ev.select

"Vew":	Data.Stokes_in(1)=ev.select

"Isn":	Data.Stokes_in(2)=ev.select

"Vsn":	Data.Stokes_in(3)=ev.select

'Limit_input':	begin

widget_control,Data.Limit_input,get_val=tmp
Data.Number=fix(tmp(0)) > 1

widget_control,Data.Limit_input,set_val=strtrim(Data.Number,2)

if Data.Nolimit ne 1 then Data.edges(1-Data.Last)=	$
	Data.edges(1-Data.Last)			<	$
	(Data.Edges(Data.Last)+Data.Number-1)	> 	$
	(Data.Edges(Data.Last)-Data.Number+1)


	WIDGET_CONTROL,Data.slider0,set_val=Data.edges(0)
	WIDGET_CONTROL,Data.slider1,set_val=Data.edges(1)


	WIDGET_CONTROL,Data.Txt1,set_val=Time_Outvalue(Data.edges(0),$
		time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.First_Block,	$
set_val=strtrim(Data.edges(0)/Data.N_scans,2)
	WIDGET_CONTROL,Data.First_Record,	$
set_val=strtrim(Data.edges(0) mod Data.N_scans,2)


	WIDGET_CONTROL,Data.Txt2,set_val=Time_Outvalue(Data.edges(1),$
time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.Last_Block,		$
set_val=strtrim(Data.edges(1)/Data.N_scans,2)
	WIDGET_CONTROL,Data.Last_Record,	$
set_val=strtrim(Data.edges(1) mod Data.N_scans,2)


	WIDGET_CONTROL,Data.Label,		$
set_val=strtrim(abs(Data.edges(1)-Data.edges(0))+1,2)

		end


"Limit":	begin
Data.Nolimit=1-ev.select

if Data.Nolimit ne 1 then Data.edges(1-Data.Last)=	$
	Data.edges(1-Data.Last)			<	$
	(Data.Edges(Data.Last)+Data.Number-1)	> 	$
	(Data.Edges(Data.Last)-Data.Number+1)

	WIDGET_CONTROL,Data.slider0,set_val=Data.edges(0)
	WIDGET_CONTROL,Data.slider1,set_val=Data.edges(1)

	WIDGET_CONTROL,Data.Txt1,set_val=Time_Outvalue(Data.edges(0),$
		time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.First_Block,	$
set_val=strtrim(Data.edges(0)/Data.N_scans,2)
	WIDGET_CONTROL,Data.First_Record,	$
set_val=strtrim(Data.edges(0) mod Data.N_scans,2)


	WIDGET_CONTROL,Data.Txt2,set_val=Time_Outvalue(Data.edges(1),$
time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.Last_Block,		$
set_val=strtrim(Data.edges(1)/Data.N_scans,2)
	WIDGET_CONTROL,Data.Last_Record,	$
set_val=strtrim(Data.edges(1) mod Data.N_scans,2)


	WIDGET_CONTROL,Data.Label,		$
set_val=strtrim(abs(Data.edges(1)-Data.edges(0))+1,2)


		end


"NATURAL":	begin
	Data.mul=1	&	Data.summa=0
WIDGET_CONTROL,Data.base2,map=0
WIDGET_CONTROL,Data.slider2,SET_VAL=1
		end

"MULTI":	begin
WIDGET_CONTROL,Data.base2,map=1
WIDGET_CONTROL,Data.slider2,GET_VAL=mul
Data.mul=mul
		end

"HELP":		begin
WIDGET_CONTROL,/hourglass


	CASE !version.os OF

'windows':	delim='\'

'Win32':	delim='\'

ELSE:		delim='/'

	ENDCASE


xtext,file=getenv('help_dir')+Delim+'filesett.hlp',group=ev.top
		end


"START":	begin

	Data.Last=0

	Data.edges(0)=ev.value

if Data.Nolimit ne 1 then Data.edges(1)=	$
	Data.edges(1) < (Data.Edges(0)+Data.Number-1) > (Data.Edges(0)-Data.Number+1)

	WIDGET_CONTROL,Data.slider1,set_val=Data.edges(1)


	WIDGET_CONTROL,Data.Txt1,set_val=Time_Outvalue(Data.edges(0),$
		time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.First_Block,	$
set_val=strtrim(Data.edges(0)/Data.N_scans,2)
	WIDGET_CONTROL,Data.First_Record,	$
set_val=strtrim(Data.edges(0) mod Data.N_scans,2)


	WIDGET_CONTROL,Data.Txt2,set_val=Time_Outvalue(Data.edges(1),$
time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.Last_Block,		$
set_val=strtrim(Data.edges(1)/Data.N_scans,2)
	WIDGET_CONTROL,Data.Last_Record,	$
set_val=strtrim(Data.edges(1) mod Data.N_scans,2)


	WIDGET_CONTROL,Data.Label,		$
set_val=strtrim(abs(Data.edges(1)-Data.edges(0))+1,2)
		end

"STOP":		begin

	Data.Last=1

	Data.edges(1)=ev.value

if Data.Nolimit ne 1 then Data.edges(0)=	$
	Data.edges(0) < (Data.Edges(1)+Data.Number-1) > (Data.Edges(1)-Data.Number+1)

	WIDGET_CONTROL,Data.slider0,set_val=Data.edges(0)


	WIDGET_CONTROL,Data.Txt2,set_val=Time_Outvalue(Data.edges(1),$
time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.Last_Block,		$
set_val=strtrim(Data.edges(1)/Data.N_scans,2)
	WIDGET_CONTROL,Data.Last_Record,	$
set_val=strtrim(Data.edges(1) mod Data.N_scans,2)
	WIDGET_CONTROL,Data.Label,		$
set_val=strtrim(abs(Data.edges(1)-Data.edges(0))+1,2)


	WIDGET_CONTROL,Data.Txt1,set_val=Time_Outvalue(Data.edges(0),$
		time=Data.time, Dt=Data.Dt, space=46)
	WIDGET_CONTROL,Data.First_Block,	$
set_val=strtrim(Data.edges(0)/Data.N_scans,2)
	WIDGET_CONTROL,Data.First_Record,	$
set_val=strtrim(Data.edges(0) mod Data.N_scans,2)
	WIDGET_CONTROL,Data.Label,		$
set_val=strtrim(abs(Data.edges(1)-Data.edges(0))+1,2)


		end

"Open":		Data.New_file=1

"Cancel":	Data.Canc=1

ELSE:
ENDCASE

if (wuv eq "Cancel") or (wuv eq "Open") then $
	WIDGET_CONTROL,ev.top,/DEST

empty

		end


pro filesetting, Filename=Filename, bounds=bounds,pathes=pathes,$
	group_leader=group_leader, current_file=current_file,$
	Fileformat=Fileformat,multi=multi,sum=sum,Cancel=Cancel, $
	Stokes=Stokes,number=number,nolimit=nolimit,limit=limit

;	Selects bounds of an array to be read from the SSRT data file.


common filesetting_Exch,Data

if n_elements(limit) le 0 then limit=200

Data={base2:0L, slider0:0L, slider1:0L, slider2:0L, Txt1:0L, Txt2:0L, Fname:'', $
	edges:[0L,1000L-1], Length:0L, time:[0d,0d], mul:1, summa:1,	$
	New_file:0, Canc:0, Stokes_in:[1,1,1,1], Dt:0d, $
	First_Block:0L, Last_Block:0L, First_Record:0L, Last_Record:0L,	$
	N_scans:0L, g_leader:0L, Label:0L, nolimit:keyword_set(nolimit),	$
	Number:Limit, Limit_input:0L, Last:0}


if xregistered('filesetting') then return
if n_elements(Length) le 0 then Length=0L

device,get_scr=scr

if n_elements(Filename) gt 0 then if Filename ne '' then pathes=subdir(Filename)
if n_elements(pathes) le 0 then pathes=''

if n_elements(group_leader) le 0 then group_leader = 0L
Data.g_leader=group_leader

	if keyword_set(current_file) then begin
Data.FName=Filename
goto, old
	endif
ret:
		i=0
		REPEAT BEGIN
		Data.FName=pickfile(/read,path=pathes(i),file=Filename)
		i=i+1
		ENDREP UNTIL Data.FName ne '' or i ge n_elements(pathes)

		if Data.FName eq '' then begin
		Data.mul=1	&	Data.summa=1
		Data.Canc=1
		print,'You have selected no file'
		goto,exit1
		endif

old:
Data.time=[0D,0D]
Data.mul=1		&	Data.summa=0

	WIDGET_CONTROL,/hour
openr,lun,Data.Fname,/get_lun
Name=(name_lun(lun))(0)
Descr_File=Fstat(lun)
Block=ssrt_file_struc(lun, Fileformat=Fileformat, $
  Offset=Offset, Blocklength=Blocklength, Length=Length, $
	Num_blocks=Num_blocks, Dt=Dt)

Data.Length=Length	&	Data.Dt=Dt

Data.N_scans=1L*(Fileformat(0) eq 'fdas')+32L*(Fileformat(0) eq 'aor')

	IF Fileformat(1) ne 'clm' then begin
Data.time(0)=read_time(Lun, Blocknumber=0)
Data.time(1)=read_time(Lun, Blocknumber=Num_blocks-1)+(Data.N_scans-1)*Data.Dt
	ENDIF

free_lun,lun

Data.edges=[0L,Data.Length-1]
		IF Fileformat(1) ne 'clm' THEN BEGIN
   if keyword_set(current_file) then if n_elements(bounds) eq 2 $
	then Data.edges=bounds
		ENDIF ELSE BEGIN
edges=[0L,0L]	&	goto,exit
		ENDELSE

main= widget_base(tit='File: '+Name,/colu, XOFF=0, ypad=10,space=10)

Menu_base= widget_base(/row,main)

 XPdMenu, ['"DONE"				DONE',	$

	   '"FILE"	{',				$
			'"Open"      Open',	$
			'"Cancel"	Cancel',	$
				'}',			$
	   '"MODE"	{',				$
			'"NATURAL"      NATURAL',	$
			'"INTEGRATED"	INTEGRATED',	$
			'"MAXIMUM"   	MAXIMUM',	$
				'}',			$

	   '"HELP"				HELP'], $
		 Menu_base

Limit_base=widget_base(Menu_base,/row,/frame)

Nonexcl_Base= widget_base(Limit_base,/row,/nonexcl)

Button=widget_button(Nonexcl_Base,val='Limitation',uval='Limit')

	WIDGET_CONTROL,Button,set_but=1-Data.nolimit

Data.Limit_input=widget_text(Limit_base,/edit,xsiz=10,uval='Limit_input')

	WIDGET_CONTROL,Data.Limit_input,set_val=strtrim(Data.Number,2)

Label=widget_label(Limit_base,val='scans ')



Upper_Base=widget_base(main,/row)

base1= widget_base(Upper_Base,/row,/nonexcl,/fra)

But_Stokes=lonarr(4)
val=['Iew','Vew','Isn','Vsn']

	for j=0,3 do begin
But_Stokes(j)=WIDGET_BUTTON(base1,uval=val(j),val=val(j)+'   ')
WIDGET_CONTROL,But_Stokes(j),/set_but
	endfor


Flag=equiv(Fileformat,['aor','1']) or equiv(Fileformat,['aor','cor0']) or $
	equiv(Fileformat,['aor','cor1'])

	FOR j=2,3 DO BEGIN
		if not (Flag) then begin
WIDGET_CONTROL,But_Stokes(j),set_but=0
WIDGET_CONTROL,But_Stokes(j),sens=0
Data.Stokes_in(j)=0
		endif
	ENDFOR

junk=WIDGET_LABEL(Upper_Base,val='       Total: ')

Number_of_Blocks=WIDGET_LABEL(Upper_Base,	$
	val=strtrim(Data.Length/Data.N_scans,2)+$
	' Blocks,   '+strtrim(Data.Length,2)+' Scans.')

EmptyString='                  '

gap=WIDGET_LABEL(Upper_Base,val=EmptyString)
junk=WIDGET_LABEL(Upper_Base,val='Scans selected : ')
Data.Label=WIDGET_LABEL(Upper_Base,val=		$
''+strtrim(abs(Data.edges(1)-Data.edges(0))+1,2)+'    ')


Data.slider0=WIDGET_SLIDER(main, MIN=0, MAX=Data.Length-1, $
	TIT='First  record', /FRA, $
	UVAL= 'START', VAL=Data.edges(0),/drag)

Slider_Base_0=WIDGET_BASE(main,/row)

Data.Txt1 = WIDGET_LABEL(Slider_Base_0, val=	$
Time_Outvalue(Data.edges(0), time=Data.time, Dt=Data.Dt, space=46)+EmptyString)

Info1 = WIDGET_LABEL(Slider_Base_0, val='First block:     ')

Data.First_Block = WIDGET_LABEL(Slider_Base_0, $
	val='    '+strtrim(Data.edges(0)/Data.N_scans,2)+'    ')

Info11 = WIDGET_LABEL(Slider_Base_0, val='Record:     ')

Data.First_Record = WIDGET_LABEL(Slider_Base_0, $
	val='  '+strtrim(Data.edges(0) mod Data.N_scans,2)+'  ')

Data.slider1=WIDGET_SLIDER(main, MIN=0, MAX=Data.Length-1,  $
	TIT='Last  record', /FRAME, $
	UVAL= 'STOP', VAL=Data.edges(1),/drag)

Slider_Base_1=WIDGET_BASE(main,/row)

Data.Txt2 = WIDGET_LABEL(Slider_Base_1,	val=	$
Time_Outvalue(Data.edges(1), time=Data.time, Dt=Data.Dt, space=46)+EmptyString)

Info2 = WIDGET_LABEL(Slider_Base_1, $
	val='Last block:     ')

Data.Last_Block = WIDGET_LABEL(Slider_Base_1, $
	val='    '+strtrim(Data.edges(1)/Data.N_scans,2)+'    ')

Info21 = WIDGET_LABEL(Slider_Base_1, val='Record:     ')

Data.Last_Record = WIDGET_LABEL(Slider_Base_1, $
	val='  '+strtrim(Data.edges(1) mod Data.N_scans,2)+'  ')


Data.base2= widget_base(main,/colu,/fra,xsi=scr(0)*0.96)


Data.slider2 = WIDGET_SLIDER(Data.base2, MIN=1, MAX=32, $
	TIT='Number of scans', val=Data.mul, UVAL= 'MULTI',/drag)


WIDGET_CONTROL,Data.base2,map=0

WIDGET_CONTROL,main,/real

xmanager,'filesetting',main,/modal,group=group_leader

	if Data.New_file eq 1 then begin
Data.Stokes_in=[1,1,1,1]
current_file=(Data.New_file=0)
goto, ret
	endif

exit:
bounds=Data.edges(sort(Data.edges))

if Data.Nolimit ne 1 then bounds(1) = bounds(1) < (bounds(0)+Data.Number-1)

Stokes=Data.Stokes_in

if Data.Canc eq 1 then current_file=(Data.New_file=0)

exit1:
multi=Data.mul	&	sum=Data.summa   &   Filename=Data.Fname
Cancel=Data.Canc
number=Data.Length

Data=0
end