Support multiple instrument subplugin categories (#5801)
This commit is contained in:
@@ -33,7 +33,6 @@
|
||||
|
||||
class QLineEdit;
|
||||
class QTreeWidget;
|
||||
class QTreeWidgetItem;
|
||||
|
||||
|
||||
class PluginBrowser : public SideBarWidget
|
||||
@@ -53,8 +52,6 @@ private:
|
||||
|
||||
QWidget * m_view;
|
||||
QTreeWidget * m_descTree;
|
||||
QTreeWidgetItem * m_lmmsRoot;
|
||||
QTreeWidgetItem * m_lv2Root;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -79,18 +79,7 @@ PluginBrowser::PluginBrowser( QWidget * _parent ) :
|
||||
view_layout->addWidget( searchBar );
|
||||
view_layout->addWidget( m_descTree );
|
||||
|
||||
// Add LMMS root to the tree
|
||||
m_lmmsRoot = new QTreeWidgetItem();
|
||||
m_lmmsRoot->setText( 0, "LMMS" );
|
||||
m_descTree->insertTopLevelItem( 0, m_lmmsRoot );
|
||||
m_lmmsRoot->setExpanded( true );
|
||||
|
||||
// Add LV2 root to the tree
|
||||
m_lv2Root = new QTreeWidgetItem();
|
||||
m_lv2Root->setText( 0, "LV2" );
|
||||
m_descTree->insertTopLevelItem( 1, m_lv2Root );
|
||||
|
||||
// Add plugins to the tree roots
|
||||
// Add plugins to the tree
|
||||
addPlugins();
|
||||
|
||||
// Resize
|
||||
@@ -146,50 +135,63 @@ void PluginBrowser::onFilterChanged( const QString & filter )
|
||||
|
||||
void PluginBrowser::addPlugins()
|
||||
{
|
||||
QList<Plugin::Descriptor*> descs = pluginFactory->descriptors(Plugin::Instrument);
|
||||
std::sort(
|
||||
descs.begin(),
|
||||
descs.end(),
|
||||
[]( const Plugin::Descriptor* d1, const Plugin::Descriptor* d2 ) -> bool
|
||||
{
|
||||
return qstricmp( d1->displayName, d2->displayName ) < 0 ? true : false;
|
||||
}
|
||||
// Add a root node to the plugin tree with the specified `label` and return it
|
||||
const auto addRoot = [this](auto label)
|
||||
{
|
||||
const auto root = new QTreeWidgetItem();
|
||||
root->setText(0, label);
|
||||
m_descTree->addTopLevelItem(root);
|
||||
return root;
|
||||
};
|
||||
|
||||
// Add the plugin identified by `key` to the tree under the root node `root`
|
||||
const auto addPlugin = [this](const auto& key, auto root)
|
||||
{
|
||||
const auto item = new QTreeWidgetItem();
|
||||
root->addChild(item);
|
||||
m_descTree->setItemWidget(item, 0, new PluginDescWidget(key, m_descTree));
|
||||
};
|
||||
|
||||
// Remove any existing plugins from the tree
|
||||
m_descTree->clear();
|
||||
|
||||
// Fetch and sort all instrument plugin descriptors
|
||||
auto descs = pluginFactory->descriptors(Plugin::Instrument);
|
||||
std::sort(descs.begin(), descs.end(),
|
||||
[](auto d1, auto d2)
|
||||
{
|
||||
return qstricmp(d1->displayName, d2->displayName) < 0;
|
||||
}
|
||||
);
|
||||
|
||||
typedef Plugin::Descriptor::SubPluginFeatures::KeyList PluginKeyList;
|
||||
typedef Plugin::Descriptor::SubPluginFeatures::Key PluginKey;
|
||||
PluginKeyList subPluginKeys, pluginKeys;
|
||||
// Add a root node to the tree for native LMMS plugins
|
||||
const auto lmmsRoot = addRoot("LMMS");
|
||||
lmmsRoot->setExpanded(true);
|
||||
|
||||
for (const Plugin::Descriptor* desc: descs)
|
||||
// Add all of the descriptors to the tree
|
||||
for (const auto desc : descs)
|
||||
{
|
||||
if ( desc->subPluginFeatures )
|
||||
if (desc->subPluginFeatures)
|
||||
{
|
||||
desc->subPluginFeatures->listSubPluginKeys(
|
||||
desc,
|
||||
subPluginKeys );
|
||||
// Fetch and sort all subplugins for this plugin descriptor
|
||||
auto subPluginKeys = Plugin::Descriptor::SubPluginFeatures::KeyList{};
|
||||
desc->subPluginFeatures->listSubPluginKeys(desc, subPluginKeys);
|
||||
std::sort(subPluginKeys.begin(), subPluginKeys.end(),
|
||||
[](const auto& l, const auto& r)
|
||||
{
|
||||
return QString::compare(l.displayName(), r.displayName(), Qt::CaseInsensitive) < 0;
|
||||
}
|
||||
);
|
||||
|
||||
// Create a root node for this plugin and add the subplugins under it
|
||||
const auto root = addRoot(desc->displayName);
|
||||
for (const auto& key : subPluginKeys) { addPlugin(key, root); }
|
||||
}
|
||||
else
|
||||
{
|
||||
pluginKeys << PluginKey( desc, desc->name );
|
||||
addPlugin(Plugin::Descriptor::SubPluginFeatures::Key(desc, desc->name), lmmsRoot);
|
||||
}
|
||||
}
|
||||
|
||||
pluginKeys += subPluginKeys;
|
||||
|
||||
for (const PluginKey& key : pluginKeys)
|
||||
{
|
||||
QTreeWidgetItem * item = new QTreeWidgetItem();
|
||||
if ( key.desc->name == QStringLiteral("lv2instrument") )
|
||||
{
|
||||
m_lv2Root->addChild( item );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lmmsRoot->addChild( item );
|
||||
}
|
||||
PluginDescWidget* p = new PluginDescWidget( key, m_descTree );
|
||||
m_descTree->setItemWidget( item, 0, p );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user