Torque3D/Templates/BaseGame/game/tools/gui/guiObjectInspector.ed.tscript
Jeff Hutchinson 6f7fdca87d lotsa fixes.
2021-05-04 21:18:15 -04:00

249 lines
8.2 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( %this.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( %this.jumpFileName, %this.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;
}