Viewing contents of file '../idllib/contrib/tappin/graffer/gr_key_def.pro'
;+
; GR_KEY_DEF
; Define the plotting of a key on the plot.
;
; Usage:
; ichange = gr_key_def(pdefs)
;
; Return value:
; ichange byte Flag indicating if change has been made
;
; Argument:
; pdefs struct in/out The GRAFFER universal structure
;
; History:
; Original: 30/1/97; SJT
; Changed to be function returning change flag: 30/1/97; SJT
; Add CAPTURE key to entry boxes: 6/2/97; SJT
; Modify to include "single point" format: 15/5/97; SJT
;-
function Gr_key_event, event
widget_control, event.id, get_uvalue = but
widget_control, event.handler, get_uvalue = uv, /no_copy
iexit = 0
case but of
'CANCEL': iexit = -1
'DO': begin ; Retrieve values
handle_value, uv.key.list, list, /no_copy ; get rid of the old
; one
handle_value, uv.ds1, ds1, /no_copy
widget_control, uv.listid, get_value = iuse
locs = where(iuse, nuse)
if (nuse ne 0) then handle_value, uv.key.list, ds1(locs), $
/no_copy, /set
iexit = 1
end
'X0': begin
uv.key.x(0) = event.value
if (event.cr) then grf_focus_enter, uv.yid0
end
'Y0': begin
uv.key.y(0) = event.value
if (event.cr) then grf_focus_enter, uv.xid1
end
'X1': begin
uv.key.x(1) = event.value
if (event.cr) then grf_focus_enter, uv.yid1
end
'Y1': begin
uv.key.y(1) = event.value
if (event.cr) then grf_focus_enter, uv.cid
end
'COL': begin
uv.key.cols = event.value
if (event.cr) then grf_focus_enter, uv.tid
end
'TITLE': begin
uv.key.title = event.value
if (event.cr) then grf_focus_enter, uv.xid0
end
'USE': uv.key.use = event.value
'CSYS': begin
cn = uv.key.norm
uv.key.norm = event.value
case event.value of
0: case cn of
0: dmy = [uv.key.x, uv.key.y]
1: dmy = transpose(convert_coord(uv.key.x, uv.key.y, $
/to_data, /norm))
2: begin
gr_fra2norm, uv.key.x, uv.key.y, xn, yn
dmy = transpose(convert_coord(xn, yn, /to_data, $
/norm))
end
endcase
1: case cn of
0: dmy = transpose(convert_coord(uv.key.x, uv.key.y, $
/data, /to_norm))
1: dmy = [uv.key.x, uv.key.y]
2: begin
gr_fra2norm, uv.key.x, uv.key.y, xn, yn
dmy = [xn, yn]
end
endcase
2: case cn of
0: begin
dmy = transpose(convert_coord(uv.key.x, uv.key.y, $
/data, /to_norm))
gr_fra2norm, dmy(0:1), dmy(2:3), xf, yf, /invert
dmy = [xf, yf]
end
1: begin
gr_fra2norm, uv.key.x, uv.key.y, xf, yf, /invert
dmy = [xf, yf]
end
2: dmy = [uv.key.x, uv.key.y]
endcase
endcase
uv.key.x = dmy(0:1)
uv.key.y = dmy(2:3)
widget_control, uv.xid0, set_value = uv.key.x(0)
widget_control, uv.xid1, set_value = uv.key.x(1)
widget_control, uv.yid0, set_value = uv.key.y(0)
widget_control, uv.yid1, set_value = uv.key.y(1)
end
'FRAME': uv.key.frame = event.value
'POINT': uv.key.one_point = event.value
'ALL': begin
widget_control, uv.listid, get_value = iuse
iuse(*) = 1
widget_control, uv.listid, set_value = iuse
end
'PICK': ; Ignore it's easier to use GET_VALUE
endcase
widget_control, uv.allid, sensitive = uv.key.use
widget_control, event.handler, set_uvalue = uv, /no_copy
return, {id:event.id, top:event.top, handler:0l, exited:iexit}
end
function Gr_key_def, pdefs
widget_control, pdefs.ids.graffer, sensitive = 0
bub = { $
Key: pdefs.key, $
Allid: 0l, $
Xid0: 0l, $
Yid0: 0l, $
Xid1: 0l, $
Yid1: 0l, $
Cid: 0l, $
tid: 0l, $
Listid: 0l, $
Ds1: handle_create()}
tlb = widget_base(title = 'Graffer Key Define', group_leader = $
pdefs.ids.graffer, resource = 'Graffer')
base = widget_base(tlb, /column)
junk = cw_bbselector(base, ['No', 'Yes'], label_left = 'Draw a key on ' + $
'the plot?:', uvalue = 'USE', set_value = $
pdefs.key.use)
bub.allid = widget_base(base, /row)
jb = widget_base(bub.allid, /column)
junk = cw_bbselector(jb, ['Data', 'Normal', '"Frame"'], label_left = $
'Coordinate system:', uvalue = 'CSYS', set_value $
= pdefs.key.norm)
jjb = widget_base(jb, /row)
bub.xid0 = graff_enter(jjb, /float, xsize = 11, /all_event, label = $
'Lower left: X:', value = pdefs.key.x(0), $
uvalue = 'X0', /capture)
bub.yid0 = graff_enter(jjb, /float, xsize = 11, /all_event, label = $
'Y:', value = pdefs.key.y(0), uvalue = 'Y0', $
/capture)
jjb = widget_base(jb, /row)
bub.xid1 = graff_enter(jjb, /float, xsize = 11, /all_event, label = $
'Upper right: X:', value = pdefs.key.x(1), $
uvalue = 'X1', /capture)
bub.yid1 = graff_enter(jjb, /float, xsize = 11, /all_event, label = $
'Y:', value = pdefs.key.y(1), uvalue = 'Y1', $
/capture)
jjb = widget_base(jb, /row)
bub.cid = graff_enter(jjb, /int, xsize = 3, /all_event, label = $
'How many columns?: ', value = pdefs.key.cols, $
uvalue = 'COL', /capture)
junk = cw_bbselector(jjb, ['2', '1'], label_left = 'Plot 1 or 2 ' + $
'points', uvalue = 'POINT', set_value = $
pdefs.key.one_point)
junk = cw_bbselector(jb, ['No', 'Yes'], label_left = 'Draw a frame ' + $
'round the key?:', uvalue = 'FRAME', set_value = $
pdefs.key.frame)
bub.tid = graff_enter(jb, value = pdefs.key.title, /text, /all_event, $
label = 'Key title:', xsize = 20, uvalue = $
'TITLE', /capture)
handle_value, pdefs.data, data, /no_copy
handle_value, pdefs.key.list, list, /no_copy
ku = bytarr(n_elements(data))
if (n_elements(list) ne 0) then ku(list) = 1
ds1 = where(data.type ge -3 and data.type lt 8, n1d)
jb = widget_base(bub.allid, /column)
junk = widget_label(jb, value = 'Datasets to include')
bub.listid = cw_bgroup(jb, data(ds1).descript, column = ceil(n1d/10.), $
/nonexclusive, uvalue = 'PICK', set_value = $
ku(ds1), ids = buts)
handle_value, bub.ds1, ds1, /set, /no_copy
junk = widget_button(jb, value = 'All', uvalue = 'ALL')
handle_value, pdefs.data, data, /set, /no_copy
handle_value, pdefs.key.list, list, /set, /no_copy
jb = widget_base(base, /row, uvalue = 'POP')
junk = widget_button(jb, value = ' Cancel ', uvalue = 'CANCEL')
junk = widget_button(jb, value = ' Do it ', uvalue = 'DO')
widget_control, bub.allid, sensitive = pdefs.key.use
widget_control, tlb, /real
widget_control, base, set_uvalue = bub, event_func = 'gr_key_event', $
/no_copy
if (pdefs.popflag) then widget_control, jb, timer = 2.
repeat begin
ev = widget_event(base)
endrep until (ev.exited ne 0)
widget_control, base, get_uvalue = uv, /no_copy
widget_control, tlb, /destroy
widget_control, pdefs.ids.graffer, sensitive = 1
if (ev.exited eq 1) then pdefs.key = uv.key
return, ev.exited eq 1
end