From 938d3ce91bd436e840684c0d633df71ef33fd4e0 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Wed, 2 May 2018 17:10:38 +0100 Subject: Take a list of proxied plugins for each name to work around multiple inheritance issues --- src/plugincontainer.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index f6376496..8935c472 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -155,14 +155,18 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::pluginPath())); for (const QString &pluginName : pluginNames) { try { - QObject *proxiedPlugin = proxy->instantiate(pluginName); - if (proxiedPlugin != nullptr) { - if (registerPlugin(proxiedPlugin, pluginName)) { - qDebug("loaded plugin \"%s\"", qPrintable(QFileInfo(pluginName).fileName())); - } else { - qWarning("plugin \"%s\" failed to load. If this plugin is for an older version of MO " - "you have to update it or delete it if no update exists.", - qPrintable(pluginName)); + // we get a list of matching plugins as proxies don't necessarily have a good way of supporting multiple inheritance + QList matchingPlugins = proxy->instantiate(pluginName); + for (QObject *proxiedPlugin : matchingPlugins) { + if (proxiedPlugin != nullptr) { + if (registerPlugin(proxiedPlugin, pluginName)) { + qDebug("loaded plugin \"%s\"", qPrintable(QFileInfo(pluginName).fileName())); + } + else { + qWarning("plugin \"%s\" failed to load. If this plugin is for an older version of MO " + "you have to update it or delete it if no update exists.", + qPrintable(pluginName)); + } } } } catch (const std::exception &e) { -- cgit v1.3.1 From 238c252b4c836433d41054387263bb91c07169a3 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Wed, 2 May 2018 17:11:54 +0100 Subject: Coalesce plugins with the same name in the settings dialogue (as they already share setting values) --- src/settings.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/settings.cpp b/src/settings.cpp index 21c73dec..2bcf2d02 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -908,12 +908,16 @@ Settings::PluginsTab::PluginsTab(Settings *m_parent, SettingsDialog &m_dialog) , m_pluginBlacklistList(m_dialog.findChild("pluginBlacklist")) { // display plugin settings + QSet handledNames; for (IPlugin *plugin : m_parent->m_Plugins) { + if (handledNames.contains(plugin->name())) + continue; QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), m_pluginsList); listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin)); listItem->setData(Qt::UserRole + 1, m_parent->m_PluginSettings[plugin->name()]); listItem->setData(Qt::UserRole + 2, m_parent->m_PluginDescriptions[plugin->name()]); m_pluginsList->addItem(listItem); + handledNames.insert(plugin->name()); } // display plugin blacklist -- cgit v1.3.1 From 4245036f524121aa113a44e02b2893bc08fb3d31 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Wed, 2 May 2018 17:12:34 +0100 Subject: Remove unused function which made things confusing --- src/settingsdialog.cpp | 7 ------- src/settingsdialog.h | 2 -- 2 files changed, 9 deletions(-) (limited to 'src') diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index a4071c26..44fc9b5e 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -58,13 +58,6 @@ SettingsDialog::~SettingsDialog() delete ui; } -void SettingsDialog::addPlugins(const std::vector &plugins) -{ - for (IPlugin *plugin : plugins) { - ui->pluginsList->addItem(plugin->name()); - } -} - void SettingsDialog::accept() { QString newModPath = ui->modDirEdit->text(); diff --git a/src/settingsdialog.h b/src/settingsdialog.h index 32a8d0c5..2e270131 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -44,8 +44,6 @@ public: explicit SettingsDialog(PluginContainer *pluginContainer, QWidget *parent = 0); ~SettingsDialog(); - void addPlugins(const std::vector &plugins); - public slots: virtual void accept(); -- cgit v1.3.1