v4.0
Forces the PPG to close itself. This can be useful for simulating pseudo-modal behavior in a Property Page without actually using the siModal argument to InspectObj.
PPG.Close(); |
// Jscript example of a pseudo-modal, self-destructive
// property page.
//
// In cases where a fully modal dialog box isn't suitable
// you can accomplish a very similar feature
ClosePPGDemo() ;
function ClosePPGDemo()
{
newscene( null, false ) ;
var oPSet = ActiveSceneRoot.AddCustomProperty(
"CloseDemo",
false ) ;
oPSet.AddParameter3( "MyValue", siInt4 ) ;
oPSet.AddParameter3( "Pickedobj", siString ) ;
var oPPGLayout = oPSet.PPGLayout ;
oPPGLayout.AddItem( "MyValue" ) ;
oPPGLayout.AddGroup( "Picked Object" )
oPPGLayout.AddRow() ;
var oPPGItem = oPPGLayout.AddItem( "Pickedobj" ) ;
oPPGItem.SetAttribute( siUINoLabel, true ) ;
oPPGItem = oPPGLayout.AddButton( "Pick", "Pick..." ) ;
oPPGItem.WidthPercentage = 10 ;
oPPGLayout.EndRow() ;
oPPGLayout.EndGroup() ;
oPPGLayout.AddRow();
oPPGLayout.AddButton( "OK" ) ;
oPPGLayout.AddButton( "Cancel" ) ;
oPPGLayout.EndRow();
oPPGLayout.Language = "JScript" ;
oPPGLayout.SetAttribute( "LogicPrefix", "CloseDemo_" ) ;
oPPGLayout.Logic = CloseDemo_OK_OnClicked.toString() +
CloseDemo_Cancel_OnClicked.toString() +
CloseDemo_Pick_OnClicked.toString() ;
// Pop up the Propery Page.
// It is not modal, but will clean itself up
InspectObj( oPSet ) ;
// Because the dialog is not modal
// the script will continue to execute here
// immediately, even before the Custom Property
// page has a change to appear. Be careful not
// to assume the user has already made some selection
// and dismissed the dialog. instead we leave it
// for the Spdl logic callback to complete whatever
// work we are trying to accomplish
Logmessage( "After InspectObj call" ) ;
}
// TIP: neither of these callbacks will get called if the
// user closes the dialog using the "X". These only get
// called if the specific OK and Cancel buttons are clicked.
function CloseDemo_OK_OnClicked()
{
if ( PPG.PickedObj == "" )
{
// Example of doing some validation
// before allowing the user to
// proceed
XSIUIToolkit.MsgBox( "Please pick an object first" ) ;
return ;
}
// Here is where you would do something
// based on the values in the property page
Logmessage( "User clicked OK with value: " + PPG.MyValue ) ;
// Cleanup:
// Delete the object from right beneath us
DeleteObj( PPG.Inspected.Item(0) ) ;
// Clearly it would not be safe to make any further
// Object Model calls now that our object has been
// deleted
// However rather than leaving an empty frame
// we can close the whole window
PPG.Close() ;
}
function CloseDemo_Cancel_OnClicked()
{
// Same as OK, but don't do any action
DeleteObj( PPG.Inspected.Item(0) ) ;
PPG.Close() ;
}
function CloseDemo_Pick_OnClicked()
{
// The PickObject command is a good candidate for
// a pseudo-modal dialog, because it
// does not work in modal dialogs.
// PickObject returns multiple arguments
var aRtn = PickObject( "Select Object", "Select Object" )
var buttonChoice = aRtn.Value( "ButtonPressed" ) ;
if ( buttonChoice != 0 )
{
PPG.PickedObj.Value = aRtn.Value( "PickedElement" ) ;
}
}
// Typical results of running this script:
//
//INFO : "After InspectObj call"
//INFO : "User clicked OK with value: 43" |