Viewing contents of file '../idllib/contrib/tappin/graffer/graff_sort_dss.pro'
;+
; GRAFF_SORT_DSS
; Change data set
;
; Usage:
; graff_sort_dss, pdefs
;
; Argument:
; pdefs struct in/out The plot definition structure.
;
; History:
; Original (after graff_ch_dset): 6/12/96; SJT
;-
function Grf_sort_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
'CHOOSE': begin
handle_value, uv.list, indlist
if (uv.moving eq -1) then begin
uv.moving = indlist(event.index)
if (event.index eq 0) then indlist = indlist(1:*) $
else if (event.index eq n_elements(indlist)-1) then $
indlist = indlist(0:n_elements(indlist)-2) $
else indlist = [indlist(0:event.index-1), $
indlist(event.index+1:*)]
widget_control, event.id, set_value = ['<start>', $
uv.dlist(indlist)]
widget_control, uv.label, set_value = 'Place it after'
endif else begin
if (event.index eq 0) then indlist = [uv.moving, indlist] $
else if (event.index eq n_elements(indlist)) then $
indlist = [indlist, uv.moving] $
else indlist = [indlist(0:event.index-1), uv.moving, $
indlist(event.index:*)]
uv.moving = -1
widget_control, event.id, set_value = [uv.dlist(indlist)]
widget_control, uv.label, set_value = 'Data set to move'
endelse
handle_value, uv.list, indlist, /set
end
'DO': iexit = 1
'DONT': iexit = -1
end
widget_control, base, set_uvalue = uv, /no_copy
return, {id:event.handler, top:event.top, handler:event.handler, $
Exit:iexit}
end
pro Graff_sort_dss, pdefs
handle_value, pdefs.data, data, /no_copy
tc = ['F(XY)', 'PF', 'F(Y)', 'F(X)', 'XY', 'XYE', 'XYEE', 'XYF', 'XYFF', $
'XYFE', 'XYFEE', 'XYFFE', 'XYFFEE', 'Z']
dlist = data.descript
indlist = indgen(n_elements(dlist))
nlist = string(indlist+1, format = "(I3,')')")
llist = string([data.ndata, 0], format = "(' <',I0,'> ')")
lll = max(strlen(llist))
fmt = "(A"+string(lll, format = "(I0)")+")"
llist = string(llist, format = fmt)
nlist = nlist+llist
nlist = nlist+string(tc(data.type+4), format = "(A6, ' - ')")
dlist = nlist+dlist
widget_control, pdefs.ids.graffer, sensitive = 0
tlb = widget_base(title = 'Graffer data set sort', group = $
pdefs.ids.graffer, resource = 'Graffer')
base = widget_base(tlb, /column)
curr = widget_label(base, value = 'Data set to move', uvalue = 'POP')
junk = widget_list(base, value = dlist, uvalue = 'CHOOSE', $
ysize = (12 < n_elements(dlist)))
jb = widget_base(base, /row)
junk = widget_button(jb, value = 'Cancel', uvalue = 'DONT')
junk = widget_button(jb, value = 'Do it', uvalue = 'DO')
uv = {dlist:dlist, $
Label: curr, $
List:handle_create(), $
Moving: -1}
handle_value, uv.list, indlist, /set
widget_control, base, set_uvalue = uv, $
event_func = 'grf_sort_event'
widget_control, tlb, /real
if (pdefs.popflag) then widget_control, curr, 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 begin
handle_value, pdefs.data, data, /no_copy, /set
return
endif
handle_value, uv.list, indlist
handle_value, pdefs.key.list, list, /no_copy
data = data(indlist)
if (n_elements(list) ne 0) then begin
ikey = bytarr(n_elements(data))
ikey(list) = 1b
ikey = ikey(indlist)
list = where(ikey)
handle_value, pdefs.key.list, list, /no_copy, /set
endif
loc = where(indlist eq pdefs.cset)
pdefs.cset = loc(0)
handle_value, pdefs.data, data, /no_copy, /set
graff_set_vals, pdefs, /set_only
handle_free, uv.list
end