PluginFactory: Map plugins by type

This commit is contained in:
Lukas W
2015-01-29 14:00:29 +01:00
parent dc1f8dc365
commit c28b0b5407
8 changed files with 32 additions and 45 deletions

View File

@@ -44,6 +44,7 @@ public:
bool isNull() const {return library == 0;}
};
typedef QList<PluginInfo> PluginInfoList;
typedef QMultiMap<Plugin::PluginTypes, Plugin::Descriptor*> 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<QString, QString> m_errors;

View File

@@ -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 );

View File

@@ -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;
}
}
}

View File

@@ -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<ImportFilter *>( p ) != NULL &&
dynamic_cast<ImportFilter *>( p )->tryImport( tc ) == true )
{
Plugin * p = Plugin::instantiate( desc->name, NULL, s );
if( dynamic_cast<ImportFilter *>( p ) != NULL &&
dynamic_cast<ImportFilter *>( p )->tryImport( tc ) == true )
{
delete p;
successful = true;
break;
}
delete p;
successful = true;
break;
}
delete p;
}
Engine::projectJournal()->setJournalling( j );

View File

@@ -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::PluginInfo>& 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;
}

View File

@@ -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(

View File

@@ -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() )
{

View File

@@ -95,16 +95,13 @@ PluginDescList::PluginDescList(QWidget *parent) :
{
QVBoxLayout* layout = new QVBoxLayout(this);
QList<Plugin::Descriptor*> descs = pluginFactory->descriptors();
QList<Plugin::Descriptor*> 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);