void run() { for( AbstractClassRep* classRep = AbstractClassRep::getClassList(); classRep != NULL; classRep = classRep->getNextClass() ) { // Create object. ConsoleObject* object = classRep->create(); test( object, avar( "AbstractClassRep::create failed for class '%s'", classRep->getClassName() ) ); if( !object ) continue; // Make sure it's a SimObject. SimObject* simObject = dynamic_cast< SimObject* >( object ); if( !simObject ) { SAFE_DELETE( object ); continue; } // Register the object. bool result = simObject->registerObject(); test( result, avar( "registerObject failed for object of class '%s'", classRep->getClassName() ) ); if( result ) simObject->deleteObject(); else SAFE_DELETE( simObject ); } }
void EditorIconRegistry::loadFromPath( const String &path, bool overwrite ) { AbstractClassRep *classRep = AbstractClassRep::getClassList(); while ( classRep ) { String iconFile = String::ToString( "%s%s", path.c_str(), classRep->getClassName() ); add( classRep->getClassName(), iconFile.c_str(), overwrite ); classRep = classRep->getNextClass(); } String defaultIconFile = path + "default"; mDefaultIcon.set( defaultIconFile, &GFXDefaultPersistentProfile, avar("%s() - mIcons[] (line %d)", __FUNCTION__, __LINE__) ); }
void GuiInspectorDatablockField::setClassName( StringTableEntry className ) { // Walk the ACR list and find a matching class if any. AbstractClassRep *walk = AbstractClassRep::getClassList(); while(walk) { if(!dStricmp(walk->getClassName(), className)) { // Match! mDesiredClass = walk; return; } walk = walk->getNextClass(); } // No dice. Con::warnf("GuiInspectorDatablockField::setClassName - no class '%s' found!", className); return; }
GFXTexHandle EditorIconRegistry::findIcon( const char *className ) { // On the chance we have this className already in the map, // check there first because its a lot faster... StringNoCase key( className ); IconMap::Iterator icon = mIcons.find( key ); if ( icon != mIcons.end() && icon->value.isValid() ) return icon->value; // Well, we could still have an icon for a parent class, // so find the AbstractClassRep for the className. // // Unfortunately the only way to do this is looping through // the AbstractClassRep linked list. bool found = false; AbstractClassRep* pClassRep = AbstractClassRep::getClassList(); while ( pClassRep ) { if ( key.equal( pClassRep->getClassName(), String::NoCase ) ) { found = true; break; } pClassRep = pClassRep->getNextClass(); } if ( !found ) { Con::errorf( "EditorIconRegistry::findIcon, passed className %s was not an AbstractClassRep!", key.c_str() ); return mDefaultIcon; } // Now do a find by AbstractClassRep recursively up the class tree... return findIcon( pClassRep ); }
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; }