/************************************************************************* returns a pointer to the requested WindowFactory object *************************************************************************/ WindowFactory* WindowFactoryManager::getFactory(const String& type) const { // first, dereference aliased types, as needed. String targetType(getDereferencedAliasType(type)); // try for a 'real' type WindowFactoryRegistry::const_iterator pos = d_factoryRegistry.find(targetType); // found an actual factory for this type if (pos != d_factoryRegistry.end()) { return pos->second; } // no concrete type, try for a falagard mapped type else { FalagardMapRegistry::const_iterator falagard = d_falagardRegistry.find(targetType); // found falagard mapping for this type if (falagard != d_falagardRegistry.end()) { // recursively call getFactory on the target base type return getFactory(falagard->second.d_baseType); } // type not found anywhere, give up with an exception. else { throw UnknownObjectException("WindowFactoryManager::getFactory - A WindowFactory object, an alias, or mapping for '" + type + "' Window objects is not registered with the system."); } } }
String WindowFactoryManager::getDereferencedAliasType(const String& type) const { TypeAliasRegistry::const_iterator alias = d_aliasRegistry.find(type); // if this is an aliased type, ensure to fully dereference by recursively // calling ourselves on the active target for the given type. if (alias != d_aliasRegistry.end()) return getDereferencedAliasType(alias->second.getActiveTarget()); // we're not an alias, so return the input type unchanged return type; }
const String& WindowFactoryManager::getMappedLookForType(const String& type) const { FalagardMapRegistry::const_iterator iter = d_falagardRegistry.find(getDereferencedAliasType(type)); if (iter != d_falagardRegistry.end()) { return (*iter).second.d_lookName; } // type does not exist as a mapped type (or an alias for one) else { throw InvalidRequestException("WindowFactoryManager::getMappedLookForType - Window factory type '" + type + "' is not a falagard mapped type (or an alias for one)."); } }
/************************************************************************* Returns true if a WindowFactory, an alias, or a falagard mapping for a specified window type is present *************************************************************************/ bool WindowFactoryManager::isFactoryPresent(const String& name) const { // first, dereference aliased types, as needed. String targetType(getDereferencedAliasType(name)); // now try for a 'real' type if (d_factoryRegistry.find(targetType) != d_factoryRegistry.end()) { return true; } // not a concrete type, so return whether it's a Falagard mapped type. else { return (d_falagardRegistry.find(targetType) != d_falagardRegistry.end()); } }
const WindowFactoryManager::FalagardWindowMapping& WindowFactoryManager::getFalagardMappingForType(const String& type) const { FalagardMapRegistry::const_iterator iter = d_falagardRegistry.find(getDereferencedAliasType(type)); if (iter != d_falagardRegistry.end()) { return (*iter).second; } // type does not exist as a mapped type (or an alias for one) else { CEGUI_THROW(InvalidRequestException( "Window factory type '" + type + "' is not a falagard mapped type (or an alias for one).")); } }
bool WindowFactoryManager::isFalagardMappedType(const String& type) const { return d_falagardRegistry.find(getDereferencedAliasType(type)) != d_falagardRegistry.end(); }