pro spd_ui_block_ave_options_event, event
compile_opt idl2, hidden
widget_control, event.top, get_uval=state, /no_copy
catch, on_err
if on_err ne 0 then begin
catch, /cancel
help, /last_message, output=msg
if is_struct(state) then begin
for i=0, n_elements(msg)-1 do state.historywin->update,msg[i]
gui_id = state.gui_id
hwin = state.historywin
endif
print, 'Error--See history'
ok=error_message('An unknown error occured and the window must be restarted, see console for details.', $
/noname,/center, title='Error in Block Average Options')
widget_control, event.top, /destroy
if widget_valid(gui_id) && obj_valid(hwin) then begin
spd_gui_error, gui_id, hwin
endif
return
endif
if tag_names(event,/struc) eq 'WIDGET_KILL_REQUEST' then begin
state.historywin->update,'SPD_UI_BLOCK_AVE_OPTIONS: Widget killed', /dontshow
state.statusbar->update,'Block Average canceled'
widget_control, event.top, /destroy
return
endif
m = 'Block Average: '
widget_control, event.id, get_uval=uval
if size(uval,/type) ne 0 then begin
Case uval Of
'OK': begin
widget_control, state.res, get_value=res
if finite(res) && (res gt 0) then begin
(*state.pvals).dt = res
endif else begin
ok = dialog_message('Invalid resolution, please enter a numeric value greater than 0.', $
/center,title='Block Average Error')
break
endelse
widget_control, state.trange, get_value=valid, func_get_value='spd_ui_time_widget_is_valid'
if (~valid) then begin
result = dialog_message('Invalid time range inputed. Use format: YYYY-MM-DD/hh:mm:ss',/center)
break
endif
timeid = widget_info(event.top, find_by_uname='time')
widget_control, timeid, get_value=valid, func_get_value='spd_ui_time_widget_is_valid'
customset = widget_info(state.timebase,/sensitive)
if customset && valid then begin
spd_ui_time_widget_update, timeid
tobj = spd_ui_time_widget_get_value(timeid)
(*state.pvals).trange = tobj
(*state.pvals).limit = widget_info(state.timebase,/sensitive)
endif
widget_control, state.suffix, get_value=suffix
if widget_info(state.includeRes,/button_set) then begin
if (*state.pvals).dt lt 1. then $
suffix += '-'+strcompress(/remove_all, (*state.pvals).dt) $
else suffix += '-'+strcompress(/remove_all, long((*state.pvals).dt))
endif
(*state.pvals).suffix = suffix
(*state.pvals).ok = 1b
widget_control, event.top, /destroy
return
end
'CANCEL': begin
state.historywin->update,'SPD_UI_BLOCK_AVE_OPTIONS: Widget canceled', /dontshow
state.statusbar->update,'Block Average canceled'
widget_control, event.top, /destroy
return
end
'RES': begin
if event.valid && event.value gt 0 then state.statusbar->update, $
m+'Using '+strtrim(event.value,2)+' sec resolution.' $
else state.statusbar->update,m+'Resolution must be a numeric value greater than 0.'
end
'LIMIT': begin
widget_control, state.timebase, sens = event.select
end
Endcase
endif
widget_control, event.top, set_uval = state, /no_copy
end
function spd_ui_block_ave_options, gui_id, statusbar, historywin, datap
compile_opt idl2
catch, _err
if _err ne 0 then begin
catch,/cancel
ok = error_message('Error starting Block Average Options, see console for details.')
widget_control, tlb, /destroy
return,{ok:0}
endif
res = 60d
suffix = '-av'
tlb = widget_base(title = 'Block Average Options', /col, /base_align_center, $
group_leader=gui_id, /modal, /tlb_kill_request_events)
mainbase = widget_base(tlb, /col, xpad=4, ypad=4, tab_mode=1)
resBase = widget_base(mainbase, /row)
timelabelBase = widget_base(mainbase, /row, /nonexclusive)
timeBase = widget_base(mainbase, /col, fram=1, sensitive=0)
suffixBase = widget_base(mainBase, /row, ypad=8)
buttonBase = widget_base(mainbase, /row, /align_center, ypad=12)
resolution = spd_ui_spinner(resbase, label = 'Time Resolution (sec): ', $
text_box_size=10, uval='RES', value=res, incr=1, min_value=0)
timebutton = widget_button(timelabelbase, value='Limit time range.', uval='LIMIT',$
tooltip='The averaged variables will be clipped to the selected interval.')
time = spd_ui_time_widget(timebase, statusbar, historywin, oneday=0b, uname='time')
suffixlabel = widget_label(suffixBase, value = 'Suffix: ')
suffixtext = widget_text(suffixbase, /all_events, /editable, tab_mode=1, xsize=15, $
value=suffix)
includeBase = widget_base(suffixbase, /nonexclusive, ypad=0)
includeRes = widget_button(includebase, value='Append Resolution')
ok = widget_button(buttonbase, value = 'OK', xsize=60, uval='OK')
cancel = widget_button(buttonbase, valu = 'Cancel', xsize=60, uval='CANCEL')
widget_control, includeRes, set_button = 1
active_data = (*datap)->getactive()
for i=0, n_elements(active_data)-1 do begin
(*datap)->getvardata, name=active_data[i], trange=tr0
if obj_valid(tr0) then break
endfor
if obj_valid(tr0) then begin
tr = obj_new('SPD_UI_TIME_RANGE')
ok = tr->SetStartTime(tr0->getstarttime())
ok = tr->setendtime(tr0->getendtime())
widget_control, time, set_value=tr
endif else tr = obj_new('SPD_UI_TIME_RANGE')
values = {dt:res, trange:tr, limit:0b, suffix:suffix, ok:0b}
pvals = ptr_new(values)
state = {tlb:tlb, gui_id:gui_id, statusbar:statusbar, historywin:historywin, $
res:resolution, timebase:timebase, timebutton:timebutton, trange:time, $
suffix:suffixtext, includeRes:includeRes, $
pvals:pvals}
centertlb, tlb
widget_control, tlb, set_uvalue = state, /no_copy
widget_control, tlb, /realize
if !d.NAME eq 'X' then begin
widget_control, tlb, xoffset=0, yoffset=0
endif
xmanager, 'spd_ui_block_ave_options', tlb, /no_block
values= *pvals
ptr_free, pvals
widget_control, /hourglass
Return, values
end