PPG.PPGLayout

Introduced

v4.0

Description

Returns the PPGLayout for the currently inspected object. By changing the PPGLayout's contents, it is possible to dynamically change the UI from within logic code. After changes are complete use PPG.Refresh to redraw the user interface.

Examples

JScript Example

// JScript Custom Property example demonstrating how to
// build a simple Script viewer by using the
// siControlFolder, siControlCombo and multi-line string
// control.
//
// Note: This example could be extended: for example by adding a 
// "Save" and "New" button.
Main()
function Main()
{
	var oCustomProperty = ActiveSceneRoot.AddProperty( 
	                          "CustomProperty", false,
	                          "Script View" ) ;
	oCustomProperty.AddParameter3( "Dir", siString ) ;
	oCustomProperty.AddParameter3( "Scripts", siString ) ;
	oCustomProperty.AddParameter3( "File", siString ) ;
	var oLayout = oCustomProperty.PPGLayout
	oLayout.AddGroup( "Script Directory" ) ;
	var oItem = oLayout.AddItem( "Dir", "Directory", "Folder" ) ;	
	oItem.SetAttribute( "NoLabel", true ) ;	
	oLayout.EndGroup() ;
	oLayout.AddGroup( "Script File" ) ;
	var oItem = oLayout.AddEnumControl( "Scripts", Array(),
		             "", siControlCombo ) ;
	oItem.SetAttribute( "NoLabel", true ) ;	
	oLayout.EndGroup();
	oLayout.AddGroup( "File Contents" ) ;
	var oItem = oLayout.AddString( "File", "", true, 200 ) ;
	oItem.SetAttribute( "NoLabel", true ) ;	
	oLayout.EndGroup() ;
	oLayout.Language = "Jscript" ;
	oLayout.Logic = OnInit.toString() +
		             PopulateCombo.toString() +
		             Dir_OnChanged.toString() +
		             Scripts_OnChanged.toString();
	strDefaultDir = Application.InstallationPath( siUserPath ) + 
	                     "/Data/Scripts" ;
	oCustomProperty.Dir = strDefaultDir ;	
	InspectObj( oCustomProperty );
}
//
// The remaining code is event code which
// is injected into the PPG layout.
//
function OnInit()
{
	PopulateCombo() ;	
}
function Dir_OnChanged()
{
	PopulateCombo() ;
	PPG.File.Value = "" ;
}
function Scripts_OnChanged()
{
	strDir = PPG.Dir.Value 
	strScript = PPG.Scripts.Value 
	if ( strDir == "" || strScript == "" )
	{
		PPG.File.Value = "" ;
		return ;
	}
	try
	{
		var oFSO = new ActiveXObject( "Scripting.FileSystemObject" ) ;		
		var oFile = oFSO.OpenTextFile( strDir + "/" + strScript ) ;
		PPG.File.Value = oFile.ReadAll() ;
	}
	catch( e )
	{
		PPG.File.Value = "" ;
		Application.LogMessage ( "Error reading file " + 
		             strDir + "/" + strScript + 
		             "(" + e.Description + ")" ) ;
	}
}
function PopulateCombo()
{
	strDir = PPG.Dir.Value ;
	strOldValue = PPG.Scripts.Value ; 
	// Get access to the PPGLayout object
var oLayout = PPG.PPGLayout ;
	// The Combo box definition is part of the layout.
	// We look it up based on the script name of the associated
	// parameter
	var oCombo = PPG.PPGLayout.Item( "Scripts" ) ;
	if ( strDir == "" )
	{
		//Flush any contents
		oCombo.UIItems = null ;
		PPG.Scripts.Value = "" ;
	}
	else
	{
		var oFSO = new ActiveXObject( "Scripting.FileSystemObject" ) ;		
		var oItems = new Array() ;
		try
		{
			bFoundOldValue = false ;
			var oFolder = oFSO.GetFolder( strDir ) ;
		   fc = new Enumerator(oFolder.files);
		   for (; !fc.atEnd(); fc.moveNext())
		   {
		   		var oFile = fc.item() ;
		   		if ( -1 != oFile.Name.indexOf( ".vbs" ) ||
			   		  -1 != oFile.Name.indexOf( ".js" ) ||
			   		  -1 != oFile.Name.indexOf( ".pys" ) ||
			   		  -1 != oFile.Name.indexOf( ".pls" ) )
			   	{			   		 		   		
			   		// Both label and value will be the string name
			   		oItems.push( oFile.Name ) ;
		   			oItems.push( oFile.Name ) ;
		   			if ( strOldValue == oFile.Name )
		   			{
		   				bFoundOldValue = true ;
		   			}
		   		}
		   }
			oCombo.UIItems = oItems ;
			if ( bFoundOldValue )
			{
				// This is the case when you close and reopen the
				// property page - we want to restore the original 
				// setting if possible.
				PPG.Scripts.Value = strOldValue ;
			}
			else
			{
				// We leave the value empty
				// so that the user actually 
				// picks a script file
				// before we load anything
				PPG.Scripts.Value = "" ;
			}
		}
		catch( e )
		{
			Application.LogMessage( "Error finding script files" +
		           " in specified directory: " + e.Description );
		}
	}	
	// Necessary to make sure the updated Combo is drawn
	PPG.Refresh() ;
}

See Also

ProjectItem.PPGLayout InspectObj