diff options
Diffstat (limited to 'PluginLoader.cpp')
-rwxr-xr-x | PluginLoader.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/PluginLoader.cpp b/PluginLoader.cpp index 2a59cb9..1e63633 100755 --- a/PluginLoader.cpp +++ b/PluginLoader.cpp @@ -7,22 +7,23 @@ #include "PluginLoader.h" -PluginLoader::PluginLoader(QObject *parent) : - QObject(parent) +PluginLoader::PluginLoader(OptionDialog *optionDialog) { ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); + this->optionDialog=optionDialog; //load the overall instance plugins=PluginsManager::getInstance(); //load the plugin plugins->lockPluginListEdition(); - QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_PluginLoader); - foreach(PluginsAvailable currentPlugin,list) - onePluginAdded(currentPlugin); qRegisterMetaType<PluginsAvailable>("PluginsAvailable"); qRegisterMetaType<CatchState>("CatchState"); - connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(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())); + connect(plugins,SIGNAL(pluginListingIsfinish()), this,SLOT(allPluginIsloaded()),Qt::QueuedConnection); + QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_PluginLoader); + foreach(PluginsAvailable currentPlugin,list) + emit previouslyPluginAdded(currentPlugin); plugins->unlockPluginListEdition(); needEnable=false; last_state=Uncaught; @@ -83,7 +84,9 @@ void PluginLoader::onePluginAdded(const PluginsAvailable &plugin) newEntry.inWaitOfReply = false; pluginList << newEntry; PluginLoader->setResources(newEntry.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL); + optionDialog->addPluginOptionWidget(PluginType_PluginLoader,plugin.name,newEntry.PluginLoaderInterface->options()); connect(pluginList.last().PluginLoaderInterface,SIGNAL(newState(CatchState)),this,SLOT(newState(CatchState))); + connect(languages,SIGNAL(newLanguageLoaded(QString)),newEntry.PluginLoaderInterface,SLOT(newLanguageLoaded())); if(needEnable) { pluginList.last().inWaitOfReply=true; @@ -133,6 +136,7 @@ void PluginLoader::load() pluginList.at(index).PluginLoaderInterface->setEnabled(true); index++; } + sendState(true); } void PluginLoader::unload() @@ -146,6 +150,7 @@ void PluginLoader::unload() pluginList.at(index).PluginLoaderInterface->setEnabled(false); index++; } + sendState(true); } #ifdef ULTRACOPIER_DEBUG @@ -185,7 +190,12 @@ void PluginLoader::sendState(bool force) ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("current_state: %1").arg(current_state)); if(current_state==Uncaught) { - if(found_not_listen && !found_listen) + if(!found_not_listen && !found_listen) + { + if(needEnable) + current_state=Caught; + } + else if(found_not_listen && !found_listen) current_state=Uncaught; else if(!found_not_listen && found_listen) current_state=Caught; @@ -200,7 +210,7 @@ void PluginLoader::sendState(bool force) } else ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Skip the signal sending")); - last_state=Uncaught; + last_state=current_state; last_have_plugin=have_plugin; last_inWaitOfReply=found_inWaitOfReply; } |