diff --git a/include/PluginFactory.h b/include/PluginFactory.h index 7b59e2a2f..2ddd6f9e2 100644 --- a/include/PluginFactory.h +++ b/include/PluginFactory.h @@ -44,6 +44,7 @@ public: bool isNull() const {return library == 0;} }; typedef QList PluginInfoList; + typedef QMultiMap DescriptorMap; PluginFactory(); ~PluginFactory(); @@ -54,6 +55,7 @@ public: /// Returns a list of all found plugins' descriptors. const Plugin::DescriptorList descriptors() const; + const Plugin::DescriptorList descriptors(Plugin::PluginTypes type) const; /// Returns a list of all found plugins' PluginFactory::PluginInfo objects. const PluginInfoList& pluginInfos() const; @@ -71,7 +73,7 @@ public slots: void discoverPlugins(); private: - Plugin::DescriptorList m_descriptorList; + DescriptorMap m_descriptors; PluginInfoList m_pluginInfos; QHash m_errors; diff --git a/plugins/flp_import/FlpImport.cpp b/plugins/flp_import/FlpImport.cpp index 3173aabae..312dfb0a7 100644 --- a/plugins/flp_import/FlpImport.cpp +++ b/plugins/flp_import/FlpImport.cpp @@ -1638,12 +1638,8 @@ p->putValue( jt->pos, value, false ); // process all effects EffectKeyList effKeys; - for (const Plugin::Descriptor* desc : pluginFactory->descriptors()) + for (const Plugin::Descriptor* desc : pluginFactory->descriptors(Plugin::Effect)) { - if( desc->type != Plugin::Effect ) - { - continue; - } if( desc->subPluginFeatures ) { desc->subPluginFeatures->listSubPluginKeys( desc, effKeys ); diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index 483e3706f..2c2a7b57a 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -123,14 +123,11 @@ void Engine::updateFramesPerTick() void Engine::initPluginFileHandling() { - for (const Plugin::Descriptor* desc : pluginFactory->descriptors()) + for (const Plugin::Descriptor* desc : pluginFactory->descriptors(Plugin::Instrument)) { - if( desc->type == Plugin::Instrument ) + for(const QString& ext : QString(desc->supportedFileTypes).split(',')) { - for(const QString& ext : QString(desc->supportedFileTypes).split(',')) - { - s_pluginFileHandling[ext] = desc->name; - } + s_pluginFileHandling[ext] = desc->name; } } } diff --git a/src/core/ImportFilter.cpp b/src/core/ImportFilter.cpp index 6b0e6b6ef..7b5644721 100644 --- a/src/core/ImportFilter.cpp +++ b/src/core/ImportFilter.cpp @@ -60,20 +60,17 @@ void ImportFilter::import( const QString & _file_to_import, const bool j = Engine::projectJournal()->isJournalling(); Engine::projectJournal()->setJournalling( false ); - for (const Plugin::Descriptor* desc : pluginFactory->descriptors()) + for (const Plugin::Descriptor* desc : pluginFactory->descriptors(Plugin::ImportFilter)) { - if( desc->type == Plugin::ImportFilter ) + Plugin * p = Plugin::instantiate( desc->name, NULL, s ); + if( dynamic_cast( p ) != NULL && + dynamic_cast( p )->tryImport( tc ) == true ) { - Plugin * p = Plugin::instantiate( desc->name, NULL, s ); - if( dynamic_cast( p ) != NULL && - dynamic_cast( p )->tryImport( tc ) == true ) - { - delete p; - successful = true; - break; - } delete p; + successful = true; + break; } + delete p; } Engine::projectJournal()->setJournalling( j ); diff --git a/src/core/PluginFactory.cpp b/src/core/PluginFactory.cpp index abf6827f2..dfae2fa51 100644 --- a/src/core/PluginFactory.cpp +++ b/src/core/PluginFactory.cpp @@ -89,7 +89,12 @@ PluginFactory* PluginFactory::instance() const Plugin::DescriptorList PluginFactory::descriptors() const { - return m_descriptorList; + return m_descriptors.values(); +} + +const Plugin::DescriptorList PluginFactory::descriptors(Plugin::PluginTypes type) const +{ + return m_descriptors.values(type); } const QList& PluginFactory::pluginInfos() const @@ -115,7 +120,7 @@ QString PluginFactory::errorString(QString pluginName) const void PluginFactory::discoverPlugins() { - Plugin::DescriptorList descriptors; + DescriptorMap descriptors; PluginInfoList pluginInfos; const QFileInfoList& files = QDir("plugins:").entryInfoList(nameFilters); @@ -159,7 +164,7 @@ void PluginFactory::discoverPlugins() info.descriptor = pluginDescriptor; pluginInfos << info; - descriptors << pluginDescriptor; + descriptors.insert(info.descriptor->type, info.descriptor); } @@ -168,6 +173,6 @@ void PluginFactory::discoverPlugins() delete info.library; } m_pluginInfos = pluginInfos; - m_descriptorList = descriptors; + m_descriptors = descriptors; } diff --git a/src/gui/EffectSelectDialog.cpp b/src/gui/EffectSelectDialog.cpp index 1905dc615..fb70da6ab 100644 --- a/src/gui/EffectSelectDialog.cpp +++ b/src/gui/EffectSelectDialog.cpp @@ -46,12 +46,8 @@ EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) : EffectKeyList subPluginEffectKeys; - for (const Plugin::Descriptor* desc: pluginFactory->descriptors()) + for (const Plugin::Descriptor* desc: pluginFactory->descriptors(Plugin::Effect)) { - if( desc->type != Plugin::Effect ) - { - continue; - } if( desc->subPluginFeatures ) { desc->subPluginFeatures->listSubPluginKeys( diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index dd00a9d8e..b7f5c1443 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -297,14 +297,11 @@ void MainWindow::finalize() m_toolsMenu = new QMenu( this ); - for( const Plugin::Descriptor* desc : pluginFactory->descriptors() ) + for( const Plugin::Descriptor* desc : pluginFactory->descriptors(Plugin::Tool) ) { - if( desc->type == Plugin::Tool ) - { - m_toolsMenu->addAction( desc->logo->pixmap(), desc->displayName ); - m_tools.push_back( ToolPlugin::instantiate( desc->name, /*this*/NULL ) - ->createView(this) ); - } + m_toolsMenu->addAction( desc->logo->pixmap(), desc->displayName ); + m_tools.push_back( ToolPlugin::instantiate( desc->name, /*this*/NULL ) + ->createView(this) ); } if( !m_toolsMenu->isEmpty() ) { diff --git a/src/gui/PluginBrowser.cpp b/src/gui/PluginBrowser.cpp index bff6a7919..549b20bf9 100644 --- a/src/gui/PluginBrowser.cpp +++ b/src/gui/PluginBrowser.cpp @@ -95,16 +95,13 @@ PluginDescList::PluginDescList(QWidget *parent) : { QVBoxLayout* layout = new QVBoxLayout(this); - QList descs = pluginFactory->descriptors(); + QList descs = pluginFactory->descriptors(Plugin::Instrument); std::sort(descs.begin(), descs.end(), pluginBefore); for (const Plugin::Descriptor* desc : descs) { - if( desc->type == Plugin::Instrument ) - { - PluginDescWidget* p = new PluginDescWidget( *desc, this ); - p->show(); - layout->addWidget(p); - } + PluginDescWidget* p = new PluginDescWidget( *desc, this ); + p->show(); + layout->addWidget(p); } setLayout(layout);