;+
; Project     : SOHO - CDS     
;                   
; Name        : TP_DISP_RAST
;               
; Purpose     : Defines display of raster parameters.
;               
; Explanation : Creates the widgets which form the window within which
;               the raster parameters are displayed.
;               
; Use         : tp_disp_rast, status
;    
; Inputs      : None
;               
; Opt. Inputs : None
;                        
; Outputs     : status - 1 if entries found in database, 0 else.
;               
; Opt. Outputs: None
;               
; Keywords    : None
;
; Calls       : None
;               
; Restrictions: For use with TPLAN
;               
; Side effects: None
;               
; Category    : Planning, technical
;               
; Prev. Hist. : None
;
; Written     : C D Pike, RAL, 23-Aug-94
;               
; Modified    : Include detector specification.  CDP, 6-Sep-94
;               Handle empty databases.  CDP, 28-Nov-94
;               Add status return.  CDP, 6-Dec-94
;               Added handling of data windows.  CDP, 21-Feb-95
;               Added facility to update database descriptions. CDP, 27-Nov-95
;               Fix ID format size.   CDP, 3-Feb-97
;               Fixed bug when selecting rasters from database. CDP, 21-Jul-97
;
; Version     : Version 8, 21-Jul-97
;-            

pro tp_d_r_event, ev

;
;  common for data and widgets ids
;
@tplan_com

;
;  type of event?
;
type = tag_names(ev,/structure)


;
;  Exit/Done button?
;
if type eq 'WIDGET_BUTTON' then begin
   tp_recalc_dew,' '
   widget_control, fr_base, /destroy
endif

;
;  A user selection from the list?
;
if type eq 'WIDGET_LIST' then begin

  widget_control,ev.id,get_uvalue=uservalue
  if n_elements(uservalue) eq 0  then uservalue = ''
  prefix = strmid(uservalue,0,2)
  case prefix(0) of
     'f_': begin
             widget_control,vr_base,set_val=' Searching .......'
             list_f_raster, fr, num, detector=tp_obs.raster_p.detector
             id_wanted = fr(ev.index).ras_id
             widget_control, wrv_info_2, set_val=' '
             tp_obs.raster_v.rv_desc = ''
             tp_obs.raster_v.ras_var = 0
             raster_p_std = 1
             get_f_raster,id_wanted,raster
             chosen_frast = id_wanted
             copy_struct, raster, tp_obs, /recur_to
             widget_control, base, /hourglass             
             load_tp_struct, tp_obs
             tp_recalc_dew,' '

             list_v_raster,chosen_frast,ras,num
             if num gt 0 then begin
                text = strarr(num)
                for i=0,num-1 do begin
                  text(i) = string('#',i+1,' - ',form='(a1,i3,a3)')+$
                                                                 ras(i).rv_desc
                endfor
                widget_control, vr_base,set_value=text,set_uval='v_'+text
             endif else begin
                widget_control,vr_base,set_value='No variations for that raster.'
             endelse
           end
     'v_': begin
             raster_v_std = 1
             raster_ll_std = 1
             get_raster,chosen_frast,ev.index+1,raster
             copy_struct, raster, tp_obs, /recur_to
;
;  if ll_id is zero then no lines defined.  
;
             if raster.ll_id gt 0 then begin
                get_linelist,raster.ll_id,db_ll
                tp_db2int, db_ll, raster
             endif 

;
;  was a data window list defined?
;
             if tp_obs.raster_v.dw_id ge 0 then begin
                get_datawin,tp_obs.raster_v.dw_id,dw
                n = where(dw.wins.win_def(2) gt 0)
                if n(0) ge 0 then begin
                   tp_obs.data_win.n_windows = n_elements(n)
                   tp_obs.data_win2.win_def(*)  = 0
                   tp_obs.data_win2.win_name    = ' '
                   for i=0,n_elements(n)-1 do begin
                      tp_obs.data_win2(i).win_def(*)  = dw.wins(i).win_def(*)
                      tp_obs.data_win2(i).win_name    = dw.wins(i).win_name
                   endfor
                endif
             endif
             widget_control, base, /hourglass   
             load_tp_struct,tp_obs
             tp_recalc_dew,' '
;
;  if requested, update the descriptions
;
             if !desc_update gt 0 then begin
                print,'Updating descriptions for:'
                dbopen,'raster',1
                stext = 'ras_id='+strtrim(string(tp_obs.raster_p.ras_id),2)
                print,stext
                val =  dbfind(stext)
                if !err ne 0 then begin
                   dbupdate,val,'ras_desc',tp_obs.raster_p.ras_desc
                endif
                dbclose

                dbopen,'raster_var',1
                stext = 'ras_id='+strtrim(string(tp_obs.raster_p.ras_id),2)
                stext = stext+',ras_var='+$
                             strtrim(string(tp_obs.raster_v.ras_var),2)
                print,stext
                val =  dbfind(stext)
                if !err ne 0 then begin
                   dbupdate,val,'rv_desc',tp_obs.raster_v.rv_desc 
                endif
                dbclose

                dbopen,'datawin',1
                stext = 'dw_id='+strtrim(string(tp_obs.raster_v.dw_id),2)
                print,stext
                val =  dbfind(stext)
                if !err ne 0 then begin
                   dbupdate,val,'dw_desc',tp_obs.data_win.dw_desc 
                endif
               dbclose

             endif
           end
     else:
  endcase 
endif

end


PRO tp_disp_rast, status

;
;  common for data and widgets ids
;                       
@tplan_com

;
;  guard against trigger happy users
;
if xregistered('tp_disp_rast') then begin
  widget_control,fr_base,map=1
  status = 1
  return
endif

;
;  retrieve entries from data base
;
list_f_raster, fr, num, detector=tp_obs.raster_p.detector

;
;  only proceed if there is something to display
;
if num gt 0 then begin
   frids = fr.ras_id
   
;
;  create main base
;
   if tp_obs.raster_p.detector eq 'N' then begin
      text = 'NIS raster parameters'
   endif else begin
      text = 'GIS raster parameters'
   endelse

   fr_base = WIDGET_BASE(title=text,/FRAME,/COLUMN,$
                         group_leader = base, xoffset=500,yoffset=500)


;
;  'Done' button to exit
;
   doneid = widget_button(fr_base, value='Done', uvalue='Done')

;
;  tart up output
;
   text = strarr(num)
   for i=0,num-1 do begin
      text(i) = string('#',frids(i),' - ',form='(a1,i3,a3)')+fr(i).ras_desc
   endfor

;
;  widgets for display of primary raster details
;
   dummyt = widget_label(fr_base,/frame,$
                 value='Select from these fundamental rasters')
   dummyf = widget_list(fr_base,value=text,uvalue='f_'+text,ysize=(num+2 < 20))


;
; and for variations
;

   dummyt = widget_label(fr_base,/frame,$
                         value='Select from these raster variations (optional)')
   vr_base = widget_list(fr_base,ysize=10)


;
;  make it all appear
;
   widget_control, fr_base, /realize
   status = 1
endif else begin
   flash_msg,info_line,'No fundamental rasters in database.'
   status = 0
endelse


end
