summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/organizercore.cpp15
-rw-r--r--src/organizercore.h5
-rw-r--r--src/organizerproxy.cpp30
-rw-r--r--src/organizerproxy.h4
-rw-r--r--src/plugincontainer.cpp7
-rw-r--r--src/plugincontainer.h6
6 files changed, 66 insertions, 1 deletions
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 86afe59a..e004ba78 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -295,6 +295,11 @@ void OrganizerCore::connectPlugins(PluginContainer *container)
m_GamePlugin = m_PluginContainer->managedGame(m_GameName);
emit managedGameChanged(m_GamePlugin);
}
+
+ connect(m_PluginContainer, &PluginContainer::pluginEnabled,
+ [&](IPlugin* plugin) { m_PluginEnabled(plugin); });
+ connect(m_PluginContainer, &PluginContainer::pluginDisabled,
+ [&](IPlugin* plugin) { m_PluginDisabled(plugin); });
}
void OrganizerCore::disconnectPlugins()
@@ -1225,6 +1230,16 @@ bool OrganizerCore::onPluginSettingChanged(std::function<void(QString const&, co
return m_PluginSettingChanged.connect(func).connected();
}
+bool OrganizerCore::onPluginEnabled(std::function<void(const IPlugin*)> const& func)
+{
+ return m_PluginEnabled.connect(func).connected();
+}
+
+bool OrganizerCore::onPluginDisabled(std::function<void(const IPlugin*)> const& func)
+{
+ return m_PluginDisabled.connect(func).connected();
+}
+
void OrganizerCore::refresh(bool saveChanges)
{
// don't lose changes!
diff --git a/src/organizercore.h b/src/organizercore.h
index b566e626..23b624e8 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -87,6 +87,7 @@ private:
using SignalProfileRemoved = boost::signals2::signal<void(QString const&)>;
using SignalProfileChanged = boost::signals2::signal<void (MOBase::IProfile *, MOBase::IProfile *)>;
using SignalPluginSettingChanged = boost::signals2::signal<void (QString const&, const QString& key, const QVariant&, const QVariant&)>;
+ using SignalPluginEnabled = boost::signals2::signal<void(MOBase::IPlugin*)>;
public:
@@ -335,6 +336,8 @@ public:
bool onProfileRemoved(std::function<void(QString const&)> const& func);
bool onProfileChanged(std::function<void(MOBase::IProfile*, MOBase::IProfile*)> const& func);
bool onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func);
+ bool onPluginEnabled(std::function<void(const MOBase::IPlugin*)> const& func);
+ bool onPluginDisabled(std::function<void(const MOBase::IPlugin*)> const& func);
bool getArchiveParsing() const
{
@@ -457,6 +460,8 @@ private:
SignalProfileRemoved m_ProfileRemoved;
SignalProfileChanged m_ProfileChanged;
SignalPluginSettingChanged m_PluginSettingChanged;
+ SignalPluginEnabled m_PluginEnabled;
+ SignalPluginEnabled m_PluginDisabled;
ModList m_ModList;
PluginList m_PluginList;
diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp
index 77b7c2d6..c2283acc 100644
--- a/src/organizerproxy.cpp
+++ b/src/organizerproxy.cpp
@@ -293,8 +293,36 @@ bool OrganizerProxy::onProfileChanged(std::function<void(MOBase::IProfile*, MOBa
return m_Proxied->onProfileChanged(MOShared::callIfPluginActive(this, func));
}
+// Always call these one, otherwise plugin cannot detect they are being enabled / disabled:
bool OrganizerProxy::onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func)
{
- // Always call this one, otherwise plugin cannot detect they are being enabled / disabled:
return m_Proxied->onPluginSettingChanged(func);
}
+
+bool OrganizerProxy::onPluginEnabled(std::function<void(const IPlugin*)> const& func)
+{
+ return m_Proxied->onPluginEnabled(func);
+}
+
+bool OrganizerProxy::onPluginEnabled(const QString& pluginName, std::function<void()> const& func)
+{
+ return m_Proxied->onPluginEnabled([=](const IPlugin* plugin) {
+ if (plugin->name().compare(pluginName, Qt::CaseInsensitive) == 0) {
+ func();
+ }
+ });
+}
+
+bool OrganizerProxy::onPluginDisabled(std::function<void(const IPlugin*)> const& func)
+{
+ return m_Proxied->onPluginDisabled(func);
+}
+
+bool OrganizerProxy::onPluginDisabled(const QString& pluginName, std::function<void()> const& func)
+{
+ return m_Proxied->onPluginDisabled([=](const IPlugin* plugin) {
+ if (plugin->name().compare(pluginName, Qt::CaseInsensitive) == 0) {
+ func();
+ }
+ });
+}
diff --git a/src/organizerproxy.h b/src/organizerproxy.h
index 4329bdda..8664c64f 100644
--- a/src/organizerproxy.h
+++ b/src/organizerproxy.h
@@ -69,6 +69,10 @@ public:
virtual QVariant pluginSetting(const QString& pluginName, const QString& key) const override;
virtual void setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override;
virtual bool onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func) override;
+ virtual bool onPluginEnabled(std::function<void(const MOBase::IPlugin*)> const& func) override;
+ virtual bool onPluginEnabled(const QString& pluginName, std::function<void()> const& func) override;
+ virtual bool onPluginDisabled(std::function<void(const MOBase::IPlugin*)> const& func) override;
+ virtual bool onPluginDisabled(const QString& pluginName, std::function<void()> const& func) override;
virtual MOBase::IPluginGame const *managedGame() const;
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index d2f42fb4..1c2a1a1a 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -624,6 +624,13 @@ void PluginContainer::setEnabled(MOBase::IPlugin* plugin, bool enable, bool depe
}
m_Organizer->setPersistent(plugin->name(), "enabled", enable, true);
+
+ if (enable) {
+ emit pluginEnabled(plugin);
+ }
+ else {
+ emit pluginDisabled(plugin);
+ }
}
MOBase::IPlugin* PluginContainer::plugin(QString const& pluginName) const
diff --git a/src/plugincontainer.h b/src/plugincontainer.h
index ac40e413..54da37d0 100644
--- a/src/plugincontainer.h
+++ b/src/plugincontainer.h
@@ -325,6 +325,12 @@ public: // IPluginDiagnose interface
signals:
+ /**
+ * @brief Emitted plugins are enabled or disabled.
+ */
+ void pluginEnabled(MOBase::IPlugin*);
+ void pluginDisabled(MOBase::IPlugin*);
+
void diagnosisUpdate();
private: