mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
Merge pull request #1205 from Areloch/ForcedArrayIndexInspector
Adds ability to force the inspector to only show a set index of array'd fields.
This commit is contained in:
commit
ceec0dfb5b
4 changed files with 232 additions and 145 deletions
|
|
@ -50,7 +50,8 @@ GuiInspector::GuiInspector()
|
||||||
mMovingDivider( false ),
|
mMovingDivider( false ),
|
||||||
mHLField( NULL ),
|
mHLField( NULL ),
|
||||||
mShowCustomFields( true ),
|
mShowCustomFields( true ),
|
||||||
mComponentGroupTargetId(-1)
|
mComponentGroupTargetId(-1),
|
||||||
|
mForcedArrayIndex(-1)
|
||||||
{
|
{
|
||||||
mPadding = 1;
|
mPadding = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -77,6 +78,8 @@ void GuiInspector::initPersistFields()
|
||||||
addField( "showCustomFields", TypeBool, Offset( mShowCustomFields, GuiInspector ),
|
addField( "showCustomFields", TypeBool, Offset( mShowCustomFields, GuiInspector ),
|
||||||
"If false the custom fields Name, Id, and Source Class will not be shown." );
|
"If false the custom fields Name, Id, and Source Class will not be shown." );
|
||||||
|
|
||||||
|
addField("forcedArrayIndex", TypeS32, Offset(mForcedArrayIndex, GuiInspector));
|
||||||
|
|
||||||
endGroup( "Inspector" );
|
endGroup( "Inspector" );
|
||||||
|
|
||||||
Parent::initPersistFields();
|
Parent::initPersistFields();
|
||||||
|
|
@ -622,6 +625,7 @@ void GuiInspector::refresh()
|
||||||
if( !group && !isGroupFiltered( itr->pGroupname ) )
|
if( !group && !isGroupFiltered( itr->pGroupname ) )
|
||||||
{
|
{
|
||||||
GuiInspectorGroup *newGroup = new GuiInspectorGroup( itr->pGroupname, this );
|
GuiInspectorGroup *newGroup = new GuiInspectorGroup( itr->pGroupname, this );
|
||||||
|
newGroup->setForcedArrayIndex(mForcedArrayIndex);
|
||||||
|
|
||||||
newGroup->registerObject();
|
newGroup->registerObject();
|
||||||
if( !newGroup->getNumFields() )
|
if( !newGroup->getNumFields() )
|
||||||
|
|
@ -640,6 +644,10 @@ void GuiInspector::refresh()
|
||||||
addObject(newGroup);
|
addObject(newGroup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(group)
|
||||||
|
{
|
||||||
|
group->setForcedArrayIndex(mForcedArrayIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -815,6 +823,12 @@ void GuiInspector::removeInspectorGroup(StringTableEntry groupName)
|
||||||
removeObject(group);
|
removeObject(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GuiInspector::setForcedArrayIndex(S32 arrayIndex)
|
||||||
|
{
|
||||||
|
mForcedArrayIndex = arrayIndex;
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// Console Methods.
|
// Console Methods.
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
@ -979,3 +993,10 @@ DefineEngineMethod(GuiInspector, removeGroup, void, (const char* groupName), ,
|
||||||
{
|
{
|
||||||
object->removeInspectorGroup(StringTable->insert(groupName));
|
object->removeInspectorGroup(StringTable->insert(groupName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefineEngineMethod(GuiInspector, setForcedArrayIndex, void, (S32 arrayIndex), (-1),
|
||||||
|
"Sets the ForcedArrayIndex for the inspector. Used to force presentation of arrayed fields to only show a specific field index inside groups."
|
||||||
|
"@param arrayIndex The specific field index for arrayed fields to show. Use -1 or blank arg to go back to normal behavior.")
|
||||||
|
{
|
||||||
|
object->setForcedArrayIndex(arrayIndex);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,8 @@ public:
|
||||||
|
|
||||||
void removeInspectorGroup(StringTableEntry groupName);
|
void removeInspectorGroup(StringTableEntry groupName);
|
||||||
|
|
||||||
|
void setForcedArrayIndex(S32 arrayIndex);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
typedef Vector< SimObjectPtr< SimObject > > TargetVector;
|
typedef Vector< SimObjectPtr< SimObject > > TargetVector;
|
||||||
|
|
@ -187,6 +189,7 @@ protected:
|
||||||
SimObjectPtr<GuiInspectorField> mHLField;
|
SimObjectPtr<GuiInspectorField> mHLField;
|
||||||
String mGroupFilters;
|
String mGroupFilters;
|
||||||
bool mShowCustomFields;
|
bool mShowCustomFields;
|
||||||
|
S32 mForcedArrayIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ GuiInspectorGroup::GuiInspectorGroup()
|
||||||
|
|
||||||
setCanSave( false );
|
setCanSave( false );
|
||||||
|
|
||||||
|
mForcedArrayIndex = -1;
|
||||||
|
|
||||||
// Make sure we receive our ticks.
|
// Make sure we receive our ticks.
|
||||||
setProcessTicks();
|
setProcessTicks();
|
||||||
mMargin.set(0,0,5,0);
|
mMargin.set(0,0,5,0);
|
||||||
|
|
@ -291,6 +293,12 @@ bool GuiInspectorGroup::inspectGroup()
|
||||||
if (bNoGroup == true && bGrabItems == true)
|
if (bNoGroup == true && bGrabItems == true)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if ((field->type == AbstractClassRep::StartArrayFieldType || field->type == AbstractClassRep::EndArrayFieldType) && mForcedArrayIndex != -1)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (field->type == AbstractClassRep::StartArrayFieldType)
|
if (field->type == AbstractClassRep::StartArrayFieldType)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_SPEW
|
#ifdef DEBUG_SPEW
|
||||||
|
|
@ -356,7 +364,7 @@ bool GuiInspectorGroup::inspectGroup()
|
||||||
bMakingArray = false;
|
bMakingArray = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( bMakingArray )
|
if ( bMakingArray )
|
||||||
{
|
{
|
||||||
// Add a GuiInspectorField for this field,
|
// Add a GuiInspectorField for this field,
|
||||||
|
|
@ -403,6 +411,8 @@ bool GuiInspectorGroup::inspectGroup()
|
||||||
// We are going to check to see if this item is an array
|
// We are going to check to see if this item is an array
|
||||||
// if so, we're going to construct a field for each array element
|
// if so, we're going to construct a field for each array element
|
||||||
if( field->elementCount > 1)
|
if( field->elementCount > 1)
|
||||||
|
{
|
||||||
|
if (mForcedArrayIndex == -1)
|
||||||
{
|
{
|
||||||
// Make a rollout control for this array
|
// Make a rollout control for this array
|
||||||
//
|
//
|
||||||
|
|
@ -466,6 +476,41 @@ bool GuiInspectorGroup::inspectGroup()
|
||||||
rollout->instantCollapse();
|
rollout->instantCollapse();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
FrameTemp<char> intToStr(64);
|
||||||
|
dSprintf(intToStr, 64, "%d", mForcedArrayIndex);
|
||||||
|
|
||||||
|
// Construct proper ValueName[nI] format which is "ValueName0" for index 0, etc.
|
||||||
|
|
||||||
|
String fieldName = String::ToString("%s%d", field->pFieldname, mForcedArrayIndex);
|
||||||
|
|
||||||
|
// If the field already exists, just update it
|
||||||
|
GuiInspectorField* fieldGui = findField(fieldName);
|
||||||
|
if (fieldGui != NULL)
|
||||||
|
{
|
||||||
|
fieldGui->updateValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bNewItems = true;
|
||||||
|
|
||||||
|
fieldGui = constructField(field->type);
|
||||||
|
if (fieldGui == NULL)
|
||||||
|
fieldGui = new GuiInspectorField();
|
||||||
|
|
||||||
|
fieldGui->init(mParent, this);
|
||||||
|
fieldGui->setInspectorField(field, field->pFieldname, intToStr);
|
||||||
|
|
||||||
|
if (fieldGui->registerObject())
|
||||||
|
{
|
||||||
|
mChildren.push_back(fieldGui);
|
||||||
|
mStack->addObject(fieldGui);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
delete fieldGui;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// If the field already exists, just update it
|
// If the field already exists, just update it
|
||||||
GuiInspectorField* fieldGui = findField(field->pFieldname);
|
GuiInspectorField* fieldGui = findField(field->pFieldname);
|
||||||
|
|
@ -736,3 +781,10 @@ DefineEngineMethod(GuiInspectorGroup, removeField, void, (const char* fieldName)
|
||||||
|
|
||||||
object->removeInspectorField(StringTable->insert(fieldName));
|
object->removeInspectorField(StringTable->insert(fieldName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefineEngineMethod(GuiInspectorGroup, setForcedArrayIndex, void, (S32 arrayIndex), (-1),
|
||||||
|
"Sets the ForcedArrayIndex for the group. Used to force presentation of arrayed fields to only show a specific field index."
|
||||||
|
"@param arrayIndex The specific field index for arrayed fields to show. Use -1 or blank arg to go back to normal behavior.")
|
||||||
|
{
|
||||||
|
object->setForcedArrayIndex(arrayIndex);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,12 @@ public:
|
||||||
GuiStackControl* mStack;
|
GuiStackControl* mStack;
|
||||||
Vector<GuiRolloutCtrl*> mArrayCtrls;
|
Vector<GuiRolloutCtrl*> mArrayCtrls;
|
||||||
|
|
||||||
|
S32 mForcedArrayIndex; /// This is a special behavior variable that, when set, changes
|
||||||
|
/// the presented behavior for arrays. Instead of showing sub-rollouts
|
||||||
|
/// it instead forces showing ONLY the fields of the specific index, removing
|
||||||
|
/// the presented array controls. This is useful for wanting to edit an associated
|
||||||
|
/// 'set' of fields that are commonly arrayed, like material layers
|
||||||
|
|
||||||
// Constructor/Destructor/Conobject Declaration
|
// Constructor/Destructor/Conobject Declaration
|
||||||
GuiInspectorGroup();
|
GuiInspectorGroup();
|
||||||
GuiInspectorGroup( const String& groupName, SimObjectPtr<GuiInspector> parent );
|
GuiInspectorGroup( const String& groupName, SimObjectPtr<GuiInspector> parent );
|
||||||
|
|
@ -81,6 +87,11 @@ public:
|
||||||
void addInspectorField(GuiInspectorField* field);
|
void addInspectorField(GuiInspectorField* field);
|
||||||
void removeInspectorField(StringTableEntry name);
|
void removeInspectorField(StringTableEntry name);
|
||||||
|
|
||||||
|
void setForcedArrayIndex(const S32& arrayIndex = -1)
|
||||||
|
{
|
||||||
|
mForcedArrayIndex = arrayIndex;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// overridable method that creates our inner controls.
|
// overridable method that creates our inner controls.
|
||||||
virtual bool createContent();
|
virtual bool createContent();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue