const char *getFormattedData(S32 type, const char *data, const EnumTable *tbl, BitSet32 flag) { ConsoleBaseType *cbt = ConsoleBaseType::getType( type ); AssertFatal(cbt, "Con::getData - could not resolve type ID!"); // Datablock types are just a datablock // name and don't ever need formatting. if ( cbt->isDatablock() ) return data; bool currWarn = gWarnUndefinedScriptVariables; gWarnUndefinedScriptVariables = false; const char* globalValue = Con::getVariable(data); gWarnUndefinedScriptVariables = currWarn; if (dStrlen(globalValue) > 0) return globalValue; void* variable = cbt->getNativeVariable(); if (variable) { Con::setData(type, variable, 0, 1, &data, tbl, flag); const char* formattedVal = Con::getData(type, variable, 0, tbl, flag); static const U32 bufSize = 2048; char* returnBuffer = Con::getReturnBuffer(bufSize); dSprintf(returnBuffer, bufSize, "%s\0", formattedVal ); cbt->deleteNativeVariable(variable); return returnBuffer; } else return data; }
GuiInspectorField* GuiInspectorGroup::constructField( S32 fieldType ) { // See if we can construct a field of this type ConsoleBaseType *cbt = ConsoleBaseType::getType(fieldType); if( !cbt ) return NULL; // Alright, is it a datablock? if(cbt->isDatablock()) { // Default to GameBaseData StringTableEntry typeClassName = cbt->getTypeClassName(); if( mParent->getNumInspectObjects() == 1 && !dStricmp(typeClassName, "GameBaseData") ) { // Try and setup the classname based on the object type char className[256]; dSprintf(className,256,"%sData", mParent->getInspectObject( 0 )->getClassName()); // Walk the ACR list and find a matching class if any. AbstractClassRep *walk = AbstractClassRep::getClassList(); while(walk) { if(!dStricmp(walk->getClassName(), className)) break; walk = walk->getNextClass(); } // We found a valid class if (walk) typeClassName = walk->getClassName(); } GuiInspectorDatablockField *dbFieldClass = new GuiInspectorDatablockField( typeClassName ); if( dbFieldClass != NULL ) { // return our new datablock field with correct datablock type enumeration info return dbFieldClass; } } // Nope, not a datablock. So maybe it has a valid inspector field override we can use? if(!cbt->getInspectorFieldType()) // Nothing, so bail. return NULL; // Otherwise try to make it! ConsoleObject *co = create(cbt->getInspectorFieldType()); GuiInspectorField *gif = dynamic_cast<GuiInspectorField*>(co); if(!gif) { // Wasn't appropriate type, bail. delete co; return NULL; } return gif; }