Viewing contents of file '../idllib/contrib/tappin/graffer/graff_ch_dset.pro'
;+
; GRAFF_CH_DSET
;	Change data set
;
; Usage:
;	graff_ch_dset, pdefs
;
; Argument:
;	pdefs	struct	in/out	The plot definition structure.
;
; History:
;	Original (essentially a widget version of graff_dset): 7/9/95; SJT
;	Add mouse-editing default option: 13/8/97; SJT
;-

function Grf_ch_event, event

base = widget_info(event.top, /child)
widget_control, base, get_uvalue = uv, /no_copy
widget_control, event.id, get_uvalue = but

iexit = 0
case (but) of
    'POP': begin
        widget_control, event.top, /show
        widget_control, event.id, timer = 2.0
    end
    
    'CHOOSE': begin
        uv.select = event.index
        iexit = 1
    end
    
    'DONT': iexit = -1
end

widget_control, base, set_uvalue = uv, /no_copy

return, {id:event.handler, top:event.top, handler:event.handler, $
         Exit:iexit}
end






pro Graff_ch_dset, pdefs

handle_value, pdefs.data, data, /no_copy

tc = ['F(XY)', 'PF', 'F(Y)', 'F(X)', 'XY', 'XYE', 'XYEE', 'XYF', 'XYFF', $
      'XYFE', 'XYFEE', 'XYFFE', 'XYFFEE', 'Z']

dlist = [data.descript, '<New>']

nlist = string(indgen(n_elements(dlist))+1, $
               format = "(I3,')')")

llist = string([data.ndata, 0], format = "(' <',I0,'> ')")
lll = max(strlen(llist))
fmt = "(A"+string(lll, format = "(I0)")+")"
llist = string(llist, format = fmt)

clist = replicate(' ', n_elements(llist))
clist(pdefs.cset) = '*'

nlist = nlist+llist+clist

nlist = nlist+string([tc(data.type+4), ''], format = "(A6, ' - ')")

dlist = nlist+dlist

widget_control, pdefs.ids.graffer, sensitive = 0

tlb = widget_base(title = 'Graffer data set select', group = $
                  pdefs.ids.graffer, resource = 'Graffer')
base = widget_base(tlb, /column)

curr = widget_label(base, value = 'Data Sets', uvalue = 'POP')
junk = widget_list(base, value = dlist, uvalue = 'CHOOSE',  $
                   ysize = (12 < n_elements(dlist)))

junk = widget_button(base, value = 'Cancel', uvalue = 'DONT')

widget_control, base, set_uvalue = {dlist:dlist,  $
                                    Select:pdefs.cset}, $
  event_func = 'grf_ch_event'

widget_control, tlb, /real
if (pdefs.popflag) then widget_control, curr, timer = 2.

;			DIY widget management here

repeat ev = widget_event(base) until ev.exit ne 0

widget_control, base, get_uvalue = uv, /no_copy
widget_control, tlb, /destroy
widget_control, pdefs.ids.graffer, sensitive = 1

if (ev.exit eq -1) then begin
    handle_value, pdefs.data, data, /no_copy, /set
    return
endif

pdefs.cset = uv.select
    
if (pdefs.cset eq pdefs.nsets) then begin ; Need to extend the data
                                ; structure
        
    data = [data, {graff_data, $
                   Ndata:    0l, $
                   Ndata2:   0l, $ ; ONly used in 2D Dss
                   Type:     0, $
                   Mode:     0, $
                   Xydata:   handle_create(), $
                   Descript: "", $
                   Pline:    1, $
                   Psym:     0, $
                   Symsize:  1., $
                   Line:     0, $
                   Colour:   1, $
                   Thick:    1, $
                   Zopts:    {graff_2d, $
                              Format:    0, $
                              N_levels:  -6, $
                              Levels:    fltarr(30), $
                              N_cols:    1, $
                              Colours:   intarr(30)+1, $
                              N_sty:	  1, $
                              Style:     intarr(30), $
                              N_thick:   1, $
                              Thick:     intarr(30)+1, $
                              Range:     fltarr(2), $
                              Pxsize:    0.5, $
                              Label:     0, $
                              Fill:      0b}, $
                   Sort:     0b, $
                   Noclip:   0b, $
                   Medit:    pdefs.opts.mouse}]
    
    handle_value, data(pdefs.cset).xydata, fltarr(2, 2), /set
    
    pdefs.nsets = pdefs.nsets+1
endif

handle_value, pdefs.data, data, /no_copy, /set

graff_set_vals, pdefs, /set_only

end