pro nwin
end
pro twinscolorbar
end
pro spdfSelectDataview, $
tlb, dvList, dvIndex
compile_opt idl2
widget_control, dvList, set_combobox_select=dvIndex
widget_control, dvList, $
send_event={id:dvList, top:tlb, handler:dvList, index:dvIndex}
end
pro spdfDataviewSelected, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
*state.selectedDataview = state.dataviews[event.index]->getId()
if *state.selectedDataview eq 'cnofs' then begin
reply = dialog_message( $
['The required authentication for this dataview is not yet implemented.', 'Please choose a different dataview.'], $
title='Dataview Selection', /center, /information)
spdfSelectDataview, event.top, state.dataviewList, 0
return
endif
widget_control, /hourglass
observatoryGroups = state.cdas->getObservatoryGroups($
dataview = *state.selectedDataview, $
authenticator=state.authenticator, $
httpErrorReporter=state.errorDialog)
*state.observatoryGroups = strarr(n_elements(observatoryGroups))
for i = 0, n_elements(observatoryGroups) - 1 do begin
(*state.observatoryGroups)[i] = observatoryGroups[i]->getName()
endfor
obj_destroy, observatoryGroups
widget_control, state.observatoryGroupList, $
set_value=*state.observatoryGroups
instrumentTypes = state.cdas->getInstrumentTypes($
dataview = *state.selectedDataview, $
authenticator=state.authenticator, $
httpErrorReporter=state.errorDialog)
*state.instrumentTypes = strarr(n_elements(instrumentTypes))
for i = 0, n_elements(instrumentTypes) - 1 do begin
(*state.instrumentTypes)[i] = instrumentTypes[i]->getName()
endfor
obj_destroy, instrumentTypes
widget_control, state.instrumentTypeList, $
set_value=*state.instrumentTypes
end
function spdfGetDatasetDescription, $
descriptions, id
compile_opt idl2
for i = 0, n_elements(descriptions) - 1 do begin
if descriptions[i]->getId() eq id then return, descriptions[i]
endfor
return, obj_new()
end
pro spdfDatasetTreeEvent, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
selectedItem = widget_info(state.datasetTree, /tree_select)
if selectedItem[0] eq -1 then return
widget_control, selectedItem[0], get_uvalue=selectedValue
if size(selectedValue, /type) ne 7 then return
*state.selectedDataset = $
spdfGetDatasetDescription(*state.datasets, selectedValue)
if tag_names(event, /structure_name) eq 'WIDGET_CONTEXT' then begin
widget_displaycontextmenu, event.ID, event.X, event.Y, $
state.datasetContextMenu
end
end
pro spdfViewNotes, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
selectedDataset = *state.selectedDataset
fullNotesUrl = selectedDataset->getNotes()
urlComponents = $
strsplit(fullNotesUrl, '#', count=componentCount, /extract)
notesUrl = urlComponents[0]
if componentCount eq 2 then begin
notesAnchor = urlComponents[1]
endif
pathComponents = $
strsplit(notesUrl, '/', count=componentCount, /extract)
filename = pathComponents[componentCount - 1]
notes = obj_new('IDLnetUrl')
localNotes = notes->get(filename=filename, url=notesUrl)
if n_elements(notesAnchor) ne 0 then begin
online_help, notesAnchor, book=localNotes, /full_path
endif else begin
online_help, book=localNotes, /full_path
endelse
end
pro spdfCloseInventory, $
event
compile_opt idl2
widget_control, event.top, /destroy
end
pro spdfViewInventory, $
event
widget_control, event.top, get_uvalue=state
selectedDataset = *state.selectedDataset
inventory = state.cdas->getInventory( $
dataview = *state.selectedDataview, $
selectedDataset->getId(), $
authenticator=state.authenticator, $
httpErrorReporter=state.errorDialog)
intervals = inventory->getTimeIntervals()
intervalStrings = strarr(2, n_elements(intervals))
for i = 0, n_elements(intervals) - 1 do begin
intervalStrings[0, i] = intervals[i]->getCdawebStart()
intervalStrings[1, i] = intervals[i]->getCdawebStop()
endfor
title = inventory->getId() + ' Data Inventory'
inventoryWin = $
widget_base(title=title, /column, group_leader=event.top)
label = widget_label(inventoryWin, value=title)
table = widget_table(inventoryWin, $
column_labels = ['Start Time', 'Stop Time'], $
/no_row_headers, value=intervalStrings)
closeButton = widget_button(inventoryWin, /align_left, $
event_pro='spdfCloseInventory', $
value='Close', tooltip='Close inventory window')
widget_control, inventoryWin, /realize
xmanager, 'SpdfViewInventory', inventoryWin, /no_block
obj_destroy, intervals
obj_destroy, inventory
end
pro spdfDefaultTime, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
selectedItem = widget_info(state.datasetTree, /tree_select)
if selectedItem[0] eq -1 then begin
reply = dialog_message( $
'Please choose a Dataset/Variable', $
title='Missing Dataset Selection', /center, /error)
return
endif
if ~widget_info(selectedItem[0], /tree_folder) then begin
datasetWidget = widget_info(selectedItem[0], /parent)
endif else begin
datasetWidget = selectedItem[0]
endelse
widget_control, datasetWidget, get_uvalue=datasetId
selectedDataset = $
spdfGetDatasetDescription(*state.datasets, datasetId)
timeInterval = selectedDataset->getTimeInterval()
timeInterval->setStart, timeInterval->getStop() - 1
widget_control, state.startTime, $
set_value = timeInterval->getCdawebStart()
widget_control, state.stopTime, $
set_value = timeInterval->getCdawebStop()
end
pro spdfIgnoreSelected, $
event
compile_opt idl2
end
function spdfSaveDataButton, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
*state.saveData = event.select
return, 0
end
pro spdfFindDatasets, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
selectedObservatoryGroups = $
widget_info(state.observatoryGroupList, /list_select)
if selectedObservatoryGroups[0] eq -1 then begin
reply = dialog_message( $
'Please choose one or more Mission Groups', $
title='Mission Selection', /center, /error)
return
endif
observatoryGroups = ptr_new()
if selectedObservatoryGroups[0] ne -1 then begin
observatoryGroups = strarr(n_elements(selectedObservatoryGroups))
for i = 0, n_elements(observatoryGroups) - 1 do begin
observatoryGroups[i] = $
(*state.observatoryGroups)[selectedObservatoryGroups[i]]
endfor
endif
selectedInstrumentTypes = $
widget_info(state.instrumentTypeList, /list_select)
if selectedInstrumentTypes[0] eq -1 then begin
reply = dialog_message( $
'Please choose one or more Instrument Types', $
title='Mission Selection', /center, /error)
return
endif
instrumentTypes = ptr_new()
if selectedInstrumentTypes[0] ne -1 then begin
instrumentTypes = strarr(n_elements(selectedInstrumentTypes))
for i = 0, n_elements(instrumentTypes) - 1 do begin
instrumentTypes[i] = $
(*state.instrumentTypes)[selectedInstrumentTypes[i]]
endfor
endif
oldRootNode = widget_info(state.datasetTree, /child)
if oldRootNode ne 0 then widget_control, oldRootNode, /destroy
if n_elements(*state.datasets) then begin
*state.selectedDataset = obj_new()
obj_destroy, *state.datasets
endif
rootNode = widget_tree(state.datasetTree, value='Datasets', $
event_pro='spdfIgnoreSelected', $
/folder, /expanded)
widget_control, /hourglass
datasets = state.cdas->getDatasets( $
dataview = *state.selectedDataview, $
observatoryGroups = observatoryGroups, $
instrumentTypes = instrumentTypes, $
authenticator=state.authenticator, $
httpErrorReporter=state.errorDialog)
if ~obj_valid(datasets[0]) then begin
reply = dialog_message( $
['No datasets were found matching the selection criteria.',$
'Please change the selection criteria.'], $
title='Datasets Not Found', /center, /information)
obj_destroy, datasets
return
endif
*state.datasets = datasets
for i = 0, n_elements(datasets) - 1 do begin
datasetId = datasets[i]->getId()
datasetLabel = datasets[i]->getLabel()
datasetTimeRange = datasets[i]->getTimeInterval()
datasetTitle = datasetId + ': ' + $
datasetTimeRange->getCdawebStart() + ' - ' + $
datasetTimeRange->getCdawebStop() + ': ' + datasetLabel
variables = state.cdas->getVariables( $
datasetId, $
dataview = *state.selectedDataview, $
authenticator=state.authenticator, $
httpErrorReporter=state.errorDialog)
if obj_valid(variables[0]) then begin
datasetNode = widget_tree(rootNode, value=datasetTitle, $
/folder, uvalue=datasetId, $
event_pro='spdfDatasetTreeEvent')
for j = 0, n_elements(variables) - 1 do begin
varName = variables[j]->getName()
varDescription = variables[j]->getLongDescription()
if varDescription eq '' then begin
varDescription = variables[j]->getShortDescription()
endif
varTitle = varName + ': ' + varDescription
varNode = widget_tree(datasetNode, value=varTitle, $
event_pro='spdfIgnoreSelected', $
uvalue={datasetId:datasetId, varName:varName})
endfor
endif
obj_destroy, variables
endfor
end
function spdfIsValidDate, $
value
compile_opt idl2
return, stregex(value, $
'[12][0-9]{3}[-/][01][0-9][-/][0-3][0-9]([ T][0-2][0-9]:[0-5][0-9]:[0-5][0-9])?', $
/boolean)
end
function spdfGetDatasetSelection, $
datasetTree, selectedDatasetId, selectedVarNames
compile_opt idl2
selectedItems = widget_info(datasetTree, /tree_select)
if selectedItems[0] eq -1 then begin
reply = dialog_message( $
'Please choose one or more Variables within a single Dataset', $
title='Dataset Variable Selection', /center, /error)
return, 0
endif
datasetsSelected = 0
varsSelected = 0
selectedDatasetId = ''
for i = 0, n_elements(selectedItems) - 1 do begin
if ~widget_info(selectedItems[i], /tree_folder) then begin
widget_control, selectedItems[i], $
get_uvalue=selectedDataset
if selectedDataset.datasetId ne selectedDatasetId then begin
datasetsSelected++
selectedDatasetId = selectedDataset.datasetId
varsSelected = 0
endif
varsSelected++
endif
endfor
if datasetsSelected eq 1 then begin
selectedVarNames = strarr(varsSelected)
selectedVarIndex = 0
for i = 0, n_elements(selectedItems) - 1 do begin
if ~widget_info(selectedItems[i], /tree_folder) then begin
widget_control, selectedItems[i], $
get_uvalue=selectedDataset
selectedVarNames[selectedVarIndex] = $
selectedDataset.varName
selectedVarIndex++
endif
endfor
endif else begin
reply = dialog_message( $
'Please choose one or more Variables within a single Dataset', $
title='Dataset Variable Selection', /center, /error)
return, 0
endelse
return, 1
end
function spdfGetSpecifiedTime, $
startTimeWidget, stopTimeWidget
compile_opt idl2
widget_control, startTimeWidget, get_value=startTime
if ~spdfIsValidDate(startTime) then begin
reply = dialog_message( $
['The Start Time must be set to a valid value', $
'YYYY/MM/DD[ HH:MM:SS]'], $
title='Invalid Date', /center, /error)
return, obj_new()
endif
widget_control, stopTimeWidget, get_value=stopTime
if ~spdfIsValidDate(stopTime) then begin
reply = dialog_message( $
['The Stop Time must be set to a valid value', $
'YYYY/MM/DD[ HH:MM:SS]'], $
title='Invalid Date', /center, /error)
return, obj_new()
endif
timeInterval = obj_new('SpdfTimeInterval', startTime, stopTime)
if ~timeInterval->isStartLessThanStop() then begin
reply = dialog_message( $
'Start Time must be less than Stop Time value', $
title='Invalid Time Interval', /center, /error)
obj_destroy, timeInterval
return, obj_new()
endif
return, timeInterval
end
pro spdfGetCdawebDataCmd, $
state, timeInterval, datasetId, varNames
compile_opt idl2
widget_control, state.dataVarName, get_value=dataVarName
datasetCmdTxt = "'" + datasetId + "'"
varCmdTxt = "['" + varNames[0] + "'"
for i = 1, n_elements(varNames) - 1 do begin
varCmdTxt = varCmdTxt + ", '" + varNames[i] + "'"
endfor
varCmdTxt = varCmdTxt + "]"
if obj_valid(timeInterval) then begin
timeCmdTxt = "['" + timeInterval->getIso8601Start() + $
"', '" + timeInterval->getIso8601Stop() + "']"
endif else begin
timeCmdTxt = "[t_init, t_final]"
endelse
print, dataVarName, ' = spdfgetdata(', datasetCmdTxt, ', ', $
varCmdTxt, ', ', timeCmdTxt, ')'
reply = dialog_message( $
['The specified data can be read into the IDL environment by', $
'executing the IDL statements that were printed on the ', $
'IDL console.'], $
title='Get Data Operation', /center, /information)
end
function spdfCdfEpoch2Julday, $
epoch
compile_opt idl2
julday = dblarr(n_elements(epoch), /nozero)
for i = 0, n_elements(epoch) - 1 do begin
cdf_epoch, epoch[i], /breakdown_epoch, $
year, month, day, hour, minute, second, millisecond
secondMillisecond = float(second) + float(millisecond) / 1000.0
julday[i] = julday (month, day, year, hour, minute, secondMillisecond)
endfor
return, julday
end
pro spdfGetCdawebDataExec, $
state, timeInterval, datasetId, varNames
compile_opt idl2
widget_control, state.dataVarName, get_value=dataVarName
if dataVarName eq '' then begin
reply = dialog_message( $
'A name for the result variable must be set.', $
title='Missing Variable Name', /center, /error)
return
endif
widget_control, /hourglass
dataResults = $
state.cdas->getCdfData($
timeInterval, datasetId, varNames, $
dataview=*state.selectedDataview, $
authenticator=state.authenticator, $
httpErrorReporter=state.errorDialog)
fileDescriptions = dataResults->getFileDescriptions()
if obj_valid(fileDescriptions) and $
n_elements(fileDescriptions) gt 0 then begin
localCdfNames = strarr(n_elements(fileDescriptions))
for i = 0, n_elements(fileDescriptions) - 1 do begin
localCdfNames[i] = fileDescriptions[i]->getFile()
endfor
localCdfNames2 = localCdfNames
cdfData = spdf_read_mycdf(varNames, localCdfNames2)
(scope_varFetch(dataVarName, /enter, level=1)) = $
spdf_hsave_struct(cdfData, /nosave)
resultMsgLines = n_elements(varNames) + 1
if *state.saveData then begin
resultMsgLines += n_elements(localCdfNames) + 1
endif
resultMsg = strarr(resultMsgLines)
resultMsg[0] = $
'The selected data is now available in'
for i = 0, n_elements(varNames) - 1 do begin
resultMsg[1 + i] = $
' ' + dataVarName + '.' + varNames[i] + '.dat'
endfor
if *state.saveData then begin
resultMsgIndex = n_elements(varNames)
resultMsg[resultMsgIndex++] = $
'Also, the downloaded data has been saved in'
for i = 0, n_elements(localCdfNames) - 1 do begin
resultMsg[resultMsgIndex + i] = $
' ' + localCdfNames[i]
endfor
endif else begin
file_delete, localCdfNames, /ALLOW_NONEXISTENT, /QUIET
endelse
endif else begin
resultMsg = 'No data found with the specified parameters.'
endelse
obj_destroy, fileDescriptions
obj_destroy, dataResults
reply = dialog_message(resultMsg, $
title='Get Data Operation', /center, /information)
end
pro spdfGetCdawebData, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
if spdfGetDatasetSelection(state.datasetTree, $
selectedDatasetId, selectedVarNames) ne 1 then return
timeInterval = spdfGetSpecifiedTime(state.startTime, state.stopTime)
if ~obj_valid(timeInterval) then return
spdfGetCdawebDataExec, $
state, timeInterval, selectedDatasetId, selectedVarNames
obj_destroy, timeInterval
end
pro spdfGetCdawebDataIdl, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
if spdfGetDatasetSelection(state.datasetTree, $
selectedDatasetId, selectedVarNames) ne 1 then return
widget_control, state.startTime, get_value=startTime
widget_control, state.stopTime, get_value=stopTime
if startTime eq '' and stopTime eq '' then begin
timeInterval = obj_new()
endif else begin
timeInterval = $
spdfGetSpecifiedTime(state.startTime, state.stopTime)
if ~obj_valid(timeInterval) then return
endelse
spdfGetCdawebDataCmd, $
state, timeInterval, selectedDatasetId, selectedVarNames
obj_destroy, timeInterval
end
pro spdfReadLocalData, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
widget_control, state.dataVarName, get_value=dataVarName
files = dialog_pickfile(default_extension='cdf', $
filter=['*.cdf'], /fix_filter, $
/multiple_files, /must_exist, /read)
widget_control, /hourglass
if files ne '' then begin
cdfData = spdf_read_mycdf(varNames, files, all=1)
(scope_varFetch(dataVarName, /enter, level=1)) = $
spdf_hsave_struct(cdfData, /nosave)
reply = dialog_message($
'Data from the selected file(s) is now available in ' $
+ dataVarName + '.dat', $
title='Read Data Operation', /center, /information)
endif
end
pro spdfGetCdawebPlot, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
widget_control, state.dataVarName, get_value=dataVarName
if n_elements((scope_varFetch(dataVarName, /enter, level=1))) then begin
copyOfData = scope_varFetch(dataVarName, level=1)
s = spdf_plotmaster(copyOfData, xsize=600, /AUTO, /CDAWEB, /SMOOTH, /SLOW)
endif else begin
reply = dialog_message( $
'Data must be retrieved before plotting it', $
title='Get Plot Operation', /center, /error)
endelse
end
pro spdfCreateCdawebListing, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
widget_control, state.dataVarName, get_value=dataVarName
if n_elements((scope_varFetch(dataVarName, /enter, level=1))) then begin
filename = dialog_pickfile(default_extension='txt', $
filter=['*.txt', '*.asci'], $
/overwrite_prompt, /write)
if filename ne '' then begin
copyOfData = scope_varFetch(dataVarName, level=1)
listing = spdf_list_mystruct(copyOfData, filename=filename[0])
xdisplayfile, filename[0], group=event.top
endif
endif else begin
reply = dialog_message( $
'Data must be read before listing it', $
title='Get Plot Operation', /center, /error)
endelse
end
pro spdfExit, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
obj_destroy, state.errorDialog
obj_destroy, state.authenticator
obj_destroy, state.cdas
obj_destroy, state.dataviews
ptr_free, state.selectedDataview
ptr_free, state.observatoryGroups
ptr_free, state.instrumentTypes
if n_elements(*state.datasets) then obj_destroy, *state.datasets
ptr_free, state.datasets
ptr_free, state.selectedDataset
ptr_free, state.saveData
heap_gc
widget_control, event.top, /destroy
end
pro spdfAbout, $
event
compile_opt idl2
widget_control, event.top, get_uvalue=state
reply = dialog_message([ $
'NASA/Goddard Space Flight Center (GSFC)',$
'Space Physics Data Facility (SPDF)', $
'http://spdf.gsfc.nasa.gov/', $
'', $
'Current CDAWlib version: ' + spdf_version(), $
'Current SpdfCdas version: ' + state.cdas->getversion()], $
title='About', /center, /information)
end
function spdfGetDataviews, $
cdas
compile_opt idl2
if ~(cdas->isUpToDate()) then begin
reply = dialog_message([ $
'Current CDAWlib version: ' + spdf_version(), $
'Current SpdfCdas version: ' + cdas->getversion(), $
'Available SpdfCdas version: ' + cdas->getCurrentversion(), $
'There is a newer version of the SpdfCdas library available.'], $
title='Version Warning', /center, /information)
endif
dataviews = cdas->getDataviews()
extraDataviewIds = getenv('SPDF_EXTRA_DATAVIEWS')
if strlen(extraDataviewIds) eq 0 then begin
return, dataviews
endif
extraDataviewIds = strsplit(extraDataviewIds, ':', /extract)
numExtraDataviews = 0
for i = 0, n_elements(extraDataviewIds) - 1 do begin
datasets = cdas->getDatasets(dataview = extraDataviewIds[i])
if n_elements(datasets) eq 1 && $
~obj_valid(datasets[0]) then begin
print, extraDataviewIds[i], $
' does not appear to be a valid dataview.', $
' It will be ignored.'
extraDataviewIds[i] = ''
endif else begin
numExtraDataviews = numExtraDataviews + 1
endelse
endfor
if numExtraDataviews gt 0 then begin
expandedDataviews = $
objarr(n_elements(dataviews) + numExtraDataviews, /nozero)
for i = 0, n_elements(dataviews) - 1 do begin
expandedDataviews[i] = dataviews[i]
endfor
endpointAddress = dataviews[0]->getEndpointAddress()
endpointAddress = $
strsplit(endpointAddress, dataviews[0]->getId(), $
/regex, /extract)
j = 0
for i = n_elements(dataviews), $
n_elements(expandedDataviews) - 1 do begin
while extraDataviewIds[j] eq '' do j = j + 1
expandedDataviews[i] = $
obj_new('SpdfDataviewDescription', $
extraDataviewIds[j], endpointAddress, $
extraDataviewIds[j], '', '', 1b, '', 0b)
j = j + 1
endfor
return, expandedDataviews
endif
return, dataviews
end
pro spdfCdawebChooser, $
endpoint = endpoint, $
GROUP_LEADER = groupLeaderWidgetId
compile_opt idl2
RESOLVE_ROUTINE, 'spdf_virtual_funcs', /COMPILE_FULL_FILE
cd, current=cwd
if ~file_test(cwd, /write) then begin
print, 'Error: The current working directory (', $
cwd, ') is not writable.'
print, 'Downloaded files are saved in the current working directory.'
print, 'Use the IDL CD procedure to change the current working'
print, 'directory to one that is writable and then re-run'
print, 'SpdfCdawebChooser.'
return
endif
if ~keyword_set(endpoint) then begin
endpoint = 'http://cdaweb.gsfc.nasa.gov/WS/cdasr/1'
endif
if keyword_set(groupLeaderWidgetId) then begin
tlb = widget_base(title='CDAWeb Data Chooser', /column, $
GROUP_LEADER=groupLeaderWidgetId)
defaultSaveCdfOption = 1
endif else begin
tlb = widget_base(title='CDAWeb Data Chooser', /column)
defaultSaveCdfOption = 0
endelse
cdas = $
obj_new('SpdfCdas', $
endpoint=endpoint, $
userAgent='CdawebChooser/1.0')
dataviews = spdfGetDataviews(cdas)
if ~obj_valid(dataviews[0]) then begin
reply = dialog_message( $
['Could not connect to CDAWeb.', $
'Please check Internet connectivity to ', $
'http://cdaweb.gsfc.nasa.gov/.'], $
title='Network Error', /center, /error)
return
endif
initialDvSelection = 0
dvTitles = strarr(n_elements(dataviews))
for i = 0, n_elements(dataviews) - 1 do begin
dvTitles[i] = dataviews[i]->getTitle()
if dataviews[i]->getId() eq 'sp_phys' then begin
initialDvSelection = i
endif
endfor
dvBase = widget_base(tlb, frame=3, /column)
dvLabel = widget_label(dvBase, /align_left, $
value='Dataview Selection: ')
dvList = widget_combobox(dvBase, event_pro='spdfDataviewSelected', $
value=dvTitles)
datasetSelectionPanel = widget_base(tlb, frame=3, /column)
datasetSelectionLabel = $
widget_label(datasetSelectionPanel, /align_left, $
value='Dataset Selection:')
miPanel = widget_base(datasetSelectionPanel, /row)
missionGroups = ['']
missionGroupsPanel = widget_base(miPanel, /column)
mLabel = widget_label(missionGroupsPanel, value='Mission Groups')
mList = widget_list(missionGroupsPanel, $
event_pro='spdfIgnoreSelected', $
value=missionGroups, xsize=50, ysize=7, /multiple)
instrumentTypes = ['']
instrumentTypesPanel = widget_base(miPanel, /column)
iLabel = widget_label(instrumentTypesPanel, $
value='Instrument Types')
iList = widget_list(instrumentTypesPanel, $
event_pro='spdfIgnoreSelected', $
value=instrumentTypes, xsize=50, ysize=7, /multiple)
dsButton = widget_button(datasetSelectionPanel, $
/align_left, $
event_pro='spdfFindDatasets', $
value='Find Datasets', $
tooltip='Find datasets for the specified mission groups and instrument types')
dataSelectionPanel = widget_base(tlb, frame=3, /column)
dataSelectionLabel = $
widget_label(dataSelectionPanel, /align_left, $
value='Data Selection:')
dsLabel = widget_label(dataSelectionPanel, $
value='Datasets/Variables')
dsTree = widget_tree(dataSelectionPanel, /multiple, $
/context_events, event_pro='spdfDatasetTreeEvent', $
xsize=600, ysize=240)
dsContextMenu = widget_base(tlb, /context_menu)
viewNotesButton = widget_button(dsContextMenu, $
event_pro='spdfViewNotes', $
value="View Notes")
viewInventoryButton = widget_button(dsContextMenu, $
event_pro='spdfViewInventory', $
value="View Inventory")
timePanel = widget_base(dataSelectionPanel, /row)
defaultTimeButton = widget_button(timePanel, $
event_pro='spdfDefaultTime', $
value="Set Default Time")
startTime = cw_field(timePanel, title='Start Time')
stopTime = cw_field(timePanel, title='Stop Time')
timeFormatLabel = widget_label(timePanel, $
value='Format YYYY/MM/DD[ HH:MM:SS]')
dataOperationPanel = widget_base(tlb, frame=3, /column)
dataOperationLabel = $
widget_label(dataOperationPanel, /align_left, $
value='Data Operation:')
optionPanel = widget_base(dataOperationPanel, /row)
dataVarName = cw_field(optionPanel, title='Variable Name', $
value='data')
saveCdfOption = cw_bgroup(optionPanel, $
['Save local CDF files'], $
/nonexclusive, /frame, $
label_left='File Option', $
event_funct='spdfSaveDataButton', $
set_value=[defaultSaveCdfOption])
actionPanel = widget_base(dataOperationPanel, /row)
dataButton = widget_button(actionPanel, $
event_pro='spdfGetCdawebData', $
value='Get CDAWeb Data', $
tooltip='Read CDAWeb data into IDL environment')
idlButton = widget_button(actionPanel, $
event_pro='spdfGetCdawebDataIdl', $
value='Show Get Data IDL', $
tooltip='Display IDL code to get data')
fileButton = widget_button(actionPanel, $
event_pro='spdfReadLocalData', $
value='Read Local CDF', $
tooltip='Read data from local file into IDL environment')
plotButton = widget_button(actionPanel, $
event_pro='spdfGetCdawebPlot', $
value='Show CDAWlib Plot', $
tooltip="Display CDAWlib's plot of the data")
listButton = widget_button(actionPanel, $
event_pro='spdfCreateCdawebListing', $
value='Create CDAWlib Listing', $
tooltip="Create CDAWlib's listing of the data")
bottomPanel = widget_base(tlb, frame=3, row=1)
programControlPanel = widget_base(bottomPanel, /column)
programControlLabel = $
widget_label(programControlPanel, /align_left, $
value='Window Control:')
exitButton = widget_button(programControlPanel, /align_left, $
event_pro='spdfExit', $
value='Close', tooltip='Close this window')
state = { $
errorDialog:obj_new('SpdfHttpErrorDialog'), $
authenticator:obj_new('SpdfCdawebChooserAuthenticator', tlb), $
cdas:cdas, $
selectedDataview:ptr_new(/allocate_heap), $
dataviews:dataviews, $
dataviewList:dvList, $
observatoryGroups:ptr_new(/allocate_heap), $
observatoryGroupList:mList, $
instrumentTypes:ptr_new(/allocate_heap), $
instrumentTypeList:iList, $
datasets:ptr_new(/allocate_heap), $
datasetTree:dsTree, $
selectedDataset:ptr_new(/allocate_heap), $
datasetContextMenu:dsContextMenu, $
startTime:startTime, $
stopTime:stopTime, $
dataVarName:dataVarName, $
saveData:ptr_new(defaultSaveCdfOption) $
}
widget_control, tlb, set_uvalue=state, /realize
if keyword_set(groupLeaderWidgetId) then begin
xmanager, 'SpdfCdawebChooser', tlb, $
group_leader=groupLeaderWidgetId
endif else begin
xmanager, 'SpdfCdawebChooser', tlb, /no_block
endelse
spdfSelectDataview, tlb, dvList, initialDvSelection
end