::mdlWizardDlg
This command creates a dialog designed to easily contain multiple “pages”, multiple configurable buttons and a “built-in” message box to report messages.
Syntax
::model::mdlWizardDlg path
Application
MotionView Tcl GUI
Description
This command creates a dialog designed to easily contain multiple “pages”, multiple configurable buttons and a “built-in” message box to report messages.
Inputs
- path
- The name of the window that is to be created to contain the dialog.
Example
To create a wizard dialog that contains a page for each point and lets the user traverse
the pages with “< Back” and <Next >”
buttons:
namespace eval ::my_wizard {
variable p_dlg ""
variable panel_list {}
variable current_panel 0
}
proc ::my_wizard::Run {} {
set mangle [::model::GetMangle my_wizard_Run]
variable p_dlg
variable current_panel 0
set p_dlg [::model::mdlWizardDlg wiz$mangle -width 600 -height 400 \
-title "My Wizard" -showExport false -callback "::my_wizard::OnClose"]
set frm [::model::mdlWizardDlg::GetButtonFrame $p_dlg]
::model::mdlWizardDlg::AddButtonToActionFrame $frm btnBack 4 "< Back" ::my_wizard::OnBack
::model::mdlWizardDlg::AddButtonToActionFrame $frm btnNext 6 "Next >" ::my_wizard::OnNext
::model::mdlWizardDlg::SetCloseButtonText "Finish"
variable panel_list [InitializePanelList]
DisplayPanel
::model::mdlWizardDlg::ShowDialog
}
proc ::my_wizard::InitializePanelList {} {
hwi GetSessionHandle sess1
sess1 GetProjectHandle pro1
sess1 ReleaseHandle
pro1 GetPageHandle pa1 [pro1 GetActivePage]
pro1 ReleaseHandle
pa1 GetWindowHandle win1 [pa1 GetActiveWindow]
pa1 ReleaseHandle
win1 GetClientHandle mcl
win1 ReleaseHandle
mcl GetRootObjectHandle mo
mcl ReleaseHandle
mo InterpretEntity en1 Point p_1 "\"Point 1\""
mo InterpretEntity en2 Point p_2 "\"Point 2\""
mo InterpretEntity en3 Point p_3 "\"Point 3\""
mo ReleaseHandle
return { en1 en2 en3 }
}
proc ::my_wizard::DisplayPanel {} {
set mangle [::model::GetMangle my_wizard_DisplayPanel]
variable current_panel
variable panel_list
set tmp [lindex $panel_list $current_panel]
$tmp GetObjectHandle pCurPoint$mangle
set lbl "My Wizard - [pCurPoint$mangle GetLabel]"
pCurPoint$mangle ReleaseHandle
::model::mdlWizardDlg::ChangeTitle "$lbl"
set frmParent [::model::mdlWizardDlg::GetDialogFrame]
grid rowconfigure $frmParent 0 -weight 1
grid columnconfigure $frmParent 0 -weight 1
catch { destroy $frmParent.frmPanel }
set frm [frame $frmParent.frmPanel]
grid rowconfigure $frm 0 -weight 1
grid columnconfigure $frm 0 -weight 1
set txt "Point: $lbl"
set wLbl [label $frm.lbl -text $txt]
grid $wLbl -row 0 -column 0
grid $frm -row 0 -column 0 -sticky nesw
UpdateBackNextButtonStates
}
proc ::my_wizard::UpdateBackNextButtonStates {} {
variable p_dlg
variable current_panel
variable panel_list
set nLastIndex [ expr { [llength $panel_list] - 1 } ]
set frm [::model::mdlWizardDlg::GetButtonFrame $p_dlg]
set bEnableBack [ expr { $current_panel > 0 && $nLastIndex > 0} ]
set bEnableNext [ expr { $current_panel < $nLastIndex } ]
if { $bEnableBack } { ::hwt::EnableCanvasButton $frm.btnBack } else { ::hwt::DisableCanvasButton $frm.btnBack }
if { $bEnableNext } { ::hwt::EnableCanvasButton $frm.btnNext } else { ::hwt::DisableCanvasButton $frm.btnNext }
}
proc ::my_wizard::OnNext { args } {
variable current_panel
incr current_panel 1
DisplayPanel
UpdateBackNextButtonStates
}
proc ::my_wizard::OnBack { args } {
variable current_panel
incr current_panel -1
DisplayPanel
UpdateBackNextButtonStates
}
proc ::my_wizard::OnClose { args } {
variable p_dlg
hwt::UnpostWindow $p_dlg
return 1
}
::my_wizard::Run
Errors
None.