Viewing contents of file '../idllib/contrib/tappin/graffer/gr_ds_pulldown.pro'
;+
; GR_DS_PULLDOWN
; Dataset selection pulldown
;
; Usage:
; gr_ds_pulldown, base
;
; Argument:
; base long input The ID of the parent base.
;
; History:
; Extracted from GRAFFER: 9/12/96; SJT
; Move event handler here: 17/1/97; SJT
; Reduce size by putting erase & delete under "Other": 27/1/97; SJT
; Add mouse-editing default option: 13/8/97; SJT
;-
pro Gr_dss_event, event
base = widget_info(/child, event.top)
widget_control, base, get_uvalue = pdefs, /no_copy
idraw_flag = 1
ichange = 1b
track_flag = strpos(tag_names(event, /struct), 'TRACK') ne -1
nch = 1
if (track_flag) then begin
idraw_flag = 0
ichange = 0b
if (event.enter eq 0) then begin
graff_msg, pdefs.ids.hlptxt, ''
goto, miss_case
endif
endif
case event.value of
'Other': graff_msg, pdefs.ids.hlptxt, 'More complex dataset ' + $
'operations'
'Other/Select...': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Select current data set' $
else begin
graff_ch_dset, pdefs
ichange = 0b
idraw_flag = 0
end
'Other/Merge...': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Merge two data sets' $
else begin
gr_app_w, pdefs
nch = 15
end
'Other/Sort...': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Change the order of the data sets' $
else begin
graff_sort_dss, pdefs
nch = 15
end
'Other/Write...': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Save current dataset to a file' $
else begin
dir = pdefs.ds_dir
wname = strmid(pdefs.name, 0, rstrpos(pdefs.name, '.'))+ $
string(pdefs.cset, format = "('_',I0,'.dat')")
fc = graff_fname(pdefs.ids.graffer, wname, dir, $
pdefs.popflag)
if (fc eq '') then graff_msg, pdefs.ids.message, $
'No save file specified' $
else begin
gr_write_ds, pdefs, dir+fc
pdefs.ds_dir = dir
endelse
ichange = 0b
idraw_flag = 0
end
'Next':if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Make next data set current' $
else begin
pdefs.cset = (pdefs.cset+1) mod pdefs.nsets
graff_set_vals, pdefs, /set_only
ichange = 0b
idraw_flag = 0
end
'Previous':if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Make previous data set current' $
else begin
pdefs.cset = pdefs.cset-1
if (pdefs.cset eq -1) then pdefs.cset = pdefs.nsets-1
graff_set_vals, pdefs, /set_only
ichange = 0b
idraw_flag = 0
end
'New':if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, $
'Create a new data set and make it current' $
else begin
pdefs.cset = pdefs.nsets
pdefs.nsets = pdefs.nsets+1
handle_value, pdefs.data, data, /no_copy
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
handle_value, pdefs.data, data, /no_copy, /set
graff_set_vals, pdefs, /set_only
ichange = 0b
idraw_flag = 0
end
'Other/Erase': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Erase the values in the current ' + $
'data set' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).ndata = 0
data(pdefs.cset).type = 0
handle_value, data(pdefs.cset).xydata, fltarr(2, 2), /set
handle_value, pdefs.data, data, /no_copy, /set
end
'Other/Delete': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Delete the current data set' $
else graff_dsdel, pdefs
endcase
if (ichange) then begin
handle_value, pdefs.data, data, /no_copy
if (data(pdefs.cset).type eq 9 or $
data(pdefs.cset).type eq -4) then begin
widget_control, pdefs.ids.plopts(0), map = 0
widget_control, pdefs.ids.plopts(1), map = 1
endif else begin
widget_control, pdefs.ids.plopts(1), map = 0
widget_control, pdefs.ids.plopts(0), map = 1
endelse
handle_value, pdefs.data, data, /no_copy, /set
endif
if (idraw_flag and (pdefs.opts.update eq 0)) then gr_plot_object, pdefs
if (ichange) then begin
pdefs.chflag = 1b
pdefs.transient.changes = pdefs.transient.changes+nch
if (pdefs.transient.changes gt 20) then begin
gr_bin_save, pdefs, /auto
if (pdefs.opts.update eq 1) then gr_plot_object, pdefs
endif
endif
widget_control, pdefs.ids.chtick, map = pdefs.chflag
Miss_case:
widget_control, base, set_uvalue = pdefs, /no_copy
end
pro Gr_ds_pulldown, base
dsops = [{cw_pdmenu_s, 0, 'Next'}, $
{cw_pdmenu_s, 0, 'Previous'}, $
{cw_pdmenu_s, 0, 'New'}, $
{cw_pdmenu_s, 3, 'Other'}, $
{cw_pdmenu_s, 0, 'Select...'}, $
{cw_pdmenu_s, 0, 'Merge...'}, $
{cw_pdmenu_s, 0, 'Sort...'}, $
{cw_pdmenu_s, 0, 'Erase'}, $
{cw_pdmenu_s, 0, 'Delete'}, $
{cw_pdmenu_s, 2, 'Write...'}]
jb = widget_base(base, /row, xpad = 1, ypad = 1, space = 1, event_pro = $
'gr_dss_event', /align_center)
junk = cw_pdtmenu(jb, dsops, uvalue = 'DSOPS', /track, $
/return_full_name, delimiter = '/', /row)
end