Viewing contents of file '../idllib/contrib/tappin/graffer/gr_cont_menus.pro'
;+
; GR_CONT_MENU
; Make the menu to set the properties of a contoured ds.
;
; Usage:
; gr_cont_menu, pdefs, data
;
; Arguments:
; pdefs struct input The Graffer data & control structure.
; data struct in/out The data structure extracted from pdefs
; History:
; Original: 9/12/96; SJT
; Sort the levels: 16/5/97; SJT
;-
function Cont_event, event
widget_control, event.id, get_uvalue = but
widget_control, event.handler, get_uvalue = uv, /no_copy
iexit = 0
track_flag = strpos(tag_names(event, /struct), 'TRACK') ne -1
if (track_flag) then begin
if (event.enter eq 0) then begin
graff_msg, uv.msg, ''
goto, miss_case
endif
endif
case but of
'DO': if (track_flag) then $
graff_msg, uv.msg, 'Exit this menu and apply changes' $
else begin
iexit = 1
if (uv.zopts.n_levels gt 0) then begin
widget_control, uv.levels, get_value = levels
uv.zopts.levels = levels(sort(levels))
uv.zopts.n_levels = n_elements(levels)
endif else begin
widget_control, uv.nlevels, get_value = n_levels
uv.zopts.n_levels = -n_levels
endelse
widget_control, uv.colour, get_value = col
uv.zopts.colours = col
uv.zopts.n_cols = n_elements(col)
widget_control, uv.thick, get_value = thk
uv.zopts.thick = thk
uv.zopts.n_thick = n_elements(thk)
widget_control, uv.style, get_value = sty
uv.zopts.style = sty
uv.zopts.n_sty = n_elements(sty)
widget_control, uv.label, get_value = labi
uv.zopts.label = labi
end
'CANCEL': if (track_flag) then $
graff_msg, uv.msg, 'Exit this menu and abandon changes' $
else iexit = -1
'CMODE': if (track_flag) then $
graff_msg, uv.msg, 'Toggle explicit/automatic contour levels' $
else begin
uv.zopts.n_levels = 2*event.value-1
widget_control, uv.levels, sensitive = event.value eq 1
widget_control, uv.nlevels, sensitive = event.value eq 0
end
'LEVEL': if (track_flag) then $
graff_msg, uv.msg, 'Set explicit contour levels'
'NLEVEL': if (track_flag) then $
graff_msg, uv.msg, 'Set number of automatic levels'
'COLOUR': if (track_flag) then $
graff_msg, uv.msg, 'Set contour colours'
'THICK': if (track_flag) then $
graff_msg, uv.msg, 'Set contour thicknesses'
'STYLE': if (track_flag) then $
graff_msg, uv.msg, 'Set contour line styles'
'LABEL': if (track_flag) then $
graff_msg, uv.msg, 'Set contour labelling interval'
'FILL': if (track_flag) then $
graff_msg, uv.msg, 'Toggle filled/outline contours' $
else uv.zopts.fill = event.value
'POP': begin
widget_control, event.top, /show
widget_control, event.id, timer = 2
end
endcase
Miss_case:
widget_control, event.handler, set_uvalue = uv, /no_copy
return, { $
Id:event.id, $
Top:event.top, $
Handler:0l, $
Exited:iexit $
}
end
pro Gr_cont_menus, pdefs, data
i = pdefs.cset
widget_control, pdefs.ids.graffer, sensitive = 0
tlb = widget_base(title = 'Graffer Contour Options', group_leader = $
pdefs.ids.graffer, resource = 'Graffer')
base = widget_base(tlb, /column, xpad = 1, ypad = 1, space = 1)
obase = widget_base(base, /row, xpad = 1, ypad = 1, space = 1)
jb = widget_base(obase, /column, xpad = 1, ypad = 1, space = 1, /frame)
iexpl = data(i).zopts.n_levels gt 0
junk = cw_bbselector(jb, ['Automatic levels', 'Explicit levels'], $
uvalue = 'CMODE', set_value = iexpl, /track)
if (iexpl) then l0 = data(i).zopts.levels(0:data(i).zopts.n_levels-1) $
else l0 = 0
c_levels = graff_enter(jb, /float, /array, /track, uvalue = $
'LEVEL', value = l0, format = $
"(g11.4)", xsize = 12, ysize = 6, $ $
/scroll, /column, label = 'Levels', /capture)
widget_control, c_levels, sensitive = iexpl
c_nlevels = graff_enter(jb, /int, /track, uvalue = 'NLEVEL', value = $
abs(data(i).zopts.n_levels), xsize = 12, ysize $
= 1, /column, label = '# Levels', /capture)
widget_control, c_nlevels, sensitive = iexpl eq 0
jb = widget_base(obase, /column, xpad = 1, ypad = 1, space = 1, /frame)
if (data(i).zopts.n_cols eq 0) then begin
data(i).zopts.n_cols = 1
data(i).zopts.colours(0) = 1
end
c_colour = graff_enter(jb, /int, /array, /track, uvalue = 'COLOUR', $
/capture, value = $
data(i).zopts.colours(0:data(i).zopts.n_cols-1), $
format = "(i0)", xsize = 6, ysize = 4, $
/scroll, /column, label = 'Colours')
if (data(i).zopts.n_thick eq 0) then begin
data(i).zopts.n_thick = 1
data(i).zopts.thick(0) = 1
end
c_thick = graff_enter(jb, /int, /array, /track, uvalue = 'THICK', $
/capture, value = $
data(i).zopts.thick(0:data(i).zopts.n_thick-1), $
format = "(I0)", xsize = 6, ysize = 4, $
/scroll, /column, label = 'Thicknesses')
jb = widget_base(obase, /column, xpad = 1, ypad = 1, space = 1, /frame)
if (data(i).zopts.n_sty eq 0) then begin
data(i).zopts.n_sty = 1
data(i).zopts.style(0) = 0
end
c_style = graff_enter(jb, /int, /array, /track, uvalue = 'STYLE', $
/capture, value = $
data(i).zopts.style(0:data(i).zopts.n_sty-1), $
format = "(I0)", xsize = 6, ysize = 6, $
/scroll, /column, label = 'Styles')
junk = cw_bbselector(jb, ['Outline', 'Filled'], uvalue = 'FILL', $
set_value = data(i).zopts.fill, /track)
c_label = graff_enter(jb, /int, /track, uvalue = 'LABEL', $
value = data(i).zopts.label, format = '(I0)', $
xsize = 6, ysize = 1, label = 'Label interval', $
/capture, /column)
msg = graff_enter(base, /display, /text, label = 'Operation:', xsize = $
40, ysize = 1)
obase = widget_base(base, /row, xpad = 1, ypad = 1, space = 1, uvalue $
= 'POP')
junk = widget_button(obase, value = ' Cancel ', uvalue = $
'CANCEL', /track)
junk = widget_button(obase, value = ' Do it ', uvalue = 'DO', $
/track)
uv = { $
Levels:c_levels, $
Nlevels:c_nlevels, $
Colour:c_colour, $
Thick:c_thick, $
Style:c_style, $ $
label:c_label, $
Msg:msg, $
zopts:data(i).zopts $
}
widget_control, tlb, /real
widget_control, base, set_uvalue = uv, /no_copy, event_func = $
'cont_event'
if (pdefs.popflag) then widget_control, obase, timer = 2.
; RYO widget management to allow us to get the values back from
; the event handler without using a common block, even after the
; hierarchy has been destroyed.
repeat begin
ev = widget_event(base)
endrep until (ev.exited ne 0)
widget_control, base, get_uvalue = uv, /no_copy
widget_control, tlb, /destroy
if (ev.exited eq 1) then data(i).zopts = uv.zopts
widget_control, pdefs.ids.graffer, sensitive = 1
end