PPG.Close
 
 
 

PPG.Close

Introduced

v4.0

Description

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.

Scripting Syntax

PPG.Close();

Examples

JScript Example

// 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"

See Also

InspectObj DeleteObj