;------------------------------------------------------------------------------;
PRO diva_ev, event
;------------------------------------------------------------------------------;
; Purpose - 
;------------------------------------------------------------------------------;
WIDGET_CONTROL, event.id, GET_UVALUE = eventval
widget_control,event.top,get_uvalue=info,/no_copy
;thisevent = tag_names(event,/str) & print,thisevent

;tlb_info_auto_text  	= (*(*info).pdiva_draw).tlb_info_auto_text
diva_autoscale      	= (*(*info).pdiva_draw).diva_autoscale
diva_zoom_info	    	= (*(*info).pdiva_draw).diva_zoom_info
diva_line_info	    	= (*(*info).pdiva_draw).diva_line_info
diva_tlb_drawwid    	= (*(*info).pdiva_draw).diva_tlb_drawwid
diva_draw_base	    	= (*(*info).pdiva_draw).diva_draw_base
diva_fit_size	    	= (*(*info).pdiva_draw).diva_fit_size
tlb_prev_drawwid    	= (*(*info).pdiva_draw).tlb_prev_drawwid
tlb_prev_pixid	    	= (*(*info).pdiva_draw).tlb_prev_pixid

IF (TAG_NAMES(event, /STRUCTURE_NAME) EQ 'WIDGET_TIMER') THEN BEGIN
    if ((*info).diva_adapt_mode_on eq 1) then begin
    	if ((*info).diva_time_events_on eq 1) then begin
    	    
	    widget_control,(*info).diva_ad_buttons[0],TIMER=	    	    $
	    	    	    	    	    	    (*info).tlb_ad_timer[0]
	    
	    timer = (*info).tlb_ad_timer[1]
    	    CASE timer OF
    	    	0:  BEGIN
		    	(*info).tlb_ad_timer[1] = 1
			widget_control,(*info).tlb_adapt_animate,   	    $
			    set_value=''
		    END
    	    	1:  BEGIN
		    	(*info).tlb_ad_timer[1] = 2
			widget_control,(*info).tlb_adapt_animate,   	    $
			    set_value='*'
		    END
    	    	2:  BEGIN
		    	(*info).tlb_ad_timer[1] = 3
			widget_control,(*info).tlb_adapt_animate,   	    $
			    set_value=''
		    END
    	    	3:  BEGIN
		    	(*info).tlb_ad_timer[1] = 0
			widget_control,(*info).tlb_adapt_animate,   	    $
			    set_value='*'
		    END
    	    ENDCASE
	    
	    number_images = (*info).number_images
	    
	    n_dummy=''
	    openr,1,(*info).diva_ad_pick_file[0]
	    WHILE (NOT EOF(1)) DO BEGIN
	    	line=''
	    	readf,1,format='(%"%s")',line
	    	n_dummy=[n_dummy,line]
	    ENDWHILE
	    close,1

	    n_dummy=n_dummy(1:*)
	    new_number_images=n_elements(n_dummy)
	    n = new_number_images-number_images
	    ;the condition that a new image has been detected
	    if (number_images ne new_number_images) then begin
		print,'*********************************************'
	    	print,'number of new images detected = ' +	    	    $
		    	strcompress(n,/rem)
		print,'*********************************************'
		
		(*info).number_images =    new_number_images
		mfile_pos_from  =   strarr(new_number_images)
		mfile_pos_to	=   strarr(new_number_images)
		mfile_name	=   strarr(new_number_images)
		mfile_name_str  =   strarr(new_number_images)
		mfile_date	=   strarr(new_number_images)
		mfile_time	=   strarr(new_number_images)
		
		for i=0,n_elements(n_dummy)-1 do begin
    	    	    n_dummy[i]=strcompress(n_dummy[i],/remove)

    		    mfile_pos_from[i] = strmid(n_dummy[i],0,11)
    		    mfile_pos_to[i]   = strmid(n_dummy[i],11,11)
    		    mfile_time[i]     = strmid(n_dummy[i],7,/reverse_offset)
    		    mfile_date[i]     = strmid(n_dummy[i],15,8,/reverse_offset)
		    mfile_name[i]     = strmid(n_dummy[i],22)
    		    mfile_name[i]     = strmid(mfile_name[i],0, 	    $
		    	    	        	  strlen(mfile_name[i])-16)
		    mfile_name_str[i] = strmid(mfile_name[i],0, 	    $
	    	    	    	      strpos(mfile_name[i],'.',/reverse_search))
		endfor
		
		for i=0,n_elements(n_dummy)-1 do    	    	    	    $
            	    (*info).diva_ad_new_list[i]      =  mfile_time[i] +     $
		    	    	'  ' + mfile_date[i] + '  ' + mfile_name[i]
		
		pick_log    =	(*info).diva_ad_pick_file[0]
		pick_data   =	(*info).diva_ad_pick_file[1]
		
		;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		;OK, let's create a 'diva_mult_image' structure for each new
		;image found. Then we'll append that onto our original
		diva_file   =	{diva_file}
		f   	    = 	pick_data
		diva_file_init,diva_file,f
		
		diva_mult_image     = replicate({diva_mult_image},n)
		tmp_diva_mult_image = diva_mult_image
		
		FOR i=0,n - 1 DO BEGIN
		    diva_mult_image_init,tmp_diva_mult_image,	    	    $
		    	    	mfile_pos_from[i+number_images],    	    $
				mfile_pos_to[i+number_images],	    	    $
				mfile_name[i+number_images], 	    	    $
				mfile_date[i+number_images],	    	    $
				mfile_time[i+number_images]
		    
		    tmp_diva_mult_image[i].file_info = diva_file[0]
		    diva_mult_image[i] =  tmp_diva_mult_image[i]
		ENDFOR
		
		;OK, now let's append the new array image structures to the
	    	;existing array
		old_diva_mult_image = (*(*info).diva_mult_image)
		new_diva_mult_image = diva_mult_image
		;append here  
    	    	diva_mult_image = [old_diva_mult_image,new_diva_mult_image]
	    	;update here
		(*(*info).diva_mult_image) = diva_mult_image
		
		d = (*info).diva_ad_new_list
		widget_control,(*info).tlb_adapt_list,set_value=d(where(d ne ''))
		
		;make sure selected image entry remains highlighted
		widget_control,(*info).tlb_adapt_list,set_list_select =     $
		    	    	    	    	(*info).diva_ad_list_index
		
		;AUTO-LOAD stuff here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		diva_ad_autoload_on = (*info).diva_ad_autoload_on
		
		if (diva_ad_autoload_on eq 1) then begin
		    index = new_number_images-1
		    widget_control,(*info).tlb_adapt_list,set_list_select = $
		    	    	    	    	    	    	    index
		    
		    mult = (*(*info).diva_mult_image)[index]
		    temp = (*info).diva_current_prev_image
		    
		    ;call 'diva_ad_read_data....'
		    diva_ad_read_data,pick_data,temp,mult
		    temp.diva_n_images  = n_elements((*(*info).diva_mult_image))
		    temp.ops_bshift 	= [1,0]
		    ;... and update structure with new values
    	    	    (*info).diva_current_prev_image = temp
		    ;OK: update 'diva_current_image' structure
		    (*(*info).pdiva_draw).diva_current_image = temp
		    
		    widget_control,tlb_prev_drawwid,get_value = prev_drawwid
		    
		    ;call 'diva_draw_prev' procedure to display preview image
		    diva_draw_prev,prev_drawwid,tlb_prev_pixid,temp.n_dim,  $
		    					    temp.p_pimage
		    
		    ;update file size and dimensions info (label) widgets
		    tmp = {t:[      strcompress(temp.mfile_name,/rem),	    $
		    		    strcompress(temp.i_file_size,/rem),	    $
		    		    strcompress(temp.xsize,/rem),  	    $
		    		    strcompress(temp.ysize,/rem),  	    $
		    		    strcompress(temp.n_dim,/rem)],s:[1,1,1]}

		    ;call 'diva_report_prev_info' to update info labels
		    diva_report_prev_info,(*info).prev_info,		    $
		    				(*info).prev_buttons,tmp
		    
		    mfs = strcompress(temp.mfile_size,/remove)
		    nni = strcompress(new_number_images,/remove)
		    widget_control,(*info).tlb_adapt_info_label,set_value = $
		    	    '[Bytes: '+ mfs +']'+ '  [num images: ' + nni+']'
		    
		    ;call 'diva_draw_create' to kill and recreate tlb draw area
		    diva_draw_create,(*info).pdiva_draw
		    ;... then display image
		    diva_draw_image, (*info).pdiva_draw
		    ;....and finally update tlb title
		    diva_tlb_title,  (*info).pdiva_draw
		    
		    widget_control,(*info).diva_file_buttids[0],sensitive=1
		    widget_control,(*info).diva_menus[0],sensitive=1
		    widget_control,(*info).diva_menus[1],sensitive=1
		    widget_control,(*info).diva_menus[2],sensitive=1
		    widget_control,(*info).diva_menus[3],sensitive=1
		    widget_control,(*info).prev_buttons[0],sensitive=0
		    
		endif  ;of condition diva_ad_autoload is TRUE 
	    endif  ;of condition that a new image has been detected
    	end  ;of condition are_time_evs_on = 1 (ie TRUE)
    end  ;of condition adaptive mode is ON

ENDIF ELSE BEGIN  ;of condition event.tag=widget_timer

CASE eventval OF
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_EXIT":	$   ;DIVA_EXIT_DIVA_EXIT_DIVA_EXIT_DIVA_EXIT_DIVA_EXIT_DIVA
BEGIN
    Ptr_Free,(*info).diva_file_info
    Ptr_Free,(*info).diva_mult_image
    Ptr_Free,(*(*info).pdiva_draw).diva_current_image.pimage
    Ptr_Free,(*(*info).pdiva_draw).diva_current_image.o_pimage
    Ptr_Free,(*(*info).pdiva_draw).diva_current_image.p_pimage
    
    Ptr_free,(*info).diva_current_prev_image.pimage
    Ptr_free,(*info).diva_current_prev_image.o_pimage
    Ptr_free,(*info).diva_current_prev_image.p_pimage
    
    if (Ptr_Valid((*(*info).pdiva_draw).diva_image_ops) eq 1) then BEGIN
    	how_many = n_elements((*(*(*info).pdiva_draw).diva_image_ops))
	for i=0,how_many -1 do begin
	    Ptr_free,(*(*(*info).pdiva_draw).diva_image_ops)[i].pimage
	    Ptr_free,(*(*(*info).pdiva_draw).diva_image_ops)[i].o_pimage
	    Ptr_free,(*(*(*info).pdiva_draw).diva_image_ops)[i].p_pimage
	ENDFOR
    	Ptr_FRee,(*(*info).pdiva_draw).diva_image_ops
    END
    
    if (Ptr_Valid((*(*info).pdiva_draw).diva_image_conc) eq 1) then BEGIN
    	how_many = n_elements((*(*(*info).pdiva_draw).diva_image_conc))
	for i=0,how_many -1 do begin
	    Ptr_free,(*(*(*info).pdiva_draw).diva_image_conc)[i].pimage
	    Ptr_free,(*(*(*info).pdiva_draw).diva_image_conc)[i].o_pimage
	    Ptr_free,(*(*(*info).pdiva_draw).diva_image_conc)[i].p_pimage
	ENDFOR
    	Ptr_FRee,(*(*info).pdiva_draw).diva_image_conc
    END
    
    Ptr_Free,(*info).pdiva_draw
    Ptr_Free,info
    
    WIDGET_CONTROL, event.top, /DESTROY
    return
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_OPEN":	$   ;DIVA_OPEN_DIVA_OPEN_DIVA_OPEN_DIVA_OPEN_DIVA_OPEN_DIVA
BEGIN
    ;**************************************************************************
    ;**************************************************************************
    ;if previously in adaptive mode, then free up pointers....
    if ((*info).diva_adapt_mode_on eq 1) then begin
	stop
	(*info).diva_ad_new_list = strarr(100)
    end
    (*info).diva_adapt_mode_on  = 0
    (*info).diva_time_events_on = 0
    ;....and reset to 'preview mode'
    widget_control,(*info).tlb_prev_label,set_value =       	    	    $
			    '******   PREVIEW  MODE   ******'
    widget_control,(*info).prev_buttons[2],set_value = 'Remove entry'
    widget_control,(*info).tlb_prev_selected_label_id,set_value = 'none'
    ;**************************************************************************
    ;**************************************************************************
		    
    diva_file,(*info).os_name,(*info).def_path,(*info).def_file,f
    if (f[0] ne '') then begin
	widget_control,(*info).tlb_rhs_base,sensitive=1
	widget_control,(*info).tlb_prev_list,sensitive=1
	widget_control,(*info).tlb_prev_list_sin_base,map=1
	widget_control,(*info).tlb_prev_list_mul_base,map=0
	widget_control,(*info).tlb_prev_list_mul,sensitive=0
	widget_control,(*info).tlb_adapt_list_base,map=0

	wset,tlb_prev_pixid & erase
	widget_control,tlb_prev_drawwid,get_value = prev_drawwid
	wset,prev_drawwid & erase
	

	tmp = {t:['none','0','0','0','0'],s:[0,0,0]}
	;call 'diva_report_prev_info' to update info labels
	diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp

    	;define and initialise 'diva_file_info' structure
	diva_file_info = REPLICATE({diva_file},N_ELEMENTS(f))

	tmp_diva_file_info = {diva_file}
	for i=0,N_ELEMENTS(f)-1 do begin
	    diva_file_init, tmp_diva_file_info, f[i]
	    diva_file_info[i]=tmp_diva_file_info
	endfor

	if (ptr_valid((*info).diva_file_info) eq 0) then BEGIN
	    (*info).diva_file_info = PTR_NEW(diva_file_info)
	endIF ELSE BEGIN
	    (*(*info).diva_file_info) =  [(*(*info).diva_file_info), 	    $
			    	    	    	    	    diva_file_info]
	ENDELSE

	widget_control,(*info).tlb_prev_list,set_value	=     	    	    $
		    	    	    (*(*info).diva_file_info)[*].filename
    end;of condition (f[0] ne '')
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_EXPT":    BEGIN
    	    	    print,'...... under construction..........'
;		    curr = (*(*info).pdiva_draw).diva_current_image
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_HELP":    xdisplayfile,'diva_help.txt',width=60,	    	    	    $
		    	    	    	done_button='Quit',group=(*info).tlb
"DIVA_VERS":    diva_vers,GROUP = (*info).tlb
"DIVA_ABOUT":   diva_about,GROUP = (*info).tlb
"PREV_BACK":	BEGIN
		    (*info).diva_adapt_mode_on = 0
		    widget_control,(*info).prev_buttons[2], 	    	    $
			    	    	    set_value = 'Remove entry'
		    
		    tmp = {t:['none','0','0','0','0'],s:[0,0,1]}
		    ;call 'diva_report_prev_info' to update info labels
		    diva_report_prev_info,(*info).prev_info,    	    $
			    	    	    	(*info).prev_buttons,tmp
    	    	    
		    wset,tlb_prev_pixid & erase
		    widget_control,tlb_prev_drawwid,get_value = prev_drawwid
		    wset,prev_drawwid	&   erase
		    
		    widget_control,(*info).tlb_prev_list  ,sensitive=1
		    widget_control,(*info).tlb_prev_list_sin_base,map=1
    	    	    widget_control,(*info).tlb_prev_list_mul_base,map=0
		    widget_control,(*info).tlb_viewlog_butt,sensitive = 0
		    ;if its there....kill widget table
		    IF(XRegistered("diva_fit_header") eq 1) THEN BEGIN
			widget_control,(*info).diva_display_logbase,/destroy
		    end
		    
		    ;widget_control,(*info).diva_tool_buttids[4],sensitive=0
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"PREV_VLOG":	$   ;PREV_VLOG_PREV_VLOG_PREV_VLOG_PREV_VLOG_PREV_VLOG_PREV
BEGIN
    
    f   	= (*info).diva_current_prev_image.file_info.f
    ext 	= (*info).diva_current_prev_image.file_info.file_ext
    ext 	= STRLOWCASE(ext)

    IF(XRegistered("diva_fit_header") eq 1) THEN BEGIN
	widget_control,(*info).diva_display_logbase,/destroy
    end

    ;FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FI
    if (ext eq 'fit') OR (ext eq 'fits') THEN BEGIN

	index = (*info).diva_prev_mult_index
    	
	header = headfits(f,ext=index)
	diva_fit_header,f,header,base_id,GROUP = (*info).tlb

    ENDIF ;condition data format is FITS

    ;IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG
    if (ext eq 'dat') OR (ext eq 'raw') OR (ext eq 'img') THEN BEGIN

	lf  	= strmid(f,0,strpos(f,'.'))+'.txt'
	temp 	= (*(*info).diva_mult_image)
    	n_elems = n_elements(temp)
	
	diva_logfile_simple_read,lf,str_array
	
	diva_fit_header,lf,str_array,base_id,GROUP = (*info).tlb
	
    ENDIF ;condition data format is IMG

    ;update structure
    (*info).diva_display_logbase = base_id
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_MULT":	$   ;DIVA_MULT_DIVA_MULT_DIVA_MULT_DIVA_MULT_DIVA_MULT_DIVA
BEGIN
    (*info).diva_prev_mult_index = event.index

    temp = (*(*info).diva_mult_image)[event.index]
    widget_control,/hourglass

    tempii = (*info).diva_current_prev_image

    tempii.mfile_pos_from   = temp.mfile_pos_from
    tempii.mfile_pos_to     = temp.mfile_pos_to
    tempii.mfile_name	    = temp.mfile_name
    tempii.mfile_name_str   = temp.mfile_name_str
    tempii.mfile_time	    = temp.mfile_time
    tempii.mfile_date	    = temp.mfile_date
    tempii.mfile_size	    = temp.mfile_pos_to-temp.mfile_pos_from + 1 - 8

    PTR_FREE,tempii.pimage
    PTR_FREE,tempii.o_pimage
    PTR_FREE,tempii.p_pimage
    
    file_ext = tempii.file_info.file_ext
    ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ;split into 2 sections here, depending on whether file is IMG or FITS
    ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ;IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG
    IF  (file_ext eq 'img') OR (file_ext eq 'dat') OR (file_ext eq 'raw')   $
    THEN BEGIN

    	;call procedure to read multiple image
    	diva_image_file_read_multiple,tempii

    END;of condition data file extension is img, dat or raw
    ;IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG
    ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ;FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS
    IF (file_ext eq 'fit') OR (file_ext eq 'fits') THEN BEGIN
    	
	;call procedure to read multiple image
	diva_read_data_fit,tempii,event.index

    	IF(XRegistered("diva_fit_header") eq 1) THEN BEGIN
	    widget_control,(*info).diva_display_logbase,/destroy
    	end
	
    END;of condition data file extension is fit or fits
    ;FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS
    
    ;update 'diva_current_prev_image' structure
    (*info).diva_current_prev_image = tempii

    tmp = {t:['__'+ strcompress(tempii.mfile_name,/rem),     	    $
		    strcompress(tempii.mfile_size,/rem),     	    $
		    strcompress(tempii.xsize,/rem),  	    	    $
		    strcompress(tempii.ysize,/rem),  	    	    $
		    strcompress(tempii.n_dim,/rem)],s:[1,1,1]}
    
    
    ;call 'diva_report_prev_info' to update info labels
    diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp
    ;set diva_preview draw widget as current
    widget_control,tlb_prev_drawwid,get_value = prev_drawwid
    
    ;call 'diva_draw_prev' procedure to display preview image
    diva_draw_prev,prev_drawwid,tlb_prev_pixid,tempii.n_dim,  $
    					    tempii.p_pimage
    
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_PREV":	$   ;DIVA_PREV_DIVA_PREV_DIVA_PREV_DIVA_PREV_DIVA_PREV_DIVA
BEGIN
    widget_control,/hourglass
    (*info).diva_prev_index=event.index;update index
    ;update selected file widget_label		
    f = (*(*info).diva_file_info)[event.index].f
    widget_control,(*info).tlb_prev_selected_label_id,	$
		    set_value = strcompress(f,/remove)
    ;this is where the file is read and is sorted into 
    ;single/multiple files
    file_ext = (*(*info).diva_file_info)[event.index].file_ext
    ;IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG
    ;IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG
    ;IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG_IMG
    IF  (file_ext eq 'img') OR (file_ext eq 'dat') OR (file_ext eq 'raw')   $
    THEN BEGIN
    	tmp_diva_image_file 	      = (*info).diva_current_prev_image
    	tmp_diva_image_file.file_info = (*(*info).diva_file_info)[event.index] 

    	if (PTR_VALID((*info).diva_current_prev_image.pimage) eq 1) then begin
    	    PTR_FREE, (*info).diva_current_prev_image.pimage
    	    PTR_FREE, (*info).diva_current_prev_image.o_pimage
    	    PTR_FREE, (*info).diva_current_prev_image.p_pimage
    	endif

    	;call 'diva_read_data_img' pro to read data
    	diva_read_data_img,tmp_diva_image_file

    	i_file_size     = tmp_diva_image_file.i_file_size
    	diva_n_images   = tmp_diva_image_file.diva_n_images
    	
	tmp_diva_image_file.ops_bshift = [1,0]
	
    	;update 'diva_current_prev_image'
    	(*info).diva_current_prev_image = tmp_diva_image_file

    	widget_control,(*info).tlb_prev_mul_info_label,set_value=   	    $
	    	'[Bytes: ' + strcompress(i_file_size,/remove) + ']'+  	    $
    		'  [Num images:' + strcompress(diva_n_images,/rem)+']'
	
	widget_control,(*info).tlb_viewlog_butt,set_value = ' View LOG file '
    	widget_control,tlb_prev_drawwid,get_value = prev_drawwid
    	wset,prev_drawwid
	;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	
	if (diva_n_images eq 1) then begin  ;SINGLE IMAGE
    	    temp = (*info).diva_current_prev_image
    	    
	    ;call 'diva_draw_prev' procedure to display preview image
	    diva_draw_prev,prev_drawwid,tlb_prev_pixid,temp.n_dim,  	    $
	    	    	    	    	    	    temp.p_pimage
	    
    	    tmp = {t:[	    strcompress(temp.file_info.filename,/rem),      $
    		    	    strcompress(temp.i_file_size,/rem),	    	    $
    		    	    strcompress(temp.xsize,/rem),		    $
    		    	    strcompress(temp.ysize,/rem),		    $
    		    	    strcompress(temp.n_dim,/rem)],s:[1,1,1]}
			    
    	    widget_control,(*info).tlb_viewlog_butt,sensitive = 0	
	;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	ENDIF ELSE BEGIN	    ;MULTIPLE IMAGE FILE

    	    p   = tmp_diva_image_file.file_info.pathname
    	    fs  = tmp_diva_image_file.file_info.file_str
    	    logfile_name = strcompress(p + fs + '.txt',/remove)

    	    ;call 'diva_logfile_read' procedure
	    diva_logfile_read,logfile_name, n_elems_dummy,  	    	    $
    					    mfile_pos_from, mfile_pos_to,   $
    					    mfile_name,mfile_date,mfile_time

    	    diva_mult_image = Replicate({diva_mult_image}, n_elems_dummy)
    	    tmp_diva_mult_image = diva_mult_image

    	    FOR i = 0,n_elems_dummy -1 DO BEGIN
    		diva_mult_image_init,tmp_diva_mult_image,mfile_pos_from[i], $
    					 mfile_pos_to[i],mfile_name[i],	    $
    					  mfile_date[i],mfile_time[i]
    		diva_mult_image[i] = tmp_diva_mult_image[i]
    	    ENDFOR      

    	    IF (Ptr_Valid((*info).diva_mult_image) eq 1) then BEGIN
	    	Ptr_Free,(*info).diva_mult_image
	    END
	    (*info).diva_mult_image = Ptr_NEW(diva_mult_image)

    	    ;create a list of individual filenames
    	    widget_control,(*info).tlb_prev_list_mul,set_value =    	    $
    		    	    	(*(*info).diva_mult_image)[*].mfile_name

    	    stuff = (*(*info).diva_mult_image)[0]

    	    mfile_pos_from = stuff.mfile_pos_from
    	    mfile_pos_to   = stuff.mfile_pos_to

    	    mfile_size = stuff.mfile_pos_to - stuff.mfile_pos_from + 1 - 8
    	    (*info).diva_current_prev_image.mfile_size = mfile_size

    	    widget_control,(*info).tlb_prev_list,sensitive=0
    	    widget_control,(*info).tlb_prev_list_mul,sensitive=1
    	    widget_control,(*info).tlb_prev_list_sin_base,map=0
    	    widget_control,(*info).tlb_prev_list_mul_base,map=1
	    widget_control,(*info).tlb_viewlog_butt,sensitive = 1

    	    temp = (*info).diva_current_prev_image
    	    ;1. get image info
    	    tmp = {t:['__'+  	strcompress(temp.mfile_name,/rem),  	    $
			    	strcompress(temp.mfile_size,/rem),  	    $
			    	strcompress(temp.xsize,/rem),	    	    $
    			    	strcompress(temp.ysize,/rem),	    	    $
			    	strcompress(temp.n_dim,/rem)], s:[1,1,1]}

    	    ;2. set list selection to element zero
    	    widget_control,(*info).tlb_prev_list_mul,set_list_select=0
	    ;3. set diva_preview draw widget as current
	    widget_control,tlb_prev_drawwid,get_value = prev_drawwid
	    ;4. call 'diva_draw_prev' procedure to display preview image
	    diva_draw_prev,prev_drawwid,tlb_prev_pixid,temp.n_dim,	    $
	    					    temp.p_pimage
	    
    	    widget_control,(*info).prev_buttons[2],set_value = 'Extract image'
    	    (*info).diva_adapt_mode_on = 3

	ENDELSE
    	;call 'diva_report_prev_info' to update info labels
    	diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp

    END;of condition data file extension is img, dat or raw
    
    ;FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS
    ;FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS
    ;FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS_FITS
    IF (file_ext eq 'fit') OR (file_ext eq 'fits') THEN BEGIN
    	
	(*info).diva_prev_mult_index = 0
	
	tmp_diva_image_file 	      = (*info).diva_current_prev_image
    	tmp_diva_image_file.file_info = (*(*info).diva_file_info)[event.index] 

    	if (PTR_VALID((*info).diva_current_prev_image.pimage) eq 1) then begin
    	    PTR_FREE, (*info).diva_current_prev_image.pimage
    	    PTR_FREE, (*info).diva_current_prev_image.o_pimage
    	    PTR_FREE, (*info).diva_current_prev_image.p_pimage
    	endif
	
	f = tmp_diva_image_file.file_info.f
    	;call 'diva_fits_help' pro to get summary of data
    	diva_fits_help,f,get_fname
	
	;read 1st image (cf: img files) and display
	a = readfits(f,header,exten_no=0,/SILENT)
	a = uint(a)
	a = reverse(rotate(a,2))
	;make sure it's a 2D array
	naxis = sxpar(header,'naxis')
	CASE naxis OF
	    2:	    n_dim = 1
	    ELSE:   stop
	ENDCASE
	
	n_byt=sxpar(header,'bitpix')
	CASE n_byt OF 
	    16:     n_byt = 2
	    -32:    n_byt = 2
	    ELSE:   stop
	ENDCASE
	
	xsize 	    	= sxpar(header,'naxis1')
	ysize 	    	= sxpar(header,'naxis2')
	diva_n_images	=   n_elements(get_fname)
	
	tmp_diva_image_file.xsize   	    = xsize
	tmp_diva_image_file.ysize   	    = ysize
	tmp_diva_image_file.n_dim   	    = n_dim
	tmp_diva_image_file.diva_n_images   = diva_n_images
	tmp_diva_image_file.ops_bshift      = [1,0]
	
	
	tmp_diva_image_file.pimage  	= Ptr_new(a)
	tmp_diva_image_file.o_pimage  	= tmp_diva_image_file.pimage 
	tmp_diva_image_file.p_pimage	= Ptr_New(congrid(a,250,250,n_dim))
	
	tmp_diva_image_file.mfile_name	    = get_fname[0]
	tmp_diva_image_file.mfile_name_str  = 	    	    	    	    $
			    strmid(get_fname[0],0,strpos(get_fname[0],'.'))
	
	;get ops_name
	finfo = tmp_diva_image_file.file_info
	IF (diva_n_images eq 1) then begin
	    ops_name = finfo.f + '(' + strcompress(xsize,/rem) + ',' +      $
	    	    	    strcompress(ysize,/rem) + ')(1,0)'
	ENDIF ELSE BEGIN
	    ops_name = finfo.pathname + finfo.file_str + '__' +     	    $
	    	    	    tmp_diva_image_file.mfile_name_str + '.'  +     $
			    finfo.file_ext + '(' + strcompress(xsize,/rem) +$
			    ',' + strcompress(ysize,/rem) + ')(1,0)'
	ENDELSE
	tmp_diva_image_file.ops_name = ops_name
	
	;update 'diva_current_prev_image'
	(*info).diva_current_prev_image = tmp_diva_image_file

    	temp = (*info).diva_current_prev_image

	i_file_size     = (xsize*ysize*n_dim*n_byt)
    	diva_n_images   = temp.diva_n_images
	p_pimage    	= (*temp.p_pimage)

    	;don't need this if only a single image -- surely
	widget_control,(*info).tlb_prev_mul_info_label,set_value=   	    $
	    	'[Bytes: ' + strcompress(i_file_size,/remove) + ']'+  	    $
    		'  [Num images:' + strcompress(diva_n_images,/rem)+']' 
	widget_control,(*info).tlb_viewlog_butt,set_value = 	    	    $
	    	    	    	    	    	    ' View FITS hdr '
    	widget_control,tlb_prev_drawwid,get_value = prev_drawwid
    	;wset,prev_drawwid
    	
	widget_control,(*info).tlb_viewlog_butt,sensitive = 1
	;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	
	if (diva_n_images eq 1) then begin  ;SINGLE IMAGE
    	    
	    
	    ;4. call 'diva_draw_prev' procedure to display preview image
	    diva_draw_prev,prev_drawwid,tlb_prev_pixid,temp.n_dim,	    $
	    					    temp.p_pimage

    	    tmp = {t:[	    strcompress(temp.file_info.filename,/rem),      $
    		    	    strcompress(temp.i_file_size,/rem),	    	    $
    		    	    strcompress(temp.xsize,/rem),		    $
    		    	    strcompress(temp.ysize,/rem),		    $
    		    	    strcompress(temp.n_dim,/rem)],s:[1,1,1]}
	;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	ENDIF ELSE BEGIN	    ;MULTIPLE IMAGE FITS FILE
    	    ;cf IMG, where log file is read to get list of image names,
	    ;times,dates and positions where the data starts/stops
	    ;However, we don't all that here. All we need is a list of
	    ;names ("get_fname" - already got this from "diva_fits_help")
	    ;procedure. We don't need all that other info to be able to
	    ;read parts of the image file, since we can use the extension
	    ;number ie; 
	    ;result = readfits('filename.fit',header,exten_no=exten_no)
    	    
	    file_info       = (*info).diva_current_prev_image.file_info
	    diva_n_images   = (*info).diva_current_prev_image.diva_n_images
	    
	    diva_mult_image = Replicate({diva_mult_image}, diva_n_images)
	    
	    diva_mult_image[*].file_info = file_info
	    
	    for i=0,diva_n_images - 1 do begin
	    	diva_mult_image[i].mfile_name 	    = get_fname[i]
		diva_mult_image[i].mfile_name_str   = 	    	    	    $
		    	strmid(get_fname[i],0,strpos(get_fname[i],'.'))
		diva_mult_image[i].mfile_fits_ext   = i
	    endfor
	    
	    ;as for IMG case, free up 'diva_mult_image' Ptr (if valid)
	    ;and make a new Ptr
	    IF (Ptr_Valid((*info).diva_mult_image) eq 1) then BEGIN
	    	Ptr_Free,(*info).diva_mult_image
	    END
	    (*info).diva_mult_image = Ptr_NEW(diva_mult_image)
	    
	    ;create a list of individual filenames
    	    widget_control,(*info).tlb_prev_list_mul,set_value =    	    $
    		    	    	(*(*info).diva_mult_image)[*].mfile_name

    	    mfile_size = xsize*ysize*n_dim*n_byt
	    (*info).diva_current_prev_image.mfile_size = mfile_size
	    
    	    widget_control,(*info).tlb_prev_list,sensitive=0
    	    widget_control,(*info).tlb_prev_list_mul,sensitive=1
    	    widget_control,(*info).tlb_prev_list_sin_base,map=0
    	    widget_control,(*info).tlb_prev_list_mul_base,map=1
	    
    	    temp = (*info).diva_current_prev_image
    	    ;1. get image info
    	    tmp = {t:['__'+  	strcompress(temp.mfile_name,/rem),  	    $
			    	strcompress(temp.mfile_size,/rem),  	    $
			    	strcompress(temp.xsize,/rem),	    	    $
    			    	strcompress(temp.ysize,/rem),	    	    $
			    	strcompress(temp.n_dim,/rem)], s:[1,1,1]}

    	    ;2. set list selection to element zero
    	    widget_control,(*info).tlb_prev_list_mul,set_list_select=0
    	    ;3. set diva_preview draw widget as current
	    widget_control,tlb_prev_drawwid,get_value = prev_drawwid
	    ;4. call 'diva_draw_prev' procedure to display preview image
	    diva_draw_prev,prev_drawwid,tlb_prev_pixid,temp.n_dim,	    $
	    					    temp.p_pimage
    	    
	    widget_control,(*info).prev_buttons[2],set_value = 'Extract image'
    	    (*info).diva_adapt_mode_on = 3
	    
	ENDELSE	
	;call 'diva_report_prev_info' to update info labels
	diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp
	
	
	
    END ;of condition file is FITS format

END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"PREV_REMV":	$   ;PREV_REMV_PREV_REMV_PREV_REMV_PREV_REMV_PREV_REMV_PREV
BEGIN	    ;also 'Quit adaptive mode' & 'extract image'
    ;1. PREVIEW MODE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    if ((*info).diva_adapt_mode_on eq 0) then begin

	old_array   = (*(*info).diva_file_info)
	index 	    = (*info).diva_prev_index
	selected    = (*(*info).diva_file_info)[index]

	f =  selected.f
	cf = (*(*info).pdiva_draw).diva_current_image.file_info.f

    	;if removed item is current image!!!!!!!!!!!!!!!!!!!!
	if (f eq cf) then begin
	    diva_draw_no_image,(*info).pdiva_draw
	    ;desensitize stats/hist TOOL options
	    widget_control,(*info).diva_file_buttids[0],sensitive=0
	    widget_control,(*info).diva_menus[0],sensitive=0
	    widget_control,(*info).diva_menus[1],sensitive=0
	    widget_control,(*info).diva_menus[2],sensitive=0
	    widget_control,(*info).diva_menus[3],sensitive=0
	end
    	
	n_elems_old_array = n_elements(old_array)
	l = n_elems_old_array - 1   ;last element
	if (n_elems_old_array gt 1) then begin

	    CASE index OF
		0:  new_array = [(*(*info).diva_file_info)[1:*]]
		l:  new_array = [(*(*info).diva_file_info)[0:l-1]]
	     ELSE:  new_array = [(*(*info).diva_file_info)[0:index-1],     $
		     	    	 (*(*info).diva_file_info)[index+1:l]]
	    ENDCASE
	    ;update 'diva_image_file' array
	    (*(*info).diva_file_info)=new_array
	    ;update list with entry removed
	    widget_control,(*info).tlb_prev_list,set_value= 	    	    $
    	    	(*(*info).diva_file_info)[*].filename
	endif else begin
	    ;update list with entry removed
	    Ptr_FRee,(*info).diva_file_info
	    Ptr_Free,(*info).diva_current_prev_image.pimage
	    Ptr_Free,(*info).diva_current_prev_image.o_pimage
	    Ptr_Free,(*info).diva_current_prev_image.p_pimage
	    widget_control,(*info).tlb_rhs_base,sensitive=0
	    widget_control,(*info).tlb_prev_list,set_value = 'none'
	endelse

	(*info).diva_prev_index = 0 ;reset index to zero
	;update filename/dimensions/size widget labels
	tmp = {t:['none','0','0','0','0'],s:[0,0,0]}
	;call 'diva_report_prev_info' to update info labels
	diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp
	;erase preview draw area
	widget_control,tlb_prev_drawwid,get_value = prev_drawwid
	wset,prev_drawwid & erase
	wset,tlb_prev_pixid & erase 
    end ;of condition 'diva_adapt_mode on' = 0 (ie; is OFF)
    ;2. QUIT ADAPTIVE MODE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    if ((*info).diva_adapt_mode_on eq 1) then begin
    	(*info).diva_adapt_mode_on = 0

	widget_control,(*info).tlb_prev_label,set_value =   	    	    $
			    '******   PREVIEW  MODE   ******'
	widget_control,(*info).prev_buttons[2],set_value = 'Remove entry'
	widget_control,(*info).prev_buttons[2],sensitive=0
	widget_control,(*info).tlb_rhs_base,sensitive = 1 

	index = (*info).diva_prev_index
	if (Ptr_Valid((*info).diva_file_info) eq 1) then BEGIN
	    list	= (*(*info).diva_file_info)[*].f
	    widget_control,(*info).tlb_prev_list,sensitive=1
	endif else begin    ;ie-    no files selected
	    widget_control,(*info).tlb_prev_list,sensitive=0
	    widget_control,(*info).tlb_prev_selected_label_id,set_value='none'
	endelse
	
	widget_control,(*info).tlb_prev_list_sin_base,map=1
	widget_control,(*info).tlb_prev_list_mul_base,map=0
	widget_control,(*info).tlb_prev_list_mul,sensitive=0
	widget_control,(*info).tlb_adapt_list_base,map=0

	;diva_draw_no_image,(*info).pdiva_draw
	tmp = {t:['0','0','0','0','0'],s:[0,0,0]}
	;call 'diva_report_prev_info' to update info labels
	diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp
	;get preview draw area and make current
	widget_control,tlb_prev_drawwid,get_value = prev_drawwid
	wset,prev_drawwid   &  erase
	wset,tlb_prev_pixid &  erase
	diva_draw_no_image,(*info).pdiva_draw
	;OK, lets free up ALL the adaptive mode pointers
	(*info).diva_ad_new_list = strarr(100)

    END ;of condition adaptive mode is ON
    ;3. EXTRACT IMAGE MODE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    if ((*info).diva_adapt_mode_on eq 3) then begin
	widget_control,/hourglass
	diva_current_prev_image=(*info).diva_current_prev_image

	xsize = diva_current_prev_image.xsize
	ysize = diva_current_prev_image.ysize
	n_dim = diva_current_prev_image.n_dim
	f_str = diva_current_prev_image.file_info.file_str
	p     = diva_current_prev_image.file_info.pathname
	ext   = diva_current_prev_image.file_info.file_ext
	str   = diva_current_prev_image.mfile_name_str
	name  = strcompress(p+f_str+'__'+str+'.img',/rem)
	
	filename = dialog_pickfile(file=name,filter='*.img',/write,path=p)

	r     = findfile(filename,count=c)
	if (filename eq '') OR (c gt 0) then begin
	    ;call 'diva_error' to whinge...............
	    diva_error,(*info).prev_buttons[2],1
	endif else begin
	    h 	    = uintarr(4)
	    h[0]    = xsize
	    h[1]    = ysize
	    h[2]    = n_dim
	    h[3]    = 2
	    i	= uintarr(xsize,ysize,n_dim)
	    i	= reverse((*diva_current_prev_image.pimage))
	    if (n_dim[0] eq 3) then begin
		b0  =	rotate(i[*,*,0],2)
		b1  =	rotate(i[*,*,1],2)
		b2  =	rotate(i[*,*,2],2)
		i   =	[[[b0]],[[b1]],[[b2]]]
	    endif else begin
		i=rotate(i,2)
	    endelse
	    openw,1,filename
	    writeu,1,h
	    writeu,1,i
	    close,1
	endelse
    end
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"PREV_LOAD":	$   ;PREV_LOAD_PREV_LOAD_PREV_LOAD_PREV_LOAD_PREV_LOAD_PREV
BEGIN
    ;widget_control,tlb_info_auto_text,set_value = 'Autoscale ON'
    (*(*info).pdiva_draw).diva_autoscale = [1,0]
    
    ;stop
    Ptr_Free,(*(*info).pdiva_draw).diva_current_image.pimage
    Ptr_Free,(*(*info).pdiva_draw).diva_current_image.o_pimage
    Ptr_Free,(*(*info).pdiva_draw).diva_current_image.p_pimage
    
    curr_prev 	= (*info).diva_current_prev_image
    
    diva_image_copy, curr_prev, new_curr
    
    ;make pdiva_draw.diva_current_image
    (*(*info).pdiva_draw).diva_current_image = new_curr
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title

    widget_control,(*info).diva_file_buttids[0],sensitive=1
    widget_control,(*info).diva_menus[0],sensitive=1
    widget_control,(*info).diva_menus[1],sensitive=1
    widget_control,(*info).diva_menus[2],sensitive=1
    widget_control,(*info).diva_menus[3],sensitive=1
    
    
    ;x and y size of image
    xsize=(*(*info).pdiva_draw).diva_current_image.xsize
    ysize=(*(*info).pdiva_draw).diva_current_image.ysize
    ;x and y size of draw viewport
    tlb_drawwid_xsize = (*(*info).pdiva_draw).tlb_drawwid_size[0]
    tlb_drawwid_ysize = (*(*info).pdiva_draw).tlb_drawwid_size[1]
    
    ;get current viewport (x and y at lower left corner)
    widget_control,(*(*info).pdiva_draw).diva_tlb_drawwid,  	    	    $
    	    	    	    	    	    	    get_draw_view=draw_view

    if (xsize lt tlb_drawwid_xsize) then begin
	tlb_drawwid_xsize=xsize
	tlb_drawwid_ysize=tlb_drawwid_ysize+20
    end
    if (ysize lt tlb_drawwid_ysize) then begin
	tlb_drawwid_ysize=ysize
	tlb_drawwid_xsize=tlb_drawwid_xsize+20
    end

    x_ratio = 250./xsize
    y_ratio = 250./ysize

    ;lower lhs coords - PREVIEW 
    llhs = [draw_view[0]*x_ratio,draw_view[1]*y_ratio]
    ;upper rhs coords - PREVIEW 
    urhs = [(draw_view[0]+tlb_drawwid_xsize-1)*x_ratio, 	    	    $
	    (draw_view[1]+tlb_drawwid_ysize-1)*y_ratio ]
    ;make sure the urhs values are 249 at max
    urhs[0] = urhs[0] < 248
    urhs[1] = urhs[1] < 248

    widget_control,(*(*info).pdiva_draw).tlb_prev_drawwid,get_value=prev_draw
    wset,prev_draw
    
    plot_ct 	= (*(*info).pdiva_draw).plot_ct
    image_ct	= (*(*info).pdiva_draw).image_ct
    
    tvlct,plot_ct[*,0],plot_ct[*,1],plot_ct[*,2];PLOT colour table
    Device,Copy=[0,0,250,250,0,0,tlb_prev_pixid]
    plots,	[llhs[0],llhs[0],urhs[0],urhs[0],llhs[0]],  	    	    $
	    	[llhs[1],urhs[1],urhs[1],llhs[1],llhs[1]],  	    	    $
	    	/device,color=4,thick=2
    tvlct,image_ct[*,0],image_ct[*,1],image_ct[*,2];IMAGE colour table

END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"PREV_ALL": 	BEGIN;---------------------------------------------------------;
		    t 	    = (*info).diva_current_prev_image
		    p 	    = t.pimage
		    auto    = (*(*info).pdiva_draw).diva_autoscale[0]
		    shft    = (*(*info).pdiva_draw).diva_autoscale[1]
		    
		    CASE t.n_dim OF
		    	1:  if (auto eq 1) then pimage =congrid(*p,400,400) $
			    	else pimage = ishft(congrid(*p,400,400),shft)
		    	3:  if (auto eq 1) then pimage =    	    	    $
			    	congrid(*p,400,400,t.n_dim) else  pimage =  $
				    ishft(congrid(*p,400,400,t.n_dim),auto)
		    ENDCASE
		    diva_draw_all,pimage,t.n_dim,group= (*info).tlb 
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_ALL": 	BEGIN;---------------------------------------------------------;
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"ADAPT_MODE":	$   ;ADAPTIVE_MODE_ADAPTIVE_MODE_ADAPTIVE_MODE_ADAPTIVE_MODE_
BEGIN
    CASE (*info).os_name OF
	'X':	pick_log = dialog_pickfile(path = (*info).def_path[0],	    $
	    	    	    	    	file='gain4.txt',filter = '*.txt')
	'WIN':	pick_log = dialog_pickfile(path = (*info).def_path[1],	    $
	    	    	    	    	file='gain4.txt',filter = '*.txt')
    ENDCASE
    if (pick_log ne '') then begin
	widget_control,(*info).tlb_prev_selected_label_id,  	    	    $
		    set_value = strcompress(pick_log,/remove)

	IF (Ptr_Valid((*info).diva_mult_image) eq 1) then BEGIN
	    Ptr_Free,(*info).diva_mult_image
	END
	;call 'diva_adaptive_read_log' pro
	diva_adaptive_read_log,pick_log,pick_data,new_list,diva_mult_image

	(*info).diva_mult_image     = Ptr_NEW(diva_mult_image)
	(*info).number_images       = n_elements(new_list)
	(*info).diva_ad_pick_file   = [pick_log,pick_data]

	for i=0,n_elements(new_list)-1 do   	    	    	    	    $	
		    	    	(*info).diva_ad_new_list[i]=new_list[i]

	widget_control,(*info).tlb_adapt_list,set_value=new_list

	;set timer going		    
	widget_control,(*info).diva_ad_buttons[0],TIMER =   	    	    $
			    	    	    	    (*info).tlb_ad_timer[0]

	;reset diva_ad_buttons to ON
	widget_control,(*info).diva_ad_buttons[0],set_button=1
	widget_control,(*info).diva_ad_buttons[1],set_button=1

	(*info).diva_adapt_mode_on  = 1
	(*info).diva_time_events_on = 1
	widget_control,(*info).tlb_prev_label,set_value =   	    	    $
		    	    '*****   ADAPTIVE MODE   *****'

	tmp = {t:['none','0','0','0','0'],s:[0,0,1]}
	;call 'diva_report_prev_info' to update info labels
	diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp

	widget_control,(*info).tlb_rhs_base,sensitive=1
	widget_control,(*info).tlb_prev_list_sin_base,map=0
	widget_control,(*info).tlb_prev_list,sensitive=0
	widget_control,(*info).tlb_prev_list_mul_base,map=0
	widget_control,(*info).tlb_prev_list_mul,sensitive=0
	widget_control,(*info).tlb_adapt_list_base,map=1

	widget_control,(*info).prev_buttons[2],set_value='Quit ADAPT'
	;erase preview draw area
	widget_control,tlb_prev_drawwid,get_value = prev_drawwid
	wset,prev_drawwid   & erase
	wset,tlb_prev_pixid & erase
	widget_control,diva_tlb_drawwid,get_value = tlb_draw
	wset,tlb_draw	    & erase
    endif else begin
	;call 'diva_error' to whinge...............
	diva_error,(*info).tlb,0
    endelse
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"AD_LIST":  $	;AD_LIST_AD_LIST_AD_LIST_AD_LIST_AD_LIST_AD_LIST_AD_LIST_AD_LIS
BEGIN
    widget_control,/hourglass
    (*info).diva_ad_list_index = event.index
    pick_data     =  (*info).diva_ad_pick_file[1]

    mult = (*(*info).diva_mult_image)[event.index]
    temp = (*info).diva_current_prev_image

    ;call 'diva_ad_read_data....'
    diva_ad_read_data,pick_data,temp,mult	

    temp.diva_n_images = n_elements((*(*info).diva_mult_image))

    ;... and update structure with new values
    (*info).diva_current_prev_image = temp

    mfile_size  = temp.mfile_size
    num_images  = temp.diva_n_images
    n_dim    	= temp.n_dim
    p_pimage 	= temp.p_pimage

    widget_control,(*info).tlb_adapt_info_label,set_value = '[Bytes: ' +    $
		strcompress(mfile_size,/remove) +']'+ '  [num images: ' +   $
		strcompress(num_images,/remove)+']'

    ;get preview draw area and make current
    widget_control,tlb_prev_drawwid,get_value = prev_drawwid
    ;call 'diva_draw_prev' procedure to display preview image
    diva_draw_prev,prev_drawwid,tlb_prev_pixid,temp.n_dim,	    $
    					    temp.p_pimage

    tmp = {t:[      strcompress(temp.mfile_name,/rem), 	    $
		    strcompress(temp.i_file_size,/rem),	    $
		    strcompress(temp.xsize,/rem),  	    $
		    strcompress(temp.ysize,/rem),  	    $
		    strcompress(temp.n_dim,/rem)],s:[1,1,1]}
    ;call 'diva_report_prev_info' to update info labels
    diva_report_prev_info,(*info).prev_info,(*info).prev_buttons,tmp
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_XMTOOL":  xmtool, group= (*info).tlb 
"DIVA_XLOADCT": stop;xloadct,group= (*info).tlb
"AD_ON":    	BEGIN
    	    	    if (event.select eq 1) then begin
		    	;print,'timer events turned on'
		    	(*info).diva_time_events_on = 1
			widget_control,(*info).diva_ad_buttons[0],  	    $
			    	    	    TIMER=(*info).tlb_ad_timer[0]
		    end
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"AD_OFF":   	BEGIN
    	    	    if (event.select eq 1) then begin
		    	;print,'timer events turned off'
		    	(*info).diva_time_events_on = 0
		    end
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"AD_AUTO_ON":	if (event.select eq 1) then (*info).diva_ad_autoload_on = 1
"AD_AUTO_OFF":	if (event.select eq 1) then (*info).diva_ad_autoload_on = 0
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_STATS":	BEGIN
		    temp    = (*(*info).pdiva_draw).diva_current_image
		    maxv    = total(temp.i_max)
		    meanv   = total(temp.i_mean)
		    diva_draw_base = (*(*info).pdiva_draw).diva_draw_base
		    if (maxv eq 0) AND (meanv eq 0) then begin
		    	diva_tlb_stats_calc,(*info).pdiva_draw,diva_draw_base
		    endif else begin
			xv = [0,temp.xsize-1]
			yv = [0,temp.ysize-1]
			stats = [xv,yv,temp.i_min,temp.i_max,temp.i_mean,$
			    	temp.i_variance,temp.i_stddev]
			;call 'diva_stats' pro to display widget table of stats!
			diva_stats,stats,0,temp.n_dim,group=diva_draw_base
		    endelse
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_HISTOG":	$   ;   HISTOGRAM__HISTOGRAM__HISTOGRAM__HISTOGRAM__HISTOGRAM
BEGIN
    	    	    n_dim = (*(*info).pdiva_draw).diva_current_image.n_dim
		    diva_draw_base = (*(*info).pdiva_draw).diva_draw_base
		    ;as with stats, make 'diva_draw_base' group_leader!!!!!!
    	    	    if (n_dim eq 1) then begin
		    	diva_hist,    (*info).pdiva_draw,group=diva_draw_base
		    endif
    	    	    if (n_dim eq 3) then begin
		    	diva_hist_rgb,(*info).pdiva_draw,group=diva_draw_base
		    endif
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"FUNCTION": 	BEGIN
		    t = (*(*info).pdiva_draw).tlb_info_func_text
		    CASE event.value OF
		    	1:  BEGIN   ;regular ROI
			    	(*(*info).pdiva_draw).tlb_image_function = 1
				widget_control,t,set_value = 'Regular ROI'
			    END
			2:  BEGIN   ;irregular ROI
			    	(*(*info).pdiva_draw).tlb_image_function = 2
				widget_control,t,set_value = 'Irregular ROI'
			    END
			3:  BEGIN   ;circular ROI
			    	(*(*info).pdiva_draw).tlb_image_function = 3
				widget_control,t,set_value = 'Circular ROI'
			    END
			4:  BEGIN   ;ZOOM
			    	(*(*info).pdiva_draw).tlb_image_function = 4
				widget_control,t,set_value = 'Zoom'
			    END
			6:  BEGIN   ;Horz/Vert Line profile 
			    	(*(*info).pdiva_draw).tlb_image_function = 6
				widget_control,t,set_value = 'H/V Line Profile'
			    END
			7:  BEGIN   ;Entire Row Line profile 
			    	(*(*info).pdiva_draw).tlb_image_function = 7
				widget_control,t,set_value = 'All Col Profile'
			    END
			8:  BEGIN   ;Entire Col Line profile 
			    	(*(*info).pdiva_draw).tlb_image_function = 8
				widget_control,t,set_value = 'All Row Profile'
			    END
			9:  BEGIN   ;any Line profile
			    	(*(*info).pdiva_draw).tlb_image_function = 9
				widget_control,t,set_value = 'Any Line Profile'
			    END
		    ENDCASE
		    (*(*info).pdiva_draw).diva_roi_irreg_xpts = intarr(100)
		    (*(*info).pdiva_draw).diva_roi_irreg_ypts = intarr(100)
		    (*(*info).pdiva_draw).diva_roi_irreg_counter = 0
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_STORE_CONC":  $	;DIVA_STORE_CONCATENATOR_DIVA_STORE_CONCATENATOR_DIVA_S
BEGIN
    curr = (*(*info).pdiva_draw).diva_current_image
    if (curr.n_dim eq 1) then BEGIN
    	;if 'diva_image_conc' Ptr is not yet valid, then make it so
    	IF (Ptr_Valid((*(*info).pdiva_draw).diva_image_conc) eq 0) then begin
	    diva_image_copy, curr, new_curr
	    (*(*info).pdiva_draw).diva_image_conc = Ptr_New(new_Curr)
	    ;widget_control,(*info).diva_tool_buttids[3],sensitive=1
    	ENDIF ELSE BEGIN
	    new = curr.ops_name
	    old = (*(*(*info).pdiva_draw).diva_image_conc)[*].ops_name
	    ;check whether this image has already been stored
	    r   = strmatch(old,new)
	    if (total(r) eq 0) then begin
    	    	diva_image_copy, curr, New_Curr
	    	(*(*(*info).pdiva_draw).diva_image_conc) =  	    	    $
	    	    	[(*(*(*info).pdiva_draw).diva_image_conc),new_curr]
	    
	    
		if (XREGISTERED("diva_conc") eq 1) then begin
	    		diva_conc_list = (*(*(*info).pdiva_draw).   	    $
		    	    	    	    diva_image_conc)[*].ops_name

	    	    for i=0,n_elements(diva_conc_list)-1 do 	    	    $
		    	    	diva_conc_list[i] = 	    	    	    $
	    	    		strcompress(i+1,/rem) + '. '+diva_conc_list[i]

	    	    widget_control,(*(*info).pdiva_draw).diva_conc_list_id, $
	    	    	    	    		set_value =  diva_conc_list
		ENDIF
	    ENDIF ELSE BEGIN
		diva_error,(*info).tlb,5
	    ENDELSE ;of condition total(r) eq 0 -ie; this image hasn't 
	    ;already been stored 
    	ENDELSE  ;of condition that 'diva_images_conc' is NOT a valid pointer
    ENDIF ;of condition n_dim = 1
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_STORE_MATH":	$   ;DIVA_STORE_MATH_DIVA_STORE_MATH_DIVA_STORE_MATH_DI
BEGIN
    curr = (*(*info).pdiva_draw).diva_current_image
    if (curr.n_dim eq 1) then BEGIN
    	;if 'diva_image_ops' Ptr is not yet valid, then make it so
	if (Ptr_Valid((*(*info).pdiva_draw).diva_image_ops) eq 0) then begin
	    diva_image_copy, curr, new_curr
	    (*(*info).pdiva_draw).diva_image_ops = Ptr_New(new_Curr)
	    ;widget_control,(*info).diva_tool_buttids[2],sensitive=1
	endif else begin
	    new = curr.ops_name
	    old = (*(*(*info).pdiva_draw).diva_image_ops)[*].ops_name
    	    ;check whether this image has already been stored
	    r   = strmatch(old,new)
	    if (total(r) eq 0) then begin
		diva_image_copy, curr, New_Curr
		(*(*(*info).pdiva_draw).diva_image_ops) =   	    	    $
	    	    	    [(*(*(*info).pdiva_draw).diva_image_ops),new_curr]

		if (XREGISTERED("diva_math") eq 1) then begin
	    		diva_math_list = (*(*(*info).pdiva_draw).   	    $
		    	    	    	    diva_image_ops)[*].ops_name

	    	    for i=0,n_elements(diva_math_list)-1 do 	    	    $
		    	    	diva_math_list[i] = 	    	    	    $
	    	    		strcompress(i+1,/rem) + '. '+diva_math_list[i]

	    	    diva_math_list_mini = strarr(n_elements(diva_math_list))
	    	    FOR i=0,n_elements(diva_math_list)-1 DO 	    	    $
		    		diva_math_list_mini[i]=     	    	    $
			strcompress(i+1,/rem) + '. '+ 	    	    	    $
			strmid(diva_math_list[i],   	    	    	    $
			strpos(diva_math_list[i],'/',/reverse_search)+1)

	    	    widget_control,(*(*info).pdiva_draw).diva_math_list_id, $
	    	    	    	    		set_value =  diva_math_list
	    	    widget_control,(*(*info).pdiva_draw).diva_math_oprs_list,$
	    		set_value = ['constant -->','filename;',    	    $
			    	    	    diva_math_list_mini]

		ENDIF
	    ENDIF ELSE BEGIN
		diva_error,(*info).tlb,5
	    ENDELSE ;of condition total(r) eq 0 -ie; this image hasn't 
	    ;already been stored 
	endelse ;of condition that 'diva_images_ops' is NOT a valid pointer
    ENDIF ;of condition n_dim = 1
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_CONC":	$   ;DIVA_CONCATENATOR_DIVA_CONCATENATOR_DIVA_CONCATENATOR_DIVA
BEGIN
    diva_image_conc = (*(*info).pdiva_draw).diva_image_conc
    IF (PTr_VALID(diva_image_conc) eq 1) THEN BEGIN
    	diva_conc,(*(*info).pdiva_draw),(*info).os_name,(*info).def_path,   $
	    	    	    	    diva_conc_list_id,group= (*info).tlb
				    
	(*(*info).pdiva_draw).diva_conc_list_id     =  diva_conc_list_id
    ENDIF ELSE  diva_error,(*info).tlb,3
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_MATH":	$   ;DIVA_MATH_DIVA_MATH_DIVA_MATH_DIVA_MATH_DIVA_MATH_DIVA_MA
BEGIN
    diva_image_ops = (*(*info).pdiva_draw).diva_image_ops
    IF (PTr_VALID(diva_image_ops) eq 1) THEN BEGIN
	diva_math,(*(*info).pdiva_draw),diva_math_list_id,  	    	    $
		    	    	    diva_math_oprs_list,group= (*info).tlb
	(*(*info).pdiva_draw).diva_math_list_id     = diva_math_list_id
	(*(*info).pdiva_draw).diva_math_oprs_list   = diva_math_oprs_list
    ENDIF ELSE  diva_error,(*info).tlb,3
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_ORIG":	$   ;DIVA_ORIGINAL_DIVA_ORIGINAL_DIVA_ORIGINAL_DIVA_ORIGINAL
BEGIN
    (*(*info).pdiva_draw).diva_fit_size = 0
    
    pimage  	= (*(*(*info).pdiva_draw).diva_current_image.o_pimage)
    new_size 	= SIZE(pimage)
    
    (*(*(*info).pdiva_draw).diva_current_image.pimage)  = pimage
      (*(*info).pdiva_draw).diva_current_image.xsize	= new_size[1] 
      (*(*info).pdiva_draw).diva_current_image.ysize	= new_size[2]
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_ROT_CW":	$   ;DIVA_ROTATE_CLOCKWISE________DIVA_ROTATE_CLOCKWISE________
BEGIN
    ;make temporary copy of 'diva_current_image'
    tmp_diva_current_image = (*(*info).pdiva_draw).diva_current_image
    ;pass it into 'diva_image_rotate'
    diva_image_rotate, tmp_diva_current_image, 3
    
    nsize   	= (*(*info).pdiva_draw).tlb_drawwid_size
    old_xsize   = tmp_diva_current_image.xsize
    old_ysize	= tmp_diva_current_image.ysize
    
    CASE diva_fit_size OF
    	0:  ;nothing to do here
	1:  diva_image_congrid,tmp_diva_current_image,nsize[0]   ,nsize[1]
	2:  diva_image_congrid,tmp_diva_current_image,old_xsize  ,nsize[1]-10
	3:  diva_image_congrid,tmp_diva_current_image,nsize[0]-10,old_ysize
    ENDCASE
    
    ;update 'diva_current_image' here
    (*(*info).pdiva_draw).diva_current_image = tmp_diva_current_image
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_ROT_ACW": $   ;DIVA_ROTATE_ANTI-CLOCKWISE______DIVA_ROTATE_ANTI-CLOCKWISE
BEGIN
    ;make temporary copy of 'diva_current_image'
    tmp_diva_current_image = (*(*info).pdiva_draw).diva_current_image
    ;pass it into 'diva_image_rotate'
    diva_image_rotate, tmp_diva_current_image, 1
    
    nsize   	= (*(*info).pdiva_draw).tlb_drawwid_size
    old_xsize   = tmp_diva_current_image.xsize
    old_ysize	= tmp_diva_current_image.ysize
    
    CASE diva_fit_size OF
    	0:  ;nothing to do here
	1:  diva_image_congrid,tmp_diva_current_image,nsize[0]   ,nsize[1]
	2:  diva_image_congrid,tmp_diva_current_image,old_xsize  ,nsize[1]-10
	3:  diva_image_congrid,tmp_diva_current_image,nsize[0]-10,old_ysize
    ENDCASE
    
    ;update 'diva_current_image' here
    (*(*info).pdiva_draw).diva_current_image = tmp_diva_current_image
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_ROT_F":	$   ;DIVA_ROTATE_180_DIVA_ROTATE_180_DIVA_ROTATE_180_DIVA_ROT
BEGIN
    
    ;make temporary copy of 'diva_current_image'
    tmp_diva_current_image = (*(*info).pdiva_draw).diva_current_image
    ;pass it into 'diva_image_rotate'
    diva_image_rotate, tmp_diva_current_image, 2
    
    ;update 'diva_current_image' here
    (*(*info).pdiva_draw).diva_current_image = tmp_diva_current_image
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title

END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_FIT_B":	$   ;DIVA_BEST_FIT_DIVA_BEST_FIT_DIVA_BEST_FIT_DIVA_BEST_FIT_
BEGIN
    (*(*info).pdiva_draw).diva_fit_size = 1
    
    nsize   	= (*(*info).pdiva_draw).tlb_drawwid_size
    ;make temporary copy of 'diva_current_image'
    tmp_diva_current_image = (*(*info).pdiva_draw).diva_current_image
    ;pass it into 'diva_image_congrid'
    diva_image_congrid,tmp_diva_current_image,nsize[0],nsize[1]
    
    ;update 'diva_current_image' here
    (*(*info).pdiva_draw).diva_current_image = tmp_diva_current_image
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title

END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_FIT_H":	$   ;DIVA_FIT_HEIGHT_DIVA_FIT_HEIGHT_DIVA_FIT_HEIGHT_DIVA_FIT_
BEGIN
    (*(*info).pdiva_draw).diva_fit_size = 2

    nsize   = 	(*(*info).pdiva_draw).tlb_drawwid_size
    ;make temporary copy of 'diva_current_image'
    tmp_diva_current_image = (*(*info).pdiva_draw).diva_current_image
    old_xsize = tmp_diva_current_image.xsize

    ;pass it into 'diva_image_congrid'
    diva_image_congrid,tmp_diva_current_image,old_xsize,nsize[1]-10

    ;update 'diva_current_image' here
    (*(*info).pdiva_draw).diva_current_image = tmp_diva_current_image
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title

END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_FIT_W":	$   ;DIVA_FIT_WIDTH_DIVA_FIT_WIDTH_DIVA_FIT_WIDTH_DIVA_FIT_
BEGIN
    (*(*info).pdiva_draw).diva_fit_size = 3

    nsize   = 	(*(*info).pdiva_draw).tlb_drawwid_size
    ;make temporary copy of 'diva_current_image'
    tmp_diva_current_image = (*(*info).pdiva_draw).diva_current_image
    old_ysize = tmp_diva_current_image.ysize

    ;pass it into 'diva_image_congrid'
    diva_image_congrid,tmp_diva_current_image,nsize[0]-10,old_ysize

    ;update 'diva_current_image' here
    (*(*info).pdiva_draw).diva_current_image = tmp_diva_current_image
    
    ;call 'diva_draw_create' to kill and recreate tlb draw area
    diva_draw_create,(*info).pdiva_draw
    diva_draw_image, (*info).pdiva_draw;... then display image
    diva_tlb_title,  (*info).pdiva_draw;....and finally update tlb title

END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_ALLIMAGE":
"DIVA_HILITE":	$   ;DIVA_HILITE_DIVA_HILITE_DIVA_HILITE_DIVA_HILITE_DIVA_HILIT
BEGIN
    pimage  	=	(*(*info).pdiva_draw).diva_current_image.pimage
    h_pimage  	=	Ptr_New(*pimage)
    plot_ct	=   	(*(*info).pdiva_draw).plot_ct
    image_ct	=   	(*(*info).pdiva_draw).image_ct
    diva_hilite, pimage,diva_tlb_drawwid,plot_ct,image_ct,group=diva_draw_base
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DIVA_PTC": 	$   ;DIVA_PTC_DIVA_PTC_DIVA_PTC_DIVA_PTC_DIVA_PTC_DIVA_PTC_DIVA
BEGIN
    ifile = (*info).diva_current_prev_image.file_info.f
    catch,wot
    IF (wot eq 0) THEN BEGIN
	pathname	= (*info).diva_current_prev_image.file_info.pathname
	filename	= (*info).diva_current_prev_image.file_info.filename
	file_str	= (*info).diva_current_prev_image.file_info.file_str
	file_ext	= (*info).diva_current_prev_image.file_info.file_ext
	filestuff	= [ifile,pathname,filename,file_str,file_ext]

	openr,1,ifile
	file_size=FSTAT(1)
	file_size=file_size.size
	h_1 = uindgen(4)
	READU,1,h_1
	;check file is of correct PTC format (ie; 2 same-size images)
	h = LONG(h_1)
	calc_size =  ( ( (h[0]*h[1]) + (n_elements(h)) ) * h[3] ) * 2
	;print,file_size,calc_size
	IF (calc_size eq file_size) THEN BEGIN
	    h_2 = uindgen(4)
	    image_1  = uindgen(h_1[0],h_1[1],h_1[2])
	    image_2  = uindgen(h_1[0],h_1[1],h_1[2])
	    READU,1,image_1
	    READU,1,h_2
	    READU,1,image_2
	    close,1
	    image_1 = rotate(image_1,2)
	    image_2 = rotate(image_2,2)
	ENDIF ELSE BEGIN
	    close,1
	    diva_error,(*info).tlb,6
	ENDELSE
    ENDIF ELSE diva_error,(*info).tlb,6
    
    plot_ct	=   	(*(*info).pdiva_draw).plot_ct
    image_ct	=   	(*(*info).pdiva_draw).image_ct

    diva_ptc, image_1,image_2,h_1,diva_tlb_drawwid,image_ct,plot_ct,filestuff
    
    
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"DUMMY":
"DIVA_TEMPI":	$   ;
BEGIN
    pimage  	= (*(*(*info).pdiva_draw).diva_current_image.pimage)
    o_pimage  	= (*(*(*info).pdiva_draw).diva_current_image.o_pimage)
    p_pimage  	= (*(*(*info).pdiva_draw).diva_current_image.p_pimage)
    
    (*(*(*info).pdiva_draw).diva_current_image.pimage)	    = 	    	    $
    	    	    (*(*(*info).pdiva_draw).diva_current_image.pimage)/4
    (*(*(*info).pdiva_draw).diva_current_image.o_pimage)    = 	    	    $
    	    	    (*(*(*info).pdiva_draw).diva_current_image.o_pimage)/4
    (*(*(*info).pdiva_draw).diva_current_image.p_pimage)    = 	    	    $
    	    	    (*(*(*info).pdiva_draw).diva_current_image.p_pimage)/4
    
    diva_draw_image, (*info).pdiva_draw;... then display image
    
    
END
"DIVA_TEMPII":	$   ;
BEGIN
    pimage  	= (*(*(*info).pdiva_draw).diva_current_image.pimage)
    o_pimage  	= (*(*(*info).pdiva_draw).diva_current_image.o_pimage)
    p_pimage  	= (*(*(*info).pdiva_draw).diva_current_image.p_pimage)
    
    (*(*(*info).pdiva_draw).diva_current_image.pimage)	    = 	    	    $
    	    	    (*(*(*info).pdiva_draw).diva_current_image.pimage)*4
    (*(*(*info).pdiva_draw).diva_current_image.o_pimage)    = 	    	    $
    	    	    (*(*(*info).pdiva_draw).diva_current_image.o_pimage)*4
    (*(*(*info).pdiva_draw).diva_current_image.p_pimage)    = 	    	    $
    	    	    (*(*(*info).pdiva_draw).diva_current_image.p_pimage)*4
    
    diva_draw_image, (*info).pdiva_draw;... then display image
    
    
END;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"AUTOSC_ON":  	$   ;
BEGIN
    widget_control,/hourglass
    ;widget_control,tlb_info_auto_text,set_value = 'Autoscale ON'
    (*(*info).pdiva_draw).diva_autoscale = [1,0]
    ;... then display image
    diva_draw_image, (*info).pdiva_draw
    
    o = (*(*info).pdiva_draw).diva_current_image.ops_name
    t = strmid(o,0,strpos(o,'(',/reverse_search))+'(1,0)'
    (*(*info).pdiva_draw).diva_current_image.ops_name = t
    (*(*info).pdiva_draw).diva_current_image.ops_bshift = [1,0]
    
    widget_control,(*(*info).pdiva_draw).tlb_bshift_base,sensitive = 0
END
"AUTOSC_OFF":  	$   ;
BEGIN
    widget_control,/hourglass
    ;widget_control,tlb_info_auto_text,set_value = 'Autoscale OFF'
    (*(*info).pdiva_draw).diva_autoscale = [0,0]
    widget_control,(*(*info).pdiva_draw).tlb_bshift_text,set_value = '0'
    ;... then display image
    diva_draw_image, (*info).pdiva_draw
    
    o = (*(*info).pdiva_draw).diva_current_image.ops_name
    t = strmid(o,0,strpos(o,'(',/reverse_search))+'(0,0)'
    (*(*info).pdiva_draw).diva_current_image.ops_name = t
    (*(*info).pdiva_draw).diva_current_image.ops_bshift = [0,0]

    widget_control,(*(*info).pdiva_draw).tlb_bshift_base,sensitive = 1
END
"BSHFT_DOWN":	$   ;
BEGIN
    widget_control,/hourglass
    new_value = diva_autoscale[1] + 1
    (*(*info).pdiva_draw).diva_autoscale[1] = new_value
    widget_control,(*(*info).pdiva_draw).tlb_bshift_text,   	    	    $
    	    	    	    	    set_value = strcompress(new_value,/rem)
    ;... then display image
    diva_draw_image, (*info).pdiva_draw
    
    o = (*(*info).pdiva_draw).diva_current_image.ops_name
    t = strmid(o,0,strpos(o,'(',/reverse_search)) + 	    	    	    $
		    	    '(0,' + strcompress(new_value,/rem) + ')'
    (*(*info).pdiva_draw).diva_current_image.ops_name = t
    (*(*info).pdiva_draw).diva_current_image.ops_bshift =	  $
		    	    	    	    [0,strcompress(new_value,/rem)]
END
"BSHFT_UP":	$   ;
BEGIN
    widget_control,/hourglass
    new_value = diva_autoscale[1] - 1
    (*(*info).pdiva_draw).diva_autoscale[1] = new_value
    widget_control,(*(*info).pdiva_draw).tlb_bshift_text,   	    	    $
    	    	    	    	    set_value = strcompress(new_value,/rem)
    ;... then display image
    diva_draw_image, (*info).pdiva_draw
    
    o = (*(*info).pdiva_draw).diva_current_image.ops_name
    t = strmid(o,0,strpos(o,'(',/reverse_search)) + 	    	    	    $
		    	    '(0,' + strcompress(new_value,/rem) + ')'
    (*(*info).pdiva_draw).diva_current_image.ops_name = t
    (*(*info).pdiva_draw).diva_current_image.ops_bshift =	  $
		    	    	    	    [0,strcompress(new_value,/rem)]
END
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					    					
ELSE: MESSAGE, "Event User Value Not Found"		
ENDCASE
ENDELSE

if  (Ptr_Valid(diva_zoom_info) eq 1) OR      	    	    	    	    $
    (Ptr_Valid(diva_line_info) eq 1) THEN BEGIN
    
    xsize   	= (*(*info).pdiva_draw).diva_current_image.xsize
    ysize   	= (*(*info).pdiva_draw).diva_current_image.ysize
    
    IF (Ptr_Valid(diva_zoom_info) eq 1) THEN BEGIN
    	(*(*(*info).pdiva_draw).diva_zoom_info).diva_autoscale = 	    $
    	    	    	    	    (*(*info).pdiva_draw).diva_autoscale
    	;call 'diva_zoom_display' to update zoom image
    	diva_zoom_display,(*(*info).pdiva_draw).diva_zoom_info
    
	xz = (*diva_zoom_info).xz
	yz = (*diva_zoom_info).yz
    ENDIF
    
    IF (Ptr_Valid(diva_line_info) eq 1) THEN BEGIN
    	c = (*diva_line_info).coords
    ENDIF 
	
    widget_control,diva_tlb_drawwid, get_value=tlb_draw
    wset,tlb_draw
    
    Device,Copy=[0,0,xsize,ysize,0,0,(*(*info).pdiva_draw).diva_tlb_pixindex]
    tvlct,  (*(*info).pdiva_draw).plot_ct[*,0],			            $
    	    (*(*info).pdiva_draw).plot_ct[*,1],			            $
	    (*(*info).pdiva_draw).plot_ct[*,2]
	
	
    IF (Ptr_Valid(diva_zoom_info) eq 1) THEN 	    	    	    	    $
	plots,xz,yz,/device,thick=1,color=2
    IF (Ptr_Valid(diva_line_info) eq 1) THEN 	    	    	    	    $
	plots,[c[0],c[2]],[c[1],c[3]],/device,color=2,psym=-6
	
    tvlct,  (*(*info).pdiva_draw).image_ct[*,0],    	    	    	    $
    	    (*(*info).pdiva_draw).image_ct[*,1],     	    	    	    $
	    (*(*info).pdiva_draw).image_ct[*,2]    
endif



widget_control,event.top,set_uvalue=info,/no_copy
END ;end of "diva" event handler-----------------------------------------------;
;------------------------------------------------------------------------------;
;------------------------------------------------------------------------------;
;------------------------------------------------------------------------------;
PRO diva, GROUP = GROUP
;------------------------------------------------------------------------------;
; Purpose - 
;------------------------------------------------------------------------------;
IF(XRegistered("diva") NE 0) THEN RETURN		

device,retain=2,decomposed=0
On_Error, 1 	; On an error condition, return to the main level of IDL.
!x.style = 1  &  !y.style = 1  &  !z.style = 1

;DEFAULTS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
def_path    	    =	['/home/jar24/data/images/','D:\Temp\']  	
;def_file    	    =	'gain4.dat'
def_file    	    =	'data.img'
tlb_drawwid_size    =	[800,710]   ;default is [800,710]
;tlb_drawwid_size    =	[1240,910]  ;full size on my linux box
;tlb_drawwid_size    =	[600,710]
diva_prev_xsize = 250
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;-------------------create the main base---------------------------------------;
tlb = WIDGET_BASE(TITLE = "DIVA",TLB_Frame_Attr=1,mbar=bar,/row)
    ;--------file menu list----------------------------------------------------;
    file_menu = WIDGET_BUTTON(bar, VALUE='File', /MENU)
    
    diva_file_open = widget_button(file_menu,value='Open...',	    	    $
    	    	    	    uvalue='DIVA_OPEN')     

    diva_adaptive_butt = widget_button(file_menu,value='Adaptive Mode...',  $
    	    	    	    uvalue='ADAPT_MODE',/separator)

    diva_print_butt = widget_button(file_menu,value='Export...',	    $
    	    	    	    uvalue='DIVA_EXPT',sensitive=0,/separator)    

    dummy = widget_button(file_menu,value='Exit',uvalue='DIVA_EXIT',/separator) 

    diva_file_buttids = [diva_print_butt,diva_print_butt]       
    ;--------------------------------------------------------------------------;
    ;--------edit menu list----------------------------------------------------;
    edit_menu = WIDGET_BUTTON(bar, VALUE='Edit' ,/MENU,sensitive=0)
			    
    diva_edit_store =widget_button(edit_menu,value='Store image',/menu)

    	    diva_edit_math = widget_button(diva_edit_store,value=' MATH',   $
	    	      	    uvalue = 'DIVA_STORE_MATH')

    	    diva_edit_conc = widget_button(diva_edit_store, 	      	    $
	    	    	    value=' CONCATENATOR',   	    	    	    $
	    	    	    uvalue = 'DIVA_STORE_CONC')

    ;--------------------------------------------------------------------------;
    ;--------view menu list----------------------------------------------------;
    view_menu = WIDGET_BUTTON(bar, VALUE='View' ,/MENU,sensitive=0)
		
    diva_view_orig = widget_button(view_menu,value='Revert to original',    $
    	    	    	    uvalue='DIVA_ORIG')
    
    diva_view_hili = widget_button(view_menu,value='Pixel Value Highlight', $
    	    	    	    uvalue='DIVA_HILITE')
    		
    diva_view_rot  = widget_button(view_menu,value='Rotate Image',     	    $
    	    	    	    /menu,/separator)
		
    	    diva_rot_left = widget_button(diva_view_rot,value='+ CW',       $
    	    	    	    uvalue='DIVA_ROT_CW')

    	    diva_rot_right= widget_button(diva_view_rot,value='- CW',       $
    	    	    	    uvalue='DIVA_ROT_ACW')

    	    diva_rot_flip = widget_button(diva_view_rot,value='Flip',       $
    	    	    	    uvalue='DIVA_ROT_F')

    diva_view_fit  = widget_button(view_menu,value='Fit to',/menu)
		
    	    diva_fit_best = widget_button(diva_view_fit,value='Best Fit',   $
    	    	    	    uvalue='DIVA_FIT_B')
		    
    	    diva_fit_height = widget_button(diva_view_fit,value='Height',   $
    	    	    	    uvalue='DIVA_FIT_H')

    	    diva_fit_width= widget_button(diva_view_fit,value='Width',      $
    	    	    	    uvalue='DIVA_FIT_W')

    diva_view_all  = widget_button(view_menu,value='All image...',  	    $
    	    	    	    uvalue='DIVA_ALLIMAGE',/separator)
    ;--------------------------------------------------------------------------;
    ;--------tool menu list----------------------------------------------------;
    tool_menu = WIDGET_BUTTON(bar, VALUE='Tools' ,/MENU,sensitive=0)

    diva_tool_stats  	= widget_button(tool_menu,uvalue='DIVA_STATS',      $
    	    	    	    value='Statistics...')
    diva_tool_histog   	= widget_button(tool_menu,uvalue='DIVA_HISTOG',	    $
    	    	    	    value='Histogram...')
    
    diva_tool_math  	= widget_button(tool_menu,uvalue='DIVA_MATH',	    $
    	    	    	    value='Image Math...')
    diva_tool_ptc   	= widget_button(tool_menu,uvalue='DIVA_PTC',	    $
    	    	    	    value='2-image P.T.C. ...')
    diva_tool_conc  	= widget_button(tool_menu,uvalue='DIVA_CONC',	    $
    	    	    	    value='Concatenator...')    
    diva_tool_xmtool	= widget_button(tool_menu,uvalue='DIVA_XMTOOL',     $
    	    	    	    value='XMtool...',/separator)
    diva_tool_xloadct   = widget_button(tool_menu,uvalue='DIVA_XLOADCT',    $
    	    	    	    value='XLoadCT...')
    ;--------------------------------------------------------------------------;
    ;--------function menu list------------------------------------------------;
    func_menu = widget_button(bar,value='Function',/menu,sensitive=0)
    junk = {CW_PDMENU_S, flags:0, name:'' }
    desc = [ { CW_PDMENU_S, 1, 'ROI' },     	                            $ 
             { CW_PDMENU_S, 0, 'Regular' }, 	                            $ 
             { CW_PDMENU_S, 0, 'Irregular' }, 	                            $ 
	     { CW_PDMENU_S, 2, 'Circular' }, 	                            $ 
             { CW_PDMENU_S, 0, 'Zoom' },    	                            $ 
             { CW_PDMENU_S, 1, 'Line' },    	                            $ 
             { CW_PDMENU_S, 0, 'Horz/Vert' }, 	                            $ 
	     { CW_PDMENU_S, 0, 'All col' }, 	                            $ 
	     { CW_PDMENU_S, 0, 'All row' }, 	                            $ 
             { CW_PDMENU_S, 0, 'Any' }]
    
    menu =  CW_PDMENU(func_menu, desc,/mbar,uvalue='FUNCTION')
    ;--------------------------------------------------------------------------;
    
    diva_menus = [edit_menu,view_menu,tool_menu,func_menu]

    ;--------temp menu list----------------------------------------------------;
    temp_menu = WIDGET_BUTTON(bar, VALUE='Temp' ,/MENU)

    diva_tempi_butt     = widget_button(temp_menu,value='image/4',    $
    	    	    	    uvalue='DIVA_TEMPI',sensitive=1)
    diva_tempii_butt     = widget_button(temp_menu,value='image*4',    $
    	    	    	    uvalue='DIVA_TEMPII',sensitive=1)
    ;--------help menu list----------------------------------------------------;
    help_menu=WIDGET_BUTTON(bar,VALUE='Help',/MENU,/help)

    diva_help_help = widget_button(help_menu,value='Help...',  	    	    $
    	    	uvalue='DIVA_HELP')
    diva_help_vers = widget_button(help_menu,value='Version...',  	    $
    	    	uvalue='DIVA_VERS',/separator)
    diva_help_about= widget_button(help_menu,value='About...',  	    $
    	    	uvalue='DIVA_ABOUT')
    ;--------------------------------------------------------------------------;
;------------------------------------------------------------------------------;
;------------tlb mid column base-----------------------------------------------;
tlb_mid_base = widget_base(tlb,/col,sensitive=1,frame=4)

diva_draw_base = widget_base(tlb_mid_base,/col)

;make draw area and info bases
diva_tlb_drawwid = widget_draw(diva_draw_base,/scroll,        	    	    $
    	xsize=tlb_drawwid_size[0],ysize=tlb_drawwid_size[1],frame=6,	    $
	x_scroll_size=tlb_drawwid_size[0],y_scroll_size=tlb_drawwid_size[1])

window,/free,xsize=xsize,ysize=ysize,/pixmap
diva_tlb_pixindex = !d.window

widget_control,tlb,TLB_Set_Title = 'DIVA  --> no image selected'

tlb_info_base=widget_base(diva_draw_base,/row,/frame)

tlb_info_curs_t=widget_text(tlb_info_base,value='0,0',xsize=10)

tlb_info_valu_t=widget_text(tlb_info_base,value='0',xsize=6)

tlb_info_func_label=widget_label(tlb_info_base,value=' Function:')
tlb_info_func_text = widget_text(tlb_info_base,xsize = 16,value = '')			    

tlb_info_size_label=widget_label(tlb_info_base,value=' Size:')
tlb_info_size_text = widget_text(tlb_info_base,xsize = 10,value = '')			    



;------------------------------------------------------------------------------;
;------------tlb rhs column base-----------------------------------------------;
tlb_rhs_base = widget_base(tlb,/col,frame=4,sensitive=0)
tlb_prev_label=widget_label(tlb_rhs_base,value=     	    	    	    $
    	'******   PREVIEW  MODE   ******')
tlb_prev_selected_label_id=widget_label(tlb_rhs_base,value='none',  	    $
    	xsize=diva_prev_xsize)
;------------preview mapped base-----------------------------------------------;
tlb_prev_list_mapped_base=widget_base(tlb_rhs_base,xsize=diva_prev_xsize+10,$
    	/align_center)
;------------single mapped base------------------------------------------------;
tlb_prev_list_sin_base=widget_base(tlb_prev_list_mapped_base,map=1,/col,    $
    	/frame,xsize=diva_prev_xsize+10,/align_center)
tlb_prev_list = widget_list(tlb_prev_list_sin_base,value='wot',     	    $
    	xsize=37,ysize=17,uvalue='DIVA_PREV',/align_left)
;------------multiple mapped base----------------------------------------------;
tlb_prev_list_mul_base=widget_base(tlb_prev_list_mapped_base,map=0,/col,    $
    	/frame,xsize=diva_prev_xsize+10,/align_center)

tlb_prev_mul_info_label=widget_label(tlb_prev_list_mul_base,	    	    $
    	value='blah',xsize=diva_prev_xsize)
	
tlb_goback_butt = widget_button(tlb_prev_list_mul_base, 	    	    $
    	value='Back to Main list',uvalue='PREV_BACK')

tlb_prev_list_mul = widget_list(tlb_prev_list_mul_base,value='back...',     $
    	xsize=37,ysize=13,uvalue='DIVA_MULT',/align_left)
;------------adaptive mapped base----------------------------------------------;
tlb_adapt_list_base=widget_base(tlb_prev_list_mapped_base,map=0,/col,       $
    	/frame,xsize=diva_prev_xsize+10,/align_center)

tlb_adapt_info_label=widget_label(tlb_adapt_list_base,	    	    	    $
    	value='blah',xsize=diva_prev_xsize+10)

tlb_adapt_onoff_base=widget_base(tlb_adapt_list_base,/row,  	    	    $
    	xsize=diva_prev_xsize-4,/frame,/align_left)
tlb_adapt_onoff_label=widget_label(tlb_adapt_onoff_base,  	    	    $
    	value='Timer:')
tlb_adapt_exc_base=widget_base(tlb_adapt_onoff_base,/row,/exclusive,	    $
    	/align_center)
tlb_adapt_on_button=widget_button(tlb_adapt_exc_base,value='On ',	    $
    	uvalue='AD_ON')
tlb_adapt_off_button=widget_button(tlb_adapt_exc_base,value='Pause',        $
    	uvalue='AD_OFF')
tlb_adapt_animate_lhs = widget_label(tlb_adapt_onoff_base,value='   [')
tlb_adapt_animate = widget_label(tlb_adapt_onoff_base,value='*')
tlb_adapt_animate_rhs = widget_label(tlb_adapt_onoff_base,value=']')


tlb_adapt_auto_onoff_base=widget_base(tlb_adapt_list_base,/row,     	    $
    	xsize=diva_prev_xsize-4,/frame,/align_left)
tlb_adapt_auto_onoff_label=widget_label(tlb_adapt_auto_onoff_base,  	    $
    	value='Auto-Load:    ')
tlb_adapt_auto_exc_base=widget_base(tlb_adapt_auto_onoff_base,/row,/exclusive)
tlb_adapt_auto_on_button=widget_button(tlb_adapt_auto_exc_base,value='On ', $
    	uvalue='AD_AUTO_ON')
tlb_adapt_auto_off_button=widget_button(tlb_adapt_auto_exc_base,value='Off',$
    	uvalue='AD_AUTO_OFF')

tlb_adapt_list=widget_list(tlb_adapt_list_base,xsize=37,ysize=10,    	    $
    	uvalue='AD_LIST',/align_left)

;these buttons are reset when entering adaptive mode
widget_control,tlb_adapt_on_button,set_button=1
widget_control,tlb_adapt_auto_on_button,set_button=1
diva_ad_buttons = [tlb_adapt_on_button,tlb_adapt_auto_on_button]

;------------preview/adaptive mode info & button base--------------------------;
tlb_prev_info_base=widget_base(tlb_rhs_base,/frame,/col,/align_center,      $
    	xsize=diva_prev_xsize+6)
tlb_prev_info_name=widget_label(tlb_prev_info_base,value='none',    	    $
    	xsize=diva_prev_xsize)
tlb_prev_info_size=widget_label(tlb_prev_info_base, 	    	    	    $
    	value='0 bytes',xsize=diva_prev_xsize)
tlb_prev_info_dims=widget_label(tlb_prev_info_base, 	    	    	    $
    	value='0 x 0 x 0 pixels',xsize=diva_prev_xsize)
prev_info = [tlb_prev_info_name,tlb_prev_info_size,tlb_prev_info_dims]
;------------load as current image button--------------------------------------;
tlb_prev_load_butt=widget_button(tlb_rhs_base,sensitive=0,ysize=50,   	    $
    	value='Load (as current image)',uvalue='PREV_LOAD', 	    	    $
	/align_center,/frame,xsize=diva_prev_xsize+6)

;------------preview/adaptive button base--------------------------------------;
tlb_prev_butt_base = widget_base(tlb_rhs_base,/col,/frame,/align_center,    $
    	xsize=diva_prev_xsize+6)

tlb_prev_top_butt_base=widget_base(tlb_prev_butt_base,/row,/align_center)
tlb_prev_resz_butt=widget_button(tlb_prev_top_butt_base,sensitive=0,	    $
    	value=' All image... ',uvalue='PREV_ALL')


tlb_viewlog_butt = widget_button(tlb_prev_top_butt_base,sensitive=0,	    $
    	value=	' View LOG file ',uvalue='PREV_VLOG')
;    	    	' View FITS hdr '

tlb_prev_bot_butt_base=widget_base(tlb_prev_butt_base,/row,/align_center)
tlb_prev_remv_butt=widget_button(tlb_prev_bot_butt_base,sensitive=0,	    $
    	value=' Remove entry ',uvalue='PREV_REMV')
tlb_prev_dummy_butt=widget_button(tlb_prev_bot_butt_base,sensitive=0,	    $
    	value=' Dummy ',uvalue='DUMMY')
tlb_prev_dummy_butt=widget_button(tlb_prev_bot_butt_base,sensitive=0,	    $
    	value=' Dummy ',uvalue='DUMMY')


prev_buttons = [tlb_prev_load_butt,tlb_prev_resz_butt,tlb_prev_remv_butt]

tlb_prev_drawwid=widget_draw(tlb_rhs_base,xsize=diva_prev_xsize,    	    $
    	ysize=diva_prev_xsize,frame=6)
window,/free,xsize=diva_prev_xsize,ysize=diva_prev_xsize,/pixmap
tlb_prev_pixid=!d.window
;------------------------------------------------------------------------------;
;-------------------realise the widget-----------------------------------------;
WIDGET_CONTROL, tlb, /REALIZE		
loadct,0
tvlct,r,g,b,/get

;call 'pdiva_draw_init' function to initialise 'pdiva_draw' structure
pdiva_draw=pdiva_draw_init(tlb,tlb_mid_base,diva_draw_base,  	    	    $
    	    	    	diva_tlb_drawwid,diva_tlb_pixindex,r,g,b,   	    $
			!d.name,tlb_drawwid_size,tlb_prev_drawwid,  	    $
			tlb_prev_pixid)
			
info = Ptr_New({  tlb     	    	    : tlb,    	    	    	    $
		  diva_file_info   	    : Ptr_New(),     	    	    $
		  diva_mult_image   	    : Ptr_New(),    	    	    $
		  pdiva_draw	    	    : pdiva_draw,    	    	    $
    	    	  diva_current_prev_image   : {diva_image}, 	    	    $
		  os_name 	    	    : !d.name, 	    	    	    $
		  def_path	    	    : def_path,     	    	    $
		  def_file  	    	    : def_file,     	    	    $
		  tlb_prev_list     	    : tlb_prev_list, 	    	    $
		  tlb_prev_list_mul 	    : tlb_prev_list_mul,    	    $
		  tlb_prev_list_sin_base    : tlb_prev_list_sin_base,	    $
		  tlb_prev_list_mul_base    : tlb_prev_list_mul_base,	    $
		  tlb_adapt_list    	    : tlb_adapt_list,	    	    $
		  tlb_adapt_list_base	    : tlb_adapt_list_base,  	    $
		  tlb_prev_selected_label_id: tlb_prev_selected_label_id,   $
		  tlb_rhs_base	    	    : tlb_rhs_base,  	    	    $
		  prev_buttons	    	    : prev_buttons,  	    	    $
		  prev_info 	    	    : prev_info,    	    	    $
		  diva_prev_index	    : 0,     	    	    	    $
		  diva_prev_mult_index	    : 0,    	    	    	    $
		  tlb_prev_mul_info_label   : tlb_prev_mul_info_label,	    $
		  diva_display_logbase	    : 0L,    	    	    	    $
		  diva_adapt_mode_on	    : 0,    	    	    	    $
		  tlb_prev_label    	    : tlb_prev_label,	    	    $
		  diva_ad_new_list  	    : strarr(100),  	    	    $
		  diva_ad_list_index	    : 0,     	    	    	    $
		  diva_ad_pick_file 	    : ['',''],	    	    	    $
		  tlb_adapt_info_label	    : tlb_adapt_info_label,  	    $
		  diva_ad_buttons   	    : diva_ad_buttons,	    	    $
		  diva_time_events_on	    : 1,	    	    	    $
		  number_images     	    : 0, 	    	    	    $
		  diva_ad_autoload_on	    : 1,     	    	    	    $
		  tlb_ad_timer	    	    : [0.5,0.],   	    	    $
		  tlb_adapt_animate 	    : tlb_adapt_animate,     	    $
		  diva_prev_xsize   	    : diva_prev_xsize,	    	    $
		  diva_file_buttids 	    : diva_file_buttids,    	    $
		  diva_menus 	    	    : diva_menus,    	    	    $
		  tlb_viewlog_butt  	    : tlb_viewlog_butt	    	    $
    	      })

;;call 'diva_draw_no_image' to make draw area base with NO image
;diva_draw_no_image,pdiva_draw

widget_control,tlb,set_uvalue=info,/no_copy

;------------Register this program and set up the event loop-------------------;
XManager, "diva", tlb, EVENT_HANDLER = "diva_ev",cleanup='diva_cleanup'
END ;end of "diva" main routine------------------------------------------------;
;------------------------------------------------------------------------------;
pro diva_cleanup,tlb

widget_control,tlb,get_uvalue=info

IF (ptr_valid(info) eq 1) THEN BEGIN
    Ptr_Free,(*info).diva_file_info
    if (Ptr_Valid((*(*info).pdiva_draw).diva_line_info) eq 1) then begin
    	stop
    end
    if (Ptr_Valid((*(*info).pdiva_draw).diva_zoom_info) eq 1) then begin
    	stop
    end
    if (Ptr_Valid((*(*info).pdiva_draw).diva_roi_info) eq 1) then begin
    	stop
    end
    if (Ptr_Valid((*(*info).pdiva_draw).diva_image_ops) eq 1) then begin
    	stop
    end
    if (Ptr_Valid((*(*info).pdiva_draw).diva_image_conc) eq 1) then begin
    	stop
    end
    if (Ptr_Valid((*info).diva_current_prev_image.pimage) eq 1) then begin
    	Ptr_Free,(*info).diva_current_prev_image.pimage
	Ptr_Free,(*info).diva_current_prev_image.o_pimage
	Ptr_Free,(*info).diva_current_prev_image.p_pimage
    end
    if (Ptr_Valid((*(*info).pdiva_draw).diva_current_image.pimage) eq 1) then begin
    	Ptr_Free,(*(*info).pdiva_draw).diva_current_image.pimage
	Ptr_Free,(*(*info).pdiva_draw).diva_current_image.p_pimage
	Ptr_Free,(*(*info).pdiva_draw).diva_current_image.o_pimage
    end
    Ptr_free,(*info).pdiva_draw
    Ptr_Free,info
ENDIF
help,/heap

end ;of 'diva_cleanup' procedure-----------------------------------------------;
;------------------------------------------------------------------------------;
