pro thm_ui_fix_axis_fonts, axis_obj=axis_obj, axis_name=axis_name, size_multiplier=size_multiplier
err_xxx = 0
Catch, err_xxx
IF (err_xxx NE 0) THEN BEGIN
Catch, /Cancel
Help, /Last_Message, Output = err_msg
dprint, dlevel = 1, 'Error trying to fix overview font sizes: ' + err_msg
RETURN
ENDIF
IF ~keyword_set(size_multiplier) THEN return
IF abs(size_multiplier-1) lt 0.01 then return
IF ~(axis_name eq 'x' or axis_name eq 'y' or axis_name eq 'z') THEN return
IF ~obj_valid(axis_obj) THEN return
if axis_name eq 'x' or axis_name eq 'y' then begin
axis_obj->getProperty, labels = labels
if obj_valid(labels) then begin
label_obj = labels->get(/all)
for j = 0, n_elements(label_obj)-1 do begin
label_obj[j]->getProperty, size = size
size = size*size_multiplier-1
label_obj[j]->setProperty, size = size
endfor
endif
axis_obj->getProperty, titleobj = titleobj
if obj_valid(titleobj) then begin
titleobj->getProperty, size = size
size *= size_multiplier
titleobj->setProperty, size = size
endif
axis_obj->getProperty, subtitleobj = subtitleobj
if obj_valid(subtitleobj) then begin
subtitleobj->getProperty, size = size
size *= size_multiplier
subtitleobj->setProperty, size = size
endif
endif
if (axis_name eq 'x') or (axis_name eq 'y') or (axis_name eq 'z') then begin
axis_obj->getProperty, annotatetextobject = annotatetextobject
if obj_valid(annotatetextobject) then begin
annotatetextobject->getProperty, size = size
size = size*size_multiplier-1
annotatetextobject->setProperty, size = size
endif
endif
if axis_name eq 'z' then begin
axis_obj->getProperty, labeltextobject = labeltextobject
if obj_valid(labeltextobject) then begin
labeltextobject->getProperty, size = size
size = size*size_multiplier-1
labeltextobject->setProperty, size = size
endif
axis_obj->getProperty, subtitletextobject = subtitletextobject
if obj_valid(subtitletextobject) then begin
subtitletextobject->getProperty, size = size
size *= size_multiplier
subtitletextobject->setProperty, size = size
endif
endif
end
pro thm_ui_fix_page_fonts, state=state
err_xxx = 0
Catch, err_xxx
IF (err_xxx NE 0) THEN BEGIN
Catch, /Cancel
Help, /Last_Message, Output = err_msg
dprint, dlevel = 1, 'Error trying to fix overview font sizes: ' + err_msg
RETURN
ENDIF
activeWindow = state.windowStorage->GetActive()
activeWindow->GetProperty, panels = panelsObj
panel = panelsObj->get(/all,count=count)
if count eq 0 then return
IF !VERSION.RELEASE GE '8.0' THEN begin
size_multiplier = 0.8
if (!version.os_family ne 'Windows') and (!version.os_name ne 'Mac OS X') then begin
size_multiplier = 0.9
endif
for i = 0, n_elements(panel)-1 do begin
panel[i]->getProperty,xaxis=axis_obj
thm_ui_fix_axis_fonts, axis_obj=axis_obj, axis_name='x', size_multiplier=size_multiplier
panel[i]->getProperty,yaxis=axis_obj
thm_ui_fix_axis_fonts, axis_obj=axis_obj, axis_name='y', size_multiplier=size_multiplier
panel[i]->getProperty,zaxis=axis_obj
thm_ui_fix_axis_fonts, axis_obj=axis_obj, axis_name='z', size_multiplier=size_multiplier
endfor
activeWindow->GetProperty, settings = settings
if obj_valid(settings) then begin
settings->GetProperty, title = title
if obj_valid(title) then begin
title->getProperty, size = size
size *= size_multiplier
title->setProperty, size = size
endif
endif
panel[n_elements(panel)-1]->GetProperty, variables = variables
if obj_valid(variables) then begin
vars = variables->get(/all)
for i=0, n_elements(vars)-1 do begin
vars[i]->getProperty, text=textobj
textobj->getProperty, size = size
size *= size_multiplier
textobj->setProperty, size = size
vars[i]->setProperty, text=textobj
endfor
endif
endif
end
pro thm_ui_fix_overview_panels, state=state
err_xxx = 0
Catch, err_xxx
IF (err_xxx NE 0) THEN BEGIN
Catch, /Cancel
Help, /Last_Message, Output = err_msg
dprint, dlevel = 1, 'Error trying to fix overview font sizes: ' + err_msg
RETURN
ENDIF
activeWindow = state.windowStorage->GetActive()
If(n_elements(activeWindow) gt 0 && obj_valid(activeWindow[0])) Then Begin
activeWindow[0]->setproperty, tracking = 0
activeWindow[0]->getproperty, panels = panelsj
panel = panelsj->get(/all)
Endif else return
if n_elements(panel) ne 14 then begin
dprint, dlevel = 1, 'Error: THEMIS overview plot does not contain 14 panel.'
return
endif
current_row = 1
for i = 0, n_elements(panel)-1 do begin
panel[i]->getProperty, xAxis=xobj, yAxis=yobj, zAxis=zobj, settings=panel_settings
yobj->setProperty, stackLabels = 1, orientation = 0
yobj->setProperty, titlemargin = 50
if i eq 7 then begin
yobj->getProperty, titleobj = titleobj
titleobj->setProperty, value = ''
endif
if (i eq 1) || (i eq 7) then begin
endif else begin
endelse
CASE i OF
1: Begin
yobj->setProperty, annotateAxis=0, lineatzero=0
panel_settings->setProperty, row=current_row, rSpan=2
current_row += 2
end
7: begin
yobj->setProperty, annotateAxis=0, lineatzero=0
panel_settings->setProperty, row=current_row, rSpan=1
current_row += 1
end
ELSE: begin
xobj->setProperty, majorLength=4, minorLength=2
yobj->setProperty, numMajorTicks=3, numMinorTicks=1
panel_settings->setProperty, row=current_row, rSpan=4
current_row += 4
end
ENDCASE
if (i ge 8) || (i eq 6) then begin
yobj->setproperty, scaling = 1
yobj->setproperty, rangeoption = 2
endif
endfor
activewindow[0]->setproperty, nrows=current_row-1
panel[7]->getproperty, tracesettings = obj0
trace_obj = obj0->get(/all)
ntraces = n_elements(trace_obj)
If(ntraces Gt 1) Then Begin
If(obj_valid(trace_obj[1])) Then Begin
trace_obj[1]->getproperty, linestyle = linestyleobj
linestyleobj->setproperty, color = [255b, 0b, 0b]
Endif
If(obj_valid(trace_obj[2])) Then Begin
trace_obj[2]->getproperty, linestyle = linestyleobj
linestyleobj->setproperty, color = [255b, 255b, 0b]
Endif
If(obj_valid(trace_obj[4])) Then Begin
trace_obj[4]->getproperty, linestyle = linestyleobj
linestyleobj->setproperty, color = [0b, 0b, 0b]
Endif
for i = 0,n_elements(trace_obj)-1 do begin
trace_obj[i]->getProperty,linestyle=linestyleObj,symbol=symbolobj
lineStyleObj->setProperty,thickness=2
lineStyleObj->getProperty,color=linecolor
symbolobj->setProperty,show=0,name=symbolobj->getSymbolName(symbolid=4),id=4,color=linecolor
endfor
Endif
panel[8]->getproperty, zaxis = zobj_ssti
zobj_ssti->setproperty, minrange = 1d0, maxrange = 5d7, fixed=1
panel[9]->getproperty, zaxis = zobj_esai
zobj_esai->setproperty, minrange = 1d3, maxrange = 7.5d8, fixed=1
panel[10]->getproperty, zaxis = zobj_sste
zobj_sste->setproperty, minrange = 1d0, maxrange = 5d7, fixed=1
panel[11]->getproperty, zaxis = zobj_esae
zobj_esae->setproperty, minrange = 1d4, maxrange = 7.5d8, fixed=1
activewindow[0]->getproperty, settings=page
page->setproperty,ypanelspacing=0
panel[0]->getproperty, tracesettings = obj0
trace_obj = obj0->get(/all)
if obj_valid(trace_obj[0]) then begin
trace_obj[0]->getproperty, linestyle = linestyleobj
linestyleobj->setproperty, color = [0b, 0b, 0b]
endif
panel[8]->getproperty, yaxis = yobj
yobj->setproperty, scaling = 1
yobj->setproperty, rangeoption = 2
yobj->setproperty, maxfixedrange = 3.0e6
yobj->setproperty, minfixedrange = 3.0e4
panel[9]->getproperty, yaxis = yobj
yobj->setproperty, scaling = 1
panel[10]->getproperty, yaxis = yobj
yobj->setproperty, scaling = 1
yobj->setproperty, rangeoption = 2
panel[11]->getproperty, yaxis = yobj
yobj->setproperty, scaling = 1
npanels = n_elements(panel)
For j = 0, n_elements(fbk_tvars)-1 Do Begin
jp = j+12
If(jp Le npanels-1) Then Begin
panel[jp]->getproperty, yaxis = yobj
yobj->setproperty, scaling = 1
get_data, fbk_tvars[j], dlimits = dl, limits = al
lbl0 = strupcase(strmid(fbk_tvars[j], 4)) & lbl1 = ' '
If(is_struct(al) && tag_exist(al, 'ztitle')) Then lbl1 = al.ztitle
Endif
Endfor
panel[1]->getProperty,yaxis=nobj
nobj->setProperty,annotateAxis=0,lineatzero=0
panel[1]->getproperty, tracesettings = obj0
trace_obj = obj0->get(/all)
ntr = 11
ctbl = transpose([[7,0,5],$
[235,255,0],$
[0,97,255],$
[253,0,0],$
[90,255,0],$
[43,0,232],$
[255,103,0],$
[0,255,133],$
[83,0,117],$
[255,199,0],$
[0,235,254]])
for i = 0,ntr-1 do begin
trace_obj[i]->getProperty,linestyle=linestyleObj
lineStyleObj->setProperty,thickness=2, color=ctbl[i,*]
endfor
panel[n_elements(panel)-1]->GetProperty, variables = variables
if obj_valid(variables) then begin
vars = variables->get(/all)
for i=0, n_elements(vars)-1 do begin
vars[i]->getProperty, text=textobj
if i eq 0 then textobj->setProperty, value='X-GSE'
if i eq 1 then textobj->setProperty, value='Y-GSE'
if i eq 2 then textobj->setProperty, value='Z-GSE'
vars[i]->setProperty, text=textobj
endfor
endif
end
pro thm_ui_gen_overplot_event, event
Compile_Opt hidden
Widget_Control, event.TOP, Get_UValue=state, /No_Copy
err_xxx = 0
Catch, err_xxx
IF (err_xxx NE 0) THEN BEGIN
Catch, /Cancel
Help, /Last_Message, Output = err_msg
spd_ui_sbar_hwin_update, state, err_msg, /error, err_msgbox_title='Error while generating THEMIS overview plot'
Widget_Control, event.TOP, Set_UValue=state, /No_Copy
widget_control, event.top,/destroy
RETURN
ENDIF
IF (Tag_Names(event, /Structure_Name) EQ 'WIDGET_KILL_REQUEST') THEN BEGIN
dprint, 'Generate THEMIS overview plot widget killed'
state.historyWin->Update,'THM_UI_GEN_OVERPLOT: Widget killed'
Widget_Control, event.TOP, Set_UValue=state, /No_Copy
Widget_Control, event.top, /Destroy
RETURN
ENDIF
Widget_Control, event.id, Get_UValue=uval
state.historywin->update,'THM_UI_GEN_OVERPLOT: User value: '+uval ,/dontshow
CASE uval OF
'GOWEB': BEGIN
timeid = widget_info(event.top, find_by_uname='time')
widget_control, timeid, get_value=valid, func_get_value='spd_ui_time_widget_is_valid'
if valid then begin
state.tr_obj->getproperty, starttime=starttime, endtime=endtime
starttime->getproperty, year=year, month=month, date=date
probet = state.probe
url = "http://themis.ssl.berkeley.edu/summary.php?bigvar=" + string(year, format='(I04)') + "___" + string(month, format='(I02)') + "___" + string(date, format='(I02)') + "___0024___th" + probet + "___overview"
spd_ui_open_url, url
endif else begin
ok = dialog_message('Invalid start/end time, please use: YYYY-MM-DD/hh:mm:ss', $
/center)
endelse
END
'APPLY': BEGIN
timeid = widget_info(event.top, find_by_uname='time')
widget_control, timeid, get_value=valid, func_get_value='spd_ui_time_widget_is_valid'
if valid then begin
state.tr_obj->getproperty, starttime=starttime, endtime=endtime
starttime->getproperty, tdouble=st_double
endtime->getproperty, tdouble=et_double
if (st_double le 0.0) or (et_double le 0.0) then begin
etxt = 'Invalid End Time.'
if (st_double le 0.0) then etxt = 'Invalid Start Time.'
ok = dialog_message(etxt,title='Error while generating THEMIS overview plot', /center, information=1)
Widget_Control, event.top, Set_UValue=state, /No_Copy
return
endif
dur = (et_double - st_double) / 86400
if dur le 0 then begin
etxt = 'End Time is earlier than Start Time.'
ok = dialog_message(etxt,title='Error while generating THEMIS overview plot', /center, information=1)
Widget_Control, event.top, Set_UValue=state, /No_Copy
return
endif
widget_control, /hourglass
if ~state.windowStorage->add(isactive=1) then begin
ok = spd_ui_prompt_widget(state.tlb,state.statusbar,state.tlb,prompt='Error initializing new window for THEMIS overview plot.', $
title='Error while generating THEMIS overview plot',/traceback, frame_attr=8)
Widget_Control, event.top, Set_UValue=state, /No_Copy
return
endif
activeWindow = state.windowStorage->GetActive()
state.statusBar->Update,'Generating THEMIS overview plot. Please wait!...'
thm_gen_overplot, probes=state.probe, date=st_double, dur = dur, $
makepng = 0, fearless = 0, dont_delete_data = 1, gui_plot = 1, error=error
if ~error then begin
thm_ui_fix_page_fonts, state=state
thm_ui_fix_overview_panels, state=state
state.callSequence->addplugincall, 'thm_gen_overplot', $
probes=state.probe, date=st_double, dur = dur, $
makepng = 0, fearless = 0, dont_delete_data = 1, $
gui_plot = 1, no_draw=1, track_one = 1
(*state.data).oplot_calls = (*state.data).oplot_calls + 1
(*state.data).track_one = 1b
msg = 'THEMIS overview plot completed.'
endif else begin
msg = 'Error generating THEMIS overview plot.'
endelse
state.statusbar->update, msg
state.historywin->update, msg
Widget_Control, event.top, Set_UValue=state, /No_Copy
Widget_Control, event.top, /Destroy
return
endif else ok = dialog_message('Invalid Start/End time, please use: YYYY-MM-DD/hh:mm:ss', $
/center)
END
'CANC': BEGIN
state.historyWin->update,'Generate THEMIS overview plot canceled',/dontshow
Widget_Control, event.TOP, Set_UValue=state, /No_Copy
Widget_Control, event.top, /Destroy
RETURN
END
'KEY': begin
spd_ui_overplot_key, state.gui_id, state.historyWin, /modal
end
'PROBE:A': state.probe='a'
'PROBE:B': state.probe='b'
'PROBE:C': state.probe='c'
'PROBE:D': state.probe='d'
'PROBE:E': state.probe='e'
'TIME':
ELSE: dprint, 'Not yet implemented'
ENDCASE
Widget_Control, event.top, Set_UValue=state, /No_Copy
RETURN
end
pro thm_ui_gen_overplot, gui_id = gui_id, $
history_window = historyWin, $
status_bar = statusbar, $
call_sequence = callSequence, $
time_range = tr_obj, $
window_storage = windowStorage, $
loaded_data = loadedData, $
data_structure = data_structure, $
_extra = _extra
compile_opt idl2
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 Begin
print, err_msg[j]
If(obj_valid(historywin)) Then historyWin->update, err_msg[j]
Endfor
Print, 'Error--See history'
ok = error_message('An unknown error occured while starting the THEMIS overview plot widget. ', $
'See console for details.', /noname, /center, title='Error in THEMIS overview plots')
spd_gui_error, gui_id, historywin
RETURN
ENDIF
tlb = widget_base(/col, title='Generate THEMIS Overview Plot', group_leader=gui_id, $
/floating, /base_align_center, /tlb_kill_request_events, /modal)
mainBase = widget_base(tlb, /col, /align_center, tab_mode=1, space=4)
txtBase = widget_base(mainbase, /Col, /align_center)
probeBase = widget_base(mainBase, /row)
probeLabel = widget_label(probeBase, value='Probe: ', /align_left)
probeButtonBase = widget_base(probeBase, /row, /exclusive)
midBase = widget_base(mainBase, /Row)
trvalsBase = Widget_Base(midBase, /Col, Frame=1, xpad=8)
keyButtonBase = widget_button(midBase, Value=' Plot Key ', UValue='KEY', XSize=80, $
tooltip = 'Displays detailed descriptions of overview plot panels.')
goWebBase = Widget_Base(mainBase, /Row, Frame=1, xpad=8)
buttonBase = Widget_Base(mainBase, /row, /align_center)
goWebLabel = widget_label(goWebBase, Value=' Alternatively, you can view the plot on the web (single day). ', /align_left)
goWebButton = Widget_Button(goWebBase, Value=' Web Plot ', UValue='GOWEB', XSize=80)
wj = widget_label(txtbase, value='Creating the overview plot might take a few minutes.', /align_left)
aButton = widget_button(probeButtonBase, value='A(P5)', uvalue='PROBE:A')
bButton = widget_button(probeButtonBase, value='B(P1)', uvalue='PROBE:B')
cButton = widget_button(probeButtonBase, value='C(P2)', uvalue='PROBE:C')
dButton = widget_button(probeButtonBase, value='D(P3)', uvalue='PROBE:D')
eButton = widget_button(probeButtonBase, value='E(P4)', uvalue='PROBE:E')
widget_control, aButton, /set_button
probe='a'
getresourcepath,rpath
cal = read_bmp(rpath + 'cal.bmp', /rgb)
spd_ui_match_background, tlb, cal
if ~obj_valid(tr_obj) then begin
st_text = '2007-03-23/00:00:00.0'
et_text = '2007-03-24/00:00:00.0'
tr_obj=obj_new('spd_ui_time_range',starttime=st_text,endtime=et_text)
endif
timeWidget = spd_ui_time_widget(trvalsBase,statusBar,historyWin,timeRangeObj=tr_obj, $
uvalue='TIME',uname='time')
trControls=[timewidget]
applyButton = Widget_Button(buttonBase, Value=' Apply ', UValue='APPLY', XSize=80)
cancelButton = Widget_Button(buttonBase, Value=' Cancel ', UValue='CANC', XSize=80)
if ~is_struct(data_structure) then begin
data_structure = { oplot_calls:0, track_one:0b }
endif
data_ptr = ptr_new(data_structure)
state = {tlb:tlb, gui_id:gui_id, historyWin:historyWin,statusBar:statusBar, $
trControls:trControls, tr_obj:tr_obj, probe:probe, $
data:data_ptr, $
callSequence:callSequence,$
windowStorage:windowStorage, $
loadedData:loadedData}
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, 'thm_ui_gen_overplot', tlb, /No_Block
if ptr_valid(data_ptr) && is_struct(*data_ptr) then begin
data_structure = *data_ptr
endif
RETURN
end