Viewing contents of file '../idllib/contrib/tappin/graffer/gr_app_w.pro'
;+
; GR_APP_W
; Menu to control GR_APPEND
;
; Usage:
; gr_app_w, pdefs
;
; Argument:
; pdefs struct in/out The GRAFFER data structure
;
; History:
; Original: 12/11/96; SJT
; Shorten name: 25/11/96; SJT
;-
function Gr_app_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
'CANCEL': iexit = -1
'DONE': iexit = 1
'EXTEND': if (event.select eq 0) then begin
if (uv.sflag(0) eq 0) then begin
widget_control, uv.apid, sensitive = 0
uv.res(0) = -1
endif
uv.sflag(0) = 0b
widget_control, uv.dobut, sensitive = 0
endif else begin
widget_control, uv.apid, /sensitive
uv.res(0) = event.value
for j = 0, n_elements(uv.apids)-1 do $
widget_control, uv.apids(j), sensitive = $
(uv.dtypes(j) eq uv.dtypes(uv.res(0))) and j ne uv.res(0)
if (uv.res(1) ne -1) then begin
widget_control, uv.apids(uv.res(1)), set_button = 0
uv.res(1) = -1
endif
widget_control, uv.dobut, sensitive = 0
uv.sflag(0) = 1b
end
'APPEND': if (event.select eq 0) then begin
if (uv.sflag(1) eq 0) then begin
uv.res(1) = -1
widget_control, uv.dobut, sensitive = 0
endif
endif else begin
uv.res(1) = event.value
widget_control, uv.dobut, /sensitive
endelse
'DELETE': uv.delete = event.select
'SORT': uv.sort = event.select
endcase
widget_control, base, set_uvalue = uv, /no_copy
return, {id:event.handler, top:event.top, handler:event.handler, $
Exit:iexit}
end
pro Gr_app_w, pdefs
; First generate the list of DSS
handle_value, pdefs.data, data, /no_copy
tc = ['XY', 'XYE', 'XYEE', 'XYF', 'XYFF', 'XYFE', 'XYFEE', 'XYFFE', $
'XYFFEE']
xydi = where(data.type ge 0 and data.type le 8, nxy) ; X/Y data only
if (nxy eq 0) then begin
graff_msg, pdefs.ids.message, "All datasets are functions or 2-D"
handle_value, pdefs.data, data, /no_copy, /set
return
endif
dlist = data(xydi).descript
dtypes = data(xydi).type
nlist = string(indgen(n_elements(dlist))+1, $
format = "(I3,')')")
llist = string(data(xydi).ndata, format = "(' <',I0,'> ')")
lll = max(strlen(llist))
fmt = "(A"+string(lll, format = "(I0)")+")"
llist = string(llist, format = fmt)
nlist = nlist+llist
nlist = nlist+string(tc(dtypes), format = "(A6, ' - ')")
dlist = nlist+dlist
handle_value, pdefs.data, data, /no_copy, /set
; Build the menus.
widget_control, pdefs.ids.graffer, sensitive = 0
tlb = widget_base(title = 'Graffer data set merge', group = $
pdefs.ids.graffer, resource = 'Graffer')
base = widget_base(tlb, /column)
pbase = widget_base(base, /row, uvalue = 'POP')
exid = cw_bgroup(pbase, dlist, /column, /exclusive, label_top = $
'Dataset to extend', /return_index, ids = exids, $
uvalue = 'EXTEND')
apid = cw_bgroup(pbase, dlist, /column, /exclusive, label_top = $
'Dataset to append', /return_index, ids = apids, $
uvalue = 'APPEND')
widget_control, apid, sensitive = 0
jb = widget_base(base, /row, /nonexclusive)
junk = widget_button(jb, value = 'Delete appended', uvalue = 'DELETE')
junk = widget_button(jb, value = 'Sort resultant', uvalue = 'SORT')
jb = widget_base(base, /row)
junk = widget_button(jb, value = ' Cancel ', uvalue = $
'CANCEL')
dobut = widget_button(jb, value = ' Do it ', uvalue = $
'DONE')
widget_control, dobut, sensitive = 0
sflags = bytarr(2)
widget_control, base, set_uvalue = {exid:exid, $
Exids:exids, $
Apid:apid, $
Apids:apids, $
Dobut:dobut, $
Sflag:sflags, $
Dtypes:dtypes, $
Res:intarr(2)-1, $
Delete:0, sort:0}, $
event_func = 'gr_app_event'
widget_control, tlb, /real
if (pdefs.popflag) then widget_control, pbase, 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 return
gr_append, pdefs, xydi(uv.res(0)), xydi(uv.res(1)), delete = $
uv.delete, sort = uv.sort
end