mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-25 17:43:44 +00:00
Parametrize script extension, default to 'tscript'
This commit is contained in:
parent
b8b62292bd
commit
099dd4f1f3
542 changed files with 774 additions and 783 deletions
368
Templates/BaseGame/game/tools/gui/objectSelection.ed.tscript
Normal file
368
Templates/BaseGame/game/tools/gui/objectSelection.ed.tscript
Normal file
|
|
@ -0,0 +1,368 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Common code for object selection dialogs.
|
||||
|
||||
|
||||
//=============================================================================================
|
||||
// Initialization.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::init( %this )
|
||||
{
|
||||
// Initialize the class list.
|
||||
|
||||
%classList = %this-->classList;
|
||||
if( isObject( %classList ) )
|
||||
%this.initClassList();
|
||||
|
||||
// Initialize the filter list.
|
||||
|
||||
%filterList = %this-->filterList;
|
||||
if( isObject( %filterList ) )
|
||||
%this.initFilterList();
|
||||
|
||||
// Initialize the group list.
|
||||
|
||||
%groupList = %this-->groupList;
|
||||
if( isObject( %groupList ) )
|
||||
%this.initGroupList();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::cleanup( %this )
|
||||
{
|
||||
// Clear the class list.
|
||||
|
||||
%classList = %this-->classList;
|
||||
if( isObject( %classList ) )
|
||||
%classList.clear();
|
||||
|
||||
// Clear the filter list.
|
||||
|
||||
%filterList = %this-->filterList;
|
||||
if( isObject( %filterList ) )
|
||||
%filterList.clear();
|
||||
|
||||
// Clear the group list.
|
||||
|
||||
%groupList = %this-->groupList;
|
||||
if( isObject( %groupList ) )
|
||||
%groupList.clear();
|
||||
|
||||
// Delete the class array.
|
||||
|
||||
if( isObject( %this.classArray ) )
|
||||
%this.classArray.delete();
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
// Methods to override in a subclass.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
/// Return the group object where onSelectObjects should begin searching for objects.
|
||||
function EObjectSelection::getRootGroup( %this )
|
||||
{
|
||||
return RootGroup;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
/// Return a set that contains all filter objects to include in the filter list.
|
||||
/// Returning 0 will leave the filter list empty.
|
||||
function EObjectSelection::getFilterSet( %this )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
/// Return true if the given class should be included in the class list.
|
||||
function EObjectSelection::includeClass( %this, %className )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
/// The object has met the given criteria. Select or deselect it depending on %val.
|
||||
function EObjectSelection::selectObject( %this, %object, %val )
|
||||
{
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
// Events.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::onSelectObjects( %this, %val )
|
||||
{
|
||||
// Get the root group to search in.
|
||||
|
||||
%groupList = %this-->groupList;
|
||||
if( !isObject( %groupList ) )
|
||||
%root = %this.getRootGroup();
|
||||
else
|
||||
%root = %groupList.getSelected();
|
||||
|
||||
if( !isObject( %root ) )
|
||||
return;
|
||||
|
||||
// Fetch the object name pattern.
|
||||
|
||||
%namePatternField = %this-->namePattern;
|
||||
if( isObject( %namePatternField ) )
|
||||
%this.namePattern = %namePatternField.getText();
|
||||
else
|
||||
%this.namePattern = "";
|
||||
|
||||
// Clear current selection first, if need be.
|
||||
|
||||
if( %val )
|
||||
{
|
||||
%retainSelectionBox = %this-->retainSelection;
|
||||
if( isObject( %retainSelectionBox ) && !%retainSelectionBox.isStateOn() )
|
||||
%this.clearSelection();
|
||||
}
|
||||
|
||||
// (De)Select all matching objects in it.
|
||||
|
||||
%this.selectObjectsIn( %root, %val, true );
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
// Selection.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::selectObjectsIn( %this, %group, %val, %excludeGroup )
|
||||
{
|
||||
// Match to the group itself.
|
||||
|
||||
if( !%excludeGroup && %this.objectMatchesCriteria( %group ) )
|
||||
%this.selectObject( %group, %val );
|
||||
|
||||
// Recursively match all children.
|
||||
|
||||
foreach( %obj in %group )
|
||||
{
|
||||
if( %obj.isMemberOfClass( "SimSet" ) )
|
||||
%this.selectObjectsIn( %obj, %val );
|
||||
else if( %this.objectMatchesCriteria( %obj ) )
|
||||
%this.selectObject( %obj, %val );
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::objectMatchesCriteria( %this, %object )
|
||||
{
|
||||
// Check name.
|
||||
|
||||
if( %this.namePattern !$= "" && !strIsMatchExpr( %this.namePattern, %object.getName() ) )
|
||||
return false;
|
||||
|
||||
// Check class.
|
||||
|
||||
if( !%this.isClassEnabled( %object.getClassName() ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
// Groups.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::initGroupList( %this )
|
||||
{
|
||||
%groupList = %this-->groupList;
|
||||
|
||||
%selected = 0;
|
||||
if( %groupList.size() > 0 )
|
||||
%selected = %groupList.getSelected();
|
||||
|
||||
%groupList.clear();
|
||||
|
||||
%root = %this.getRootGroup();
|
||||
if( !isObject( %root ) )
|
||||
return;
|
||||
|
||||
// Add all non-empty groups.
|
||||
|
||||
%this.scanGroup( %root, %groupList, 0 );
|
||||
|
||||
// Select initial group.
|
||||
|
||||
if( %selected != 0 && isObject( %selected ) )
|
||||
%groupList.setSelected( %selected );
|
||||
else
|
||||
%groupList.setSelected( %root.getId() );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::scanGroup( %this, %group, %list, %indentLevel )
|
||||
{
|
||||
// Create a display name for the group.
|
||||
|
||||
%text = %group.getName();
|
||||
if( %text $= "" )
|
||||
%text = %group.getClassName();
|
||||
|
||||
%internalName = %group.getInternalName();
|
||||
if( %internalName !$= "" )
|
||||
%text = %text @ " [" @ %internalName @ "]";
|
||||
|
||||
// Indent the name according to the depth in the hierarchy.
|
||||
|
||||
if( %indentLevel > 0 )
|
||||
%text = strrepeat( " ", %indentLevel ) @ %text;
|
||||
|
||||
// Add it to the list.
|
||||
|
||||
%list.add( %text, %group.getId() );
|
||||
|
||||
// Recurse into SimSets with at least one child.
|
||||
|
||||
foreach ( %obj in %group )
|
||||
{
|
||||
if( !%obj.isMemberOfClass( "SimSet" )
|
||||
|| %obj.getCount() == 0 )
|
||||
continue;
|
||||
|
||||
%this.scanGroup( %obj, %list, %indentLevel + 1 );
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
// Filters.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::initFilterList( %this )
|
||||
{
|
||||
%filterList = %this-->filterList;
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
// Classes.
|
||||
//=============================================================================================
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
/// Initialize the list of class toggles.
|
||||
function EObjectSelection::initClassList( %this )
|
||||
{
|
||||
%classArray = new ArrayObject();
|
||||
%this.classArray = %classArray;
|
||||
|
||||
// Add all classes to the array.
|
||||
|
||||
%classes = enumerateConsoleClasses();
|
||||
foreach$( %className in %classes )
|
||||
{
|
||||
if( !%this.includeClass( %className ) )
|
||||
continue;
|
||||
|
||||
%classArray.push_back( %className, true );
|
||||
}
|
||||
|
||||
// Sort the class list.
|
||||
|
||||
%classArray.sortk( true );
|
||||
|
||||
// Add checkboxes for all classes to the list.
|
||||
|
||||
%classList = %this-->classList;
|
||||
%count = %classArray.count();
|
||||
for( %i = 0; %i < %count; %i ++ )
|
||||
{
|
||||
%className = %classArray.getKey( %i );
|
||||
%textLength = strlen( %className );
|
||||
%text = " " @ %className;
|
||||
|
||||
%checkBox = new GuiCheckBoxCtrl()
|
||||
{
|
||||
canSaveDynamicFields = "0";
|
||||
isContainer = "0";
|
||||
Profile = "ToolsGuiCheckBoxListFlipedProfile";
|
||||
HorizSizing = "right";
|
||||
VertSizing = "bottom";
|
||||
Position = "0 0";
|
||||
Extent = ( %textLength * 4 ) @ " 18";
|
||||
MinExtent = "8 2";
|
||||
canSave = "0";
|
||||
Visible = "1";
|
||||
tooltipprofile = "ToolsGuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
tooltip = "Include/exclude all " @ %className @ " objects.";
|
||||
text = %text;
|
||||
groupNum = "-1";
|
||||
buttonType = "ToggleButton";
|
||||
useMouseEvents = "0";
|
||||
useInactiveState = "0";
|
||||
command = %classArray @ ".setValue( $ThisControl.getValue(), " @ %i @ " );";
|
||||
};
|
||||
|
||||
%checkBox.setStateOn( true );
|
||||
%classList.addGuiControl( %checkBox );
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::selectAllInClassList( %this, %state )
|
||||
{
|
||||
%classList = %this-->classList;
|
||||
|
||||
foreach( %ctrl in %classList )
|
||||
{
|
||||
if( %ctrl.getValue() == %state )
|
||||
%ctrl.performClick();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
function EObjectSelection::isClassEnabled( %this, %className )
|
||||
{
|
||||
// Look up the class entry in the array.
|
||||
|
||||
%index = %this.classArray.getIndexFromKey( %className );
|
||||
if( %index == -1 )
|
||||
return false;
|
||||
|
||||
// Return the flag.
|
||||
|
||||
return %this.classArray.getValue( %index );
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue