mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-20 04:34:48 +00:00
Since 4.0 release, the TorqueScript doesn't keep local vars in stack when calling `eval()`.
249 lines
8.3 KiB
Plaintext
249 lines
8.3 KiB
Plaintext
//-----------------------------------------------------------------------------
|
|
// 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.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// The "Object Inspector" is a useful little window for browsing and editing SimObject
|
|
// hierarchies. Be aware that there is no undo in the inspector.
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
/// Bring up a new inspector window on the given object.
|
|
function inspectObject( %object )
|
|
{
|
|
if( !isObject( %object ) )
|
|
{
|
|
error( "inspectObject: no object '" @ %object @ "'" );
|
|
return;
|
|
}
|
|
|
|
// Create a new object inspector window.
|
|
exec( "./guiObjectInspector.ed.gui" );
|
|
|
|
if( !isObject( $guiContent) )
|
|
{
|
|
error( "InspectObject: failed to create GUI from 'guiObjectInspector.ed.gui'" );
|
|
return;
|
|
}
|
|
|
|
// Initialize the inspector.
|
|
|
|
$guiContent.init( %object );
|
|
|
|
Canvas.getContent().add( $guiContent );
|
|
}
|
|
|
|
//=============================================================================================
|
|
// GuiObjectInspector
|
|
//=============================================================================================
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspector::init( %this, %object )
|
|
{
|
|
if( !%object.isMemberOfClass( "SimSet" ) )
|
|
{
|
|
// Complete deletely the splitter and the left-side part of the inspector
|
|
// leaving only the field inspector.
|
|
|
|
%this.add( %this-->panel2 );
|
|
%this-->splitter.delete();
|
|
%this-->inspector.inspect( %object );
|
|
%this-->methodList.init( %object );
|
|
}
|
|
else
|
|
{
|
|
%treeView = %this-->treeView;
|
|
%treeView.inspectorCtrl = %this-->inspector;
|
|
%treeView.methodList = %this-->methodList;
|
|
|
|
%treeView.open( %object );
|
|
}
|
|
|
|
// Set window caption.
|
|
|
|
%caption = "Object Inspector - " @ %object.getId() @ " : " @ %object.getClassName();
|
|
|
|
%name = %object.getName();
|
|
if( %name !$= "" )
|
|
%caption = %caption @ " - " @ %name;
|
|
|
|
%this.text = %caption;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspector::onClose( %this )
|
|
{
|
|
// Delete us.
|
|
%this.schedule( 1, "delete" );
|
|
}
|
|
|
|
//=============================================================================================
|
|
// GuiObjectInspectorTree
|
|
//=============================================================================================
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspectorTree::onSelect( %this, %object )
|
|
{
|
|
if( isObject( %object ) )
|
|
{
|
|
%this.inspectorCtrl.inspect( %object );
|
|
%this.methodList.init( %object );
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspectorTree::onRightMouseUp( %this, %itemId, %mousePos, %object )
|
|
{
|
|
if( !isObject( GuiObjectInspectorTreePopup ) )
|
|
new PopupMenu( GuiObjectInspectorTreePopup )
|
|
{
|
|
superClass = "MenuBuilder";
|
|
isPopup = true;
|
|
|
|
item[ 0 ] = "Jump to Definition in Torsion" TAB "" TAB "EditorOpenDeclarationInTorsion( GuiObjectInspectorTreePopup.object );";
|
|
|
|
object = "";
|
|
};
|
|
|
|
GuiObjectInspectorTreePopup.object = %object;
|
|
GuiObjectInspectorTreePopup.showPopup( Canvas );
|
|
}
|
|
|
|
//=============================================================================================
|
|
// GuiObjectInspectorMethodList
|
|
//=============================================================================================
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspectorMethodList::init( %this, %object )
|
|
{
|
|
%this.clear();
|
|
|
|
%methods = %object.dumpMethods();
|
|
%count = %methods.count();
|
|
%methodsGroup = %this.insertItem( 0, "Methods" );
|
|
%parentScripted = %this.insertItem( %methodsGroup, "Scripted" );
|
|
%parentNative = %this.insertItem( %methodsGroup, "Native" );
|
|
|
|
for( %i = 0; %i < %count; %i ++ )
|
|
{
|
|
%name = %methods.getKey( %i );
|
|
%value = %methods.getValue( %i );
|
|
%prototype = getRecord( %value, 2 );
|
|
%fileName = getRecord( %value, 3 );
|
|
%lineNumber = getRecord( %value, 4 );
|
|
%usage = getRecords( %value, 5 );
|
|
|
|
%tooltip = %prototype;
|
|
if( isFile( %fileName ) )
|
|
{
|
|
%parent = %parentScripted;
|
|
%tooltip = %tooltip NL "Declared in: " @ %fileName @ ":" @ %lineNumber;
|
|
}
|
|
else
|
|
%parent = %parentNative;
|
|
|
|
%tooltip = %tooltip @ "\n\n" @ %usage;
|
|
|
|
%id = %this.insertItem( %parent, %prototype, %fileName NL %lineNumber );
|
|
%this.setItemTooltip( %id, %tooltip );
|
|
}
|
|
|
|
%methods.delete();
|
|
|
|
if( %object.isMethod( "getDebugInfo" ) )
|
|
{
|
|
%debugInfo = %object.getDebugInfo();
|
|
%count = %debugInfo.count();
|
|
%parent = %this.insertItem( 0, "Debug Info" );
|
|
|
|
for( %i = 0; %i < %count; %i ++ )
|
|
%id = %this.insertItem( %parent, %debugInfo.getKey( %i ) @ ": " @ %debugInfo.getValue( %i ) );
|
|
|
|
%debugInfo.delete();
|
|
}
|
|
|
|
%this.sort( 0, true );
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspectorMethodList::onRightMouseUp( %this, %item, %mousePos )
|
|
{
|
|
%value = %this.getItemValue( %item );
|
|
if( %value $= "" )
|
|
return;
|
|
|
|
%fileName = getRecord( %value, 0 );
|
|
%lineNumber = getRecord( %value, 1 );
|
|
|
|
if( isFile( %fileName ) )
|
|
{
|
|
if( !isObject( GuiInspectorMethodListPopup ) )
|
|
new PopupMenu( GuiInspectorMethodListPopup )
|
|
{
|
|
superClass = "MenuBuilder";
|
|
isPopup = true;
|
|
|
|
item[ 0 ] = "Jump to Definition in Torsion" TAB "" TAB "EditorOpenFileInTorsion( GuiInspectorMethodListPopup.jumpFileName, GuiInspectorMethodListPopup.jumpLineNumber );";
|
|
|
|
jumpFileName = "";
|
|
jumpLineNumber = "";
|
|
};
|
|
|
|
GuiInspectorMethodListPopup.jumpFileName = %fileName;
|
|
GuiInspectorMethodListPopup.jumpLineNumber = %lineNumber;
|
|
|
|
GuiInspectorMethodListPopup.showPopup( Canvas );
|
|
}
|
|
}
|
|
|
|
//=============================================================================================
|
|
// GuiObjectInspectorTreeFilter
|
|
//=============================================================================================
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspectorTreeFilter::onWake( %this )
|
|
{
|
|
%treeView = %this.getParent()-->TreeView;
|
|
if( isObject( %treeView ) )
|
|
%this.treeView = %treeView;
|
|
|
|
Parent::onWake( %this );
|
|
}
|
|
|
|
//=============================================================================================
|
|
// GuiObjectInspectorTreeFilter
|
|
//=============================================================================================
|
|
|
|
//---------------------------------------------------------------------------------------------
|
|
|
|
function GuiObjectInspectorTreeFilterClearButton::onWake( %this )
|
|
{
|
|
%filterText = %this.getParent()-->FilterText;
|
|
if( isObject( %filterText ) )
|
|
%this.textCtrl = %filterText;
|
|
}
|