## 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