v4.0
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.
// 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() ; } |