/************************************************************************* Unregister all window renderer factories and unload shared modules *************************************************************************/ void Scheme::unloadWindowRendererFactories() { // for all widget modules loaded for (WRModuleList::iterator cmod = d_windowRendererModules.begin(); cmod != d_windowRendererModules.end(); ++cmod) { // assume module's factories were already removed if wrModule is 0. if (!(*cmod).factoryModule) continue; // see if we should just unregister all factories available in the // module (i.e. No factories explicitly specified) if ((*cmod).types.size() == 0) { (*cmod).factoryModule->unregisterAllFactories(); } // remove all window factories explicitly registered for this module else { UIModule::TypeList::const_iterator elem = (*cmod).types.begin(); for (; elem != (*cmod).types.end(); ++elem) (*cmod).factoryModule->unregisterFactory(*elem); } // unload dynamic module as required if ((*cmod).dynamicModule) { CEGUI_DELETE_AO (*cmod).dynamicModule; (*cmod).dynamicModule = 0; } (*cmod).factoryModule = 0; } }
/************************************************************************* Remove a factory by name *************************************************************************/ void WindowRendererManager::removeFactory(const String& name) { WR_Registry::iterator i = d_wrReg.find(name); // non-existing or already removed? The latter can happen when more then one Scheme // was loaded using the same renderer. if (i == d_wrReg.end()) { return; } // see if we own this factory OwnedFactoryList::iterator j = std::find(d_ownedFactories.begin(), d_ownedFactories.end(), (*i).second); char addr_buff[32]; sprintf(addr_buff, "(%p)", static_cast<void*>((*i).second)); d_wrReg.erase(name); Logger::getSingleton().logEvent("WindowRendererFactory for '" + name + "' WindowRenderers removed. " + addr_buff); // delete factory object if we created it if (j != d_ownedFactories.end()) { Logger::getSingleton().logEvent("Deleted WindowRendererFactory for '" + (*j)->getName() + "' WindowRenderers."); CEGUI_DELETE_AO (*j); d_ownedFactories.erase(j); } }
/************************************************************************* removes a WindowFactory from the registry (by name) *************************************************************************/ void WindowFactoryManager::removeFactory(const String& name) { WindowFactoryRegistry::iterator i = d_factoryRegistry.find(name); // exit if no factory exists for this type if (i == d_factoryRegistry.end()) return; // see if we own this factory OwnedWindowFactoryList::iterator j = std::find(d_ownedFactories.begin(), d_ownedFactories.end(), (*i).second); char addr_buff[32]; sprintf(addr_buff, "(%p)", static_cast<void*>((*i).second)); d_factoryRegistry.erase(name); Logger::getSingleton().logEvent("WindowFactory for '" + name + "' windows removed. " + addr_buff); // delete factory object if we created it if (j != d_ownedFactories.end()) { Logger::getSingleton().logEvent("Deleted WindowFactory for '" + (*j)->getTypeName() + "' windows."); CEGUI_DELETE_AO (*j); d_ownedFactories.erase(j); } }