;Function thm_ui_temp_call_ctime, otp, err_msg = err_msg ;This only exists to catch errors gracefully, in case ctime bombs ; otp = -1 ; err_msg = '' ; err_xxx = 0 ; catch, err_xxx ; If(err_xxx Ne 0) Then Begin ; catch, /cancel ; help, /last_message, output = err_msg ; For j = 0, n_elements(err_msg)-1 Do print, err_msg[j] ; Return, -1 ; Endif ; ctime, trange_new, npoints = 2 ; Return, trange_new ;End ;+ ;NAME: ; thm_ui_set_tlimits ;PURPOSE: ; A widget interface for setting time ranges for the thm_gui widget ;CALLING SEQUENCE: ; thm_ui_set_tlimits, master_widget_id ;INPUT: ; master_widget_id = the id number of the widget that calls this ;OUTPUT: ; none, the start and end time are set ;HISTORY: ; 9-may-2007, jmm, jimm@ssl.berkeley.edu ; 12-jul-2007, jmm, Removed ability to type in time values.... ; 19-jul-2007, jmm, typed time values are back.. ; 29-jul-2007, jmm, added cancel button ;$LastChangedBy:$ ;$LastChangedDate:$ ;$LastChangedRevision:$ ;$URL:$ ; ;- Pro thm_ui_set_tlimits_event, event Common tlimits_saved, t0_sav, t1_sav, t0_init, t1_init Common saved_time_sel, time_selected ;start here widget_control, event.id, get_uval = uval If(uval Eq 'CANCEL') Then Begin widget_control, event.top, get_uval = state, /no_copy gui_id = state.gui_id & messw = state.messw widget_control, event.top, set_uval = state, /no_copy thm_ui_update_progress, gui_id, 'No Time limits chosen' widget_control, messw, set_val = 'No Time limits chosen' widget_control, event.top, /destroy Endif Else If(uval Eq 'EXIT') Then Begin widget_control, event.top, get_uval = state, /no_copy thm_ui_update_progress, state.gui_id, 'End Choosing time limits' h = 'tlimit, '+''''+time_string(t0_sav)+''''+', '+ $ ''''+time_string(t1_sav)+'''' thm_ui_update_history, state.gui_id, h widget_control, event.top, set_uval = state, /no_copy widget_control, event.top, /destroy tlimit, t0_sav, t1_sav Endif Else If(uval Eq 'STTIME_DISPLAY') Then Begin widget_control, event.top, get_uval = state, /no_copy widget_control, event.id, get_val = temp_string t0 = thm_ui_timefix(temp_string) If(event.type Le 2) Then Begin If(is_string(t0)) Then Begin t0_sav = time_double(t0) If(t1_sav Le t0_sav) Then Begin widget_control, state.messw, set_val = 'End Time is LE Start Time' thm_ui_update_progress, state.gui_id, 'End Time is LE Start Time' Endif Else Begin thm_ui_update_progress, state.gui_id, 'Valid Start Time selected' Endelse Endif Else Begin thm_ui_update_progress, state.gui_id, $ 'Bad time selection, No action taken' Endelse Endif widget_control, event.top, set_uval = state, /no_copy Endif Else If(uval Eq 'ENTIME_DISPLAY') Then Begin widget_control, event.top, get_uval = state, /no_copy widget_control, event.id, get_val = temp_string t1 = thm_ui_timefix(temp_string) If(event.type Le 2) Then Begin If(is_string(t1)) Then Begin t1_sav = time_double(t1) If(t1_sav Le t0_sav) Then Begin widget_control, state.messw, set_val = 'End Time is LE Start Time' thm_ui_update_progress, state.gui_id, 'End Time is LE Start Time' Endif Else Begin thm_ui_update_progress, state.gui_id, 'Valid End Time selected' Endelse Endif Else Begin thm_ui_update_progress, state.gui_id, $ 'Bad time selection, No action taken' Endelse Endif widget_control, event.top, set_uval = state, /no_copy Endif Else Begin widget_control, event.top, get_uval = state, /no_copy For j = 0, n_elements(state.button_arr)-1 Do $ widget_control, state.button_arr[j], sensitive = 0 Case uval Of 'STTIME':Begin thm_ui_tselect, init_time = t0_sav t0 = time_selected If(is_struct(t0)) Then Begin t0_sav = time_double(t0) ;Set time in display widget_control, state.sttime_display, set_val = time_string(t0_sav) ;erorr check If(t1_sav Le t0_sav) Then Begin widget_control, state.messw, set_val = 'End Time is LE Start Time' thm_ui_update_progress, state.gui_id, 'End Time is LE Start Time' Endif Else Begin thm_ui_update_progress, state.gui_id, 'Valid Start Time selected' Endelse Endif Else Begin thm_ui_update_progress, state.gui_id, $ 'Bad time selection, No action taken' Endelse End 'ENTIME':Begin thm_ui_tselect, init_time = t1_sav t1 = time_selected If(is_struct(t1)) Then Begin t1_sav = time_double(t1) widget_control, state.entime_display, set_val = time_string(t1_sav) If(t1_sav Le t0_sav) Then Begin widget_control, state.messw, set_val = 'End Time is LE Start Time' thm_ui_update_progress, state.gui_id, 'End Time is LE Start Time' Endif Else Begin thm_ui_update_progress, state.gui_id, 'Valid End Time selected' Endelse Endif Else Begin thm_ui_update_progress, state.gui_id, $ 'Bad time selection, No action taken' Endelse End 'TLIMIT':Begin ; trange_new = thm_ui_temp_call_ctime(trange_new, err_msg = ; err_msg) widget_control, state.gui_id, get_uval = wstate, /no_copy If(ptr_valid(wstate.active_vnames)) Then Begin tvn = *wstate.active_vnames Endif Else tvn = '' widget_control, state.gui_id, set_uval = wstate, /no_copy If(is_string(tvn)) Then Begin tplot, tvn ctime, trange_new, npoints = 2 If(trange_new[0] Ne -1) Then Begin t0_sav = trange_new[0] & t1_sav = trange_new[1] widget_control, state.sttime_display, set_val = time_string(t0_sav) widget_control, state.entime_display, set_val = time_string(t1_sav) Endif Else Begin thm_ui_update_progress, state.gui_id, 'Bad time Selection ' widget_control, state.messw, set_val = 'Bad time Selection ' Endelse Endif Else Begin thm_ui_update_progress, state.gui_id, 'No Active Dataset, No time selection ' widget_control, state.messw, set_val = 'No Active Dataset, No time selection ' Endelse End 'RESET_TLIMIT':Begin t0_sav = t0_init & t1_sav = t1_init widget_control, state.sttime_display, set_val = time_string(t0_init) widget_control, state.entime_display, set_val = time_string(t1_init) End Endcase For j = 0, n_elements(state.button_arr)-1 Do $ widget_control, state.button_arr[j], sensitive = 1 widget_control, event.top, set_uval = state, /no_copy Endelse End Pro thm_ui_set_tlimits, proc_id Common tlimits_saved, t0_sav, t1_sav, t0_init, t1_init ;time selection widget timesel = widget_base(/col, /align_center, $ title = 'Time Selection Widget') timebase = widget_base(timesel, /row, /align_left, $ title = 'Time Selection Widget') timeselbase = widget_base(timebase, /column, /align_left, frame = 5) ; sttime button sttime_button = widget_base(timeselbase, /col, /align_left) sttimebut = widget_button(sttime_button, val = ' Choose Start time ', $ uval = 'STTIME', /align_left) ; entime button entime_button = widget_base(timeselbase, /col, /align_left) entimebut = widget_button(entime_button, val = ' Choose End time ', $ uval = 'ENTIME', /align_left) ;time display widget timedisplaybase = widget_base(timebase, /column, /align_left, frame = 5) ;set init values, if they don't exist widget_control, proc_id, get_uval = pstate, /no_copy widget_control, pstate.cw, get_uval = wstate, /no_copy gui_id = pstate.cw messw = pstate.messw If(n_elements(t0_sav) Eq 0 Or n_elements(t1_sav) Eq 0) Then Begin t0_sav = wstate.st_time & t1_sav = wstate.en_time Endif If(n_elements(t0_init) Eq 0 Or n_elements(t1_init) Eq 0) Then Begin t0_init = wstate.st_time & t1_init = wstate.en_time Endif widget_control, pstate.cw, set_uval = wstate, /no_copy widget_control, proc_id, set_uval = pstate, /no_copy ; sttime text sttime_display = widget_text(timedisplaybase, /edit, $ uval = 'STTIME_DISPLAY', $ val = time_string(t0_sav), $ xsize = 30, /all_events) ; entime text entime_display = widget_text(timedisplaybase, /edit, $ uval = 'ENTIME_DISPLAY', $ val = time_string(t1_sav), $ xsize = 30, /all_events) ;widget for tlimit and tlimit reset xbutton0 = widget_base(timebase, /col, /align_center) ;tlimit button tlimitbut = widget_button(xbutton0, val = ' Tlimits from Cursor ', $ uval = 'TLIMIT', /align_center) ;tlimit reset button tlimitresetbut = widget_button(xbutton0, val = ' Reset to Init value ', $ uval = 'RESET_TLIMIT', /align_center) ;widget for cancel and exit buttons xbutton = widget_base(timesel, /row, /align_center) ;cancel button cancelbut = widget_button(xbutton, val = ' Cancel ', $ uval = 'CANCEL', /align_center) ;exit button exitbut = widget_button(xbutton, val = ' Accept and Close ', $ uval = 'EXIT', /align_center) button_arr = [sttimebut, entimebut, tlimitbut, tlimitresetbut, exitbut, $ cancelbut, sttime_display, entime_display] state = {proc_id:proc_id, $ gui_id:gui_id, $ messw:messw, $ sttime_display:sttime_display, $ entime_display:entime_display, $ button_arr:button_arr} widget_control, timesel, set_uval = state, /no_copy widget_control, timesel, /realize xmanager, 'thm_ui_set_tlimits', timesel, /no_block Return End