WoDialogStatus Procedure
Saves or restores the status of a dialog box by saving or restoring the state of its widgets as stored in the Tools Manager.
Usage
WoDialogStatus, toolname, status
Input Parameters
toolname — (string) Specifies the unique name of the VDA Tool with which the dialog is associated.
status — Specifies a structure containing the status information. The fields are:
WIDGET_ID — The widget ID of the widget to be saved or restored.
DEFAULT — The default value to use upon restoring the dialog if nothing is found in the Tools Manager. In other words, this is the first time the dialog is invoked.
ITEM — The Tools Manager item under which to save or restore the setting.
ATTRIBUTE — The Tools Manager attribute under which to save or restore the setting.
Keywords
Restore — If nonzero, restores the status of the dialog box.
Save — If nonzero, saves the status of the dialog box.
Verbose — If nonzero, prints messages indicating the status of WoDialogStatus. This keyword is useful for debugging.
Discussion
The WIDGET_ID, DEFAULT, and ITEM fields must occur before the ATTRIBUTE field in the structure status.
WoDialogStatus can be used to save and restore the status of any PV‑WAVE Widget that allows WwSetValue and WwGetValue calls.
Example
The following code is taken from wzpreview.pro. It shows how WoDialogStatus is used to set and restore dialog box values.
FUNCTION WzPreviewDialogCB, wid, index
DECLARE FUNC, TmGetAttribute
DECLARE FUNC, TmSetAttribute
; Get userdata and extract the tool name from the structure.
setup_data = WwGetValue(wid, /Userdata)
tool_name = setup_data.tool_name
; If OK or Apply was pressed, save the dialog. Let the
; WoGenericDialog routine handle Cancel and Help.
CASE index OF
1: BEGIN ; OK
WoDialogStatus, tool_name, setup_data.status, /Save
RETURN, 0
END
2: BEGIN ; Apply
WoDialogStatus, tool_name, setup_data.status, /Save
RETURN, 0
END
3: BEGIN ; Cancel
RETURN, 0
END
4: BEGIN ; Help
RETURN, 0
END
ENDCASE
END
PRO WzPreviewFreeDialog, tool_name
DECLARE FUNC, TmGetTop
DECLARE FUNC, TmGetAttribute
parent = TmGetTop(tool_name)
; Create the elements of the dialog.
helpfile= TmGetAttribute(tool_name, 'TM_HELP', 'HELP_FILE')
topic = TmGetMessage('wzpreview.ads', $
'WzPreview_free_dialog_help')
title = TmGetMessage('wzpreview.ads', $
'WzPreview_free_title') + tool_name
free_dialog = WoGenericDialog(parent, layout, $
'WzPreviewDialogCB', Dialog_name = 'freeDialog', $
Title=title, Buttons=buttons, Help=[topic, helpfile], $
/Ok, /Apply, /Cancel)
; Create the elements of the dialog.
separator_label = WwText(layout, Text='', /Label, $
Name='separatorLabel', /Top, /Left) separator_radio = $
WwRadioBox(layout, ['','','',''], /NOfMany, /Vertical, $
/Form, Layout_name='separatorForm', $
Name=['spaceToggle','commaToggle', 'tabToggle', $
'otherToggle'], Toggles=separator_toggles, $
Top=separator_label, /Left)
other_text = WwText(separator_radio, Text='', $
Top=separator_toggles(2), Left=separator_toggles(3))
; Create data structure needed in the dialog callback.
status = {, $
WIDGET_ID: separator_toggles(0), $
DEFAULT: 1, $
ITEM: 'TM', $
ATTRIBUTE: 'SPACE_SEPARATOR', $
WIDGET_ID: separator_toggles(1), $
DEFAULT: 1, $
ITEM: 'TM', $
ATTRIBUTE: 'COMMA_SEPARATOR', $
WIDGET_ID: separator_toggles(2), $
DEFAULT: 1, $
ITEM: 'TM', $
ATTRIBUTE: 'TAB_SEPARATOR', $
WIDGET_ID: separator_toggles(3), $
DEFAULT: 0, $
ITEM: 'TM', $
ATTRIBUTE: 'OTHER_SEPARATOR', $
WIDGET_ID: other_text, $
DEFAULT: '', $
ITEM: 'TM', $
ATTRIBUTE: 'OTHER_SEPARATOR_TEXT' $
}
; Use WoDialogStatus to restore values previously saved from
; this dialog. If this is first time this dialog is displayed
; the widgets are initialized from DEFAULT field values.
WoDialogStatus, tool_name, status, /Restore
; Set the tool name and the above structure as the userdata on
; the dialog buttons--we need the status structure to save the
; dialog status in the dialogs callback.
setup_data = {, tool_name: tool_name, status: status}
; Set the userdata for all the buttons on the dialog.
FOR i=1L, N_ELEMENTS(buttons) DO $
s = WwSetValue(buttons(i-1), Userdata=setup_data)
; Show the dialog.
s = WwSetValue(free_dialog, /Show)
END