Close (PPG)

Introduced

4.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.

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



Autodesk Softimage v7.5