void ThemesManager::newOptionValue(const QString &group,const QString &name,const QVariant &value) { if(group=="Themes" && name=="Ultracopier_current_theme") { if(!PluginsManager::pluginsManager->allPluginHaveBeenLoaded()) return; if(currentPluginIndex!=-1 && value.toString()!=pluginList.at(currentPluginIndex).plugin.name) { //int tempCurrentPluginIndex=currentPluginIndex; emit theThemeNeedBeUnloaded(); ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("unload the themes: %1 (%2)").arg(pluginList.at(currentPluginIndex).plugin.name).arg(currentPluginIndex)); /* Themes remain loaded for the options *if(pluginList.at(tempCurrentPluginIndex).options!=NULL) { delete pluginList.at(tempCurrentPluginIndex).options; pluginList[tempCurrentPluginIndex].options=NULL; } if(pluginList.at(tempCurrentPluginIndex).factory!=NULL) { delete pluginList.at(tempCurrentPluginIndex).factory; pluginList[tempCurrentPluginIndex].factory=NULL; } if(pluginList.at(tempCurrentPluginIndex).pluginLoader!=NULL) { pluginList.at(tempCurrentPluginIndex).pluginLoader->unload(); delete pluginList.at(tempCurrentPluginIndex).pluginLoader; pluginList[tempCurrentPluginIndex].pluginLoader=NULL; } */ } allPluginIsLoaded(); //emit theThemeIsReloaded(); -> do into allPluginIsLoaded(); now } }
/// \brief Create the manager and load the defaults variables LanguagesManager::LanguagesManager() { ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); //load the overall instance resources=ResourcesManager::getInstance(); options=OptionEngine::getInstance(); plugins=PluginsManager::getInstance(); //load the rest QStringList resourcesPaths=resources->getReadPath(); int index=0; while(index<resourcesPaths.size()) { QString composedTempPath=resourcesPaths.at(index)+"Languages"+QDir::separator(); QDir LanguagesConfiguration(composedTempPath); if(LanguagesConfiguration.exists()) languagePath<<composedTempPath; index++; } //load the plugins plugins->lockPluginListEdition(); qRegisterMetaType<PluginsAvailable>("PluginsAvailable"); connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection); connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this, SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection); connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this, SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection); connect(plugins,SIGNAL(pluginListingIsfinish()), this, SLOT(allPluginIsLoaded()),Qt::QueuedConnection); QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Languages); foreach(PluginsAvailable currentPlugin,list) emit previouslyPluginAdded(currentPlugin); plugins->unlockPluginListEdition(); //load the GUI option QList<QPair<QString, QVariant> > KeysList; KeysList.append(qMakePair(QString("Language"),QVariant("en"))); KeysList.append(qMakePair(QString("Language_autodetect"),QVariant(true))); options->addOptionGroup("Language",KeysList); // connect(this, SIGNAL(newLanguageLoaded(QString)), plugins,SLOT(refreshPluginList(QString))); // connect(this, SIGNAL(newLanguageLoaded(QString)), this,SLOT(retranslateTheUI())); connect(options,SIGNAL(newOptionValue(QString,QString,QVariant)), this, SLOT(newOptionValue(QString)),Qt::QueuedConnection); connect(this, SIGNAL(newLanguageLoaded(QString)), plugins,SIGNAL(newLanguageLoaded()),Qt::QueuedConnection); }
void ThemesManager::onePluginAdded(const PluginsAvailable &plugin) { if(plugin.category!=PluginType_Themes) return; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+plugin.name); PluginsAvailableThemes newPlugin; newPlugin.plugin=plugin; #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE PluginInterface_ThemesFactory *factory; QObjectList objectList=QPluginLoader::staticInstances(); int index=0; QObject *pluginObject; while(index<objectList.size()) { pluginObject=objectList.at(index); factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginObject); if(factory!=NULL) break; index++; } if(index==objectList.size()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("static themes not found")); emit newThemeOptions(newPlugin.plugin.name,NULL,false,true); emit theThemeIsReloaded(); return; } newPlugin.pluginLoader=NULL; #else QPluginLoader *pluginLoader=new QPluginLoader(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface")); QObject *pluginInstance = pluginLoader->instance(); if(pluginInstance==NULL) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to load the plugin %1: %2").arg(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface")).arg(pluginLoader->errorString())); pluginLoader->unload(); emit newThemeOptions(newPlugin.plugin.name,NULL,false,true); emit theThemeIsReloaded(); return; } PluginInterface_ThemesFactory *factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginInstance); if(factory==NULL) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to cast the plugin: %1").arg(pluginLoader->errorString())); pluginLoader->unload(); emit newThemeOptions(newPlugin.plugin.name,NULL,false,true); emit theThemeIsReloaded(); return; } //check if found int indexTemp=0; while(indexTemp<pluginList.size()) { if(pluginList.at(indexTemp).factory==factory) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Plugin already found, current: %1, conflit plugin: %2, name: %3") .arg(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface")) .arg(pluginList.at(indexTemp).plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface")) .arg(newPlugin.plugin.name) ); pluginLoader->unload(); emit newThemeOptions(newPlugin.plugin.name,NULL,false,true); emit theThemeIsReloaded(); return; } indexTemp++; } newPlugin.pluginLoader=pluginLoader; #endif ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("preload: %1, at the index: %2").arg(newPlugin.plugin.name).arg(QString::number(pluginList.size()))); #ifdef ULTRACOPIER_DEBUG connect(factory,&PluginInterface_ThemesFactory::debugInformation,this,&ThemesManager::debugInformation,Qt::QueuedConnection); #endif // ULTRACOPIER_DEBUG connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,factory,&PluginInterface_ThemesFactory::newLanguageLoaded); newPlugin.factory=factory; newPlugin.options=new LocalPluginOptions("Themes-"+newPlugin.plugin.name); newPlugin.factory->setResources(newPlugin.options,newPlugin.plugin.writablePath,newPlugin.plugin.path,&facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL); currentStylePath=newPlugin.plugin.path; pluginList << newPlugin; if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded()) allPluginIsLoaded(); emit newThemeOptions(newPlugin.plugin.name,newPlugin.factory->options(),true,true); emit theThemeIsReloaded(); return; }