Viewing contents of file '../idllib/contrib/tappin/graffer/gr_ds_menus.pro'
;+
; GR_DS_MENUS
; Make the menu to set the properties of an XY dataset
;
; Usage:
; gr_ds_menus, optbb, pdefs
;
; Arguments:
; optbb long input The widget ID of the parent base
; pdefs struct in/out The Graffer data & control structure.
;
; History:
; Farmed out from GRAFFER to facilitate maintenance: 6/12/96;
; SJT
; Moved event handler in: 17/1/97; SJT
; Modify for extended symbol definitions + add compact key:
; 20/1/97; SJT
; Add CAPTURE key to entry boxes, remove compact key: 6/2/97; SJT
;-
pro Gr_dsp_event, event
widget_control, event.id, get_uvalue = object
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
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 object of
'PSYM': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Select plotting symbol for current ' + $
'data set' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).psym = event.value
handle_value, pdefs.data, data, /set, /no_copy
end
'PLINE': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Select joining style for current ' + $
'data set' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).pline = event.value
handle_value, pdefs.data, data, /set, /no_copy
end
'SSIZE': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Set size for plot symbol ' + $
'in current data set (floating point)' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).symsize = event.value
handle_value, pdefs.data, data, /no_copy, /set
end
'COLOUR': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Select colour for current data set' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).colour = event.value-1
handle_value, pdefs.data, data, /set, /no_copy
end
'STYLE': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Select line style for current data set' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).line = event.value
handle_value, pdefs.data, data, /set, /no_copy
end
'THICK': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Set line thickness for current ' + $
'data set (integer)' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).thick = event.value
handle_value, pdefs.data, data, /set, /no_copy
end
'POLAR': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Select rectangular or polar mode' $
else begin
handle_value, pdefs.data, data, /no_copy
data(pdefs.cset).mode = event.value
handle_value, pdefs.data, data, /no_copy, /set
end
'XTRA': begin
val = str_sep(event.value, '.')
if (n_elements(val) eq 1) then graff_msg, pdefs.ids.hlptxt, $
'Set other dataset options' $
else case val(1) of
'Sort X axis': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Toggle sorting of X axis' + $
' values before plotting current data set' $
else begin
handle_value, pdefs.data, data, /no_copy
if (val(2) eq 'On') then data(pdefs.cset).sort = 1b $
else data(pdefs.cset).sort = 0b
handle_value, pdefs.data, data, /no_copy, /set
endelse
'Clip to box': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Toggle clipping of' + $
' current dataset to plot axes' $
else begin
handle_value, pdefs.data, data, /no_copy
if (val(2) eq 'On') then data(pdefs.cset).noclip = 0b $
else data(pdefs.cset).noclip = 1b
handle_value, pdefs.data, data, /no_copy, /set
endelse
'Mouse editing': if (track_flag) then $
graff_msg, pdefs.ids.hlptxt, 'Toggle use of mouse to ' + $
'edit dataset' $
else begin
handle_value, pdefs.data, data, /no_copy
if (val(2) eq 'Enabled') then data(pdefs.cset).medit = 1b $
else data(pdefs.cset).medit = 0b
widget_control, pdefs.ids.draw, get_uvalue = state
if (state eq 'DRAW') then widget_control, $
pdefs.ids.draw, draw_button_events = $
data(pdefs.cset).medit, track = $
data(pdefs.cset).medit
handle_value, pdefs.data, data, /no_copy, /set
endelse
endcase
end
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+1
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_menus, optbb, pdefs
common Gr_psym_maps, psym_bm
pdefs.ids.plopts(0) = widget_base(optbb, /column, xpad = 1, ypad = 1, $
space = 1, event_pro = 'gr_dsp_event')
jjb = widget_base(pdefs.ids.plopts(0), /row, xpad = 1, ypad = 1, space = 1)
pdefs.ids.line = cw_bbselector(jjb, ['____', $
'....', $
'_ _ ', $
'_._.', $
'_...', $
'__ '], $
set_value = 0, uvalue = 'STYLE', $
label_left = 'Style:', /track)
pdefs.ids.thick = graff_enter(jjb, /int, /all_ev, xsize = 2, value = $
1, uvalue = 'THICK', format = "(I2)", $
label = 'Thick:', /track, /capture)
; Change symbol size
pdefs.ids.symsize = graff_enter(jjb, /float, /all_ev, value = '1.0', $
uvalue = 'SSIZE', xsize = 5, label = $
'Size:', format = "(f5.1)", $
/track, /capture)
; Colour, linestyle, thickness etc.
col_list = ['Omit', $
'White (bg)', $
'Black', $
'Red', $
'Green', $
'Blue', $
'Cyan', $
'Magenta', $
'Yellow', $
'Orange', $
'#7f ff 00', $
'#00 ff 7f', $
'#00 7f ff', $
'#7f 00 ff', $
'Mauve', $
'Dark Grey', $
'Light Grey']
pdefs.ids.colour = cw_bbselector(jjb, col_list, uvalue = 'COLOUR', $
set_value = 1, label_left = $
'Colour:', /track)
jjb = widget_base(pdefs.ids.plopts(0), /row, xpad = 1, ypad = 1, $
space = 1)
if (n_elements(psym_bm) eq 0) then gr_psym_bitm
pdefs.ids.psym = cw_bbselector(jjb, psym_bm, uvalue = 'PSYM', $
label_left = 'Symbol:', /track)
pdefs.ids.pline = cw_bbselector(jjb, ['None', 'Line', 'Histo'], uvalue $
= 'PLINE', label_left = 'Join:', $
/track)
pdefs.ids.mode = cw_bbselector(jjb, ['Rect', 'Polar', $
'Polar (°)'], uvalue = $
'POLAR', set_value = 0, /track, $
label_left = 'Coords:')
xtras = [{CW_PDSMENU_S, flags:3, name:'Extras', state:0b}, $
{cw_pdsmenu_s, 1, 'Sort X axis', 0b}, $
{cw_pdsmenu_s, 0, 'Off', 0b}, $
{cw_pdsmenu_s, 2, 'On', 0b}, $
{cw_pdsmenu_s, 1, 'Clip to box', 0b}, $
{cw_pdsmenu_s, 0, 'On', 0b}, $
{cw_pdsmenu_s, 2, 'Off', 0b}, $
{cw_pdsmenu_s, 3, 'Mouse editing', 0b}, $
{cw_pdsmenu_s, 0, 'Disabled', 0b}, $
{cw_pdsmenu_s, 2, 'Enabled', 0b}]
junk = cw_pdtsmenu(jjb, xtras, /return_full_name, uvalue = 'XTRA', $
/track, /states, ids = buts)
xpos = [1, 4, 7]
pdefs.ids.dsxtra = buts(xpos)
;;pdefs.ids.clip = cw_bbselector(jjb, ['Yes', 'No'], uvalue = $
;; 'CLIP', set_value = 0, label_left = $
;; 'Clip?:', /track)
;;pdefs.ids.sort = cw_bbselector(jjb, ['No', 'Yes'], uvalue = $
;; 'SORT', set_value = 0, label_left = $
;; 'Sort X?:', /track)
end