summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Rimpo <jeremy.rimpo@servermonkey.com>2018-05-02 14:01:50 -0500
committerGitHub <noreply@github.com>2018-05-02 14:01:50 -0500
commit5555a58f8454063e66dd9a29449fcb19f73a0687 (patch)
treeedfc65d651b5fef8ef0639c6389c8e7b61d3cc07 /src
parent6588a81b7f52e94c4fca4a7378ca13307d51b58e (diff)
parent4245036f524121aa113a44e02b2893bc08fb3d31 (diff)
Merge pull request #335 from AnyOldName3/proxy-multiple-inheritance-support
Proxy multiple inheritance support
Diffstat (limited to 'src')
-rw-r--r--src/plugincontainer.cpp20
-rw-r--r--src/settings.cpp4
-rw-r--r--src/settingsdialog.cpp7
-rw-r--r--src/settingsdialog.h2
4 files changed, 16 insertions, 17 deletions
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<QObject*> 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) {
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<QListWidget *>("pluginBlacklist"))
{
// display plugin settings
+ QSet<QString> 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
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<IPlugin*> &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<MOBase::IPlugin*> &plugins);
-
public slots:
virtual void accept();