summaryrefslogtreecommitdiff
path: root/src/organizerproxy.h
diff options
context:
space:
mode:
authorMikaƫl Capelle <capelle.mikael@gmail.com>2020-12-07 08:40:23 +0100
committerGitHub <noreply@github.com>2020-12-07 08:40:23 +0100
commit904264e231a9aef485025cb45f1eb006b017aa1a (patch)
treec3ff682de4ac4761b8d36f0e96a96dce6a034706 /src/organizerproxy.h
parent0a6a5eb7868dde908e07ea12c7eb674b2063b950 (diff)
parent3264d7899e2560bce4591ab2142ee9d51bc7890c (diff)
Merge pull request #1313 from Holt59/load-plugin-without-restart
Implement loading/unloading of plugins without restarting
Diffstat (limited to 'src/organizerproxy.h')
-rw-r--r--src/organizerproxy.h39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/organizerproxy.h b/src/organizerproxy.h
index 3097adf0..7a91a347 100644
--- a/src/organizerproxy.h
+++ b/src/organizerproxy.h
@@ -6,7 +6,8 @@
#include <iplugin.h>
#include <imoinfo.h>
-class OrganizerCore;
+#include "organizercore.h"
+
class PluginContainer;
class DownloadManagerProxy;
class ModListProxy;
@@ -18,12 +19,17 @@ class OrganizerProxy : public MOBase::IOrganizer
public:
OrganizerProxy(OrganizerCore *organizer, PluginContainer *pluginContainer, MOBase::IPlugin *plugin);
+ ~OrganizerProxy();
+
+public:
/**
* @return the plugin corresponding to this proxy.
*/
MOBase::IPlugin* plugin() const { return m_Plugin; }
+public: // IOrganizer interface
+
virtual MOBase::IModRepositoryBridge *createNexusBridge() const;
virtual QString profileName() const;
virtual QString profilePath() const;
@@ -76,6 +82,24 @@ public:
virtual MOBase::IPluginGame const *managedGame() const;
+protected:
+
+ // The container needs access to some callbacks to simulate startup.
+ friend class PluginContainer;
+
+ /**
+ * @brief Connect the signals from this proxy and all the child proxies (plugin list, mod
+ * list, etc.) to the actual implementation. Before this call, plugins can register signals
+ * but they won't be triggered.
+ */
+ void connectSignals();
+
+ /**
+ * @brief Disconnect the signals from this proxy and all the child proxies (plugin list, mod
+ * list, etc.) from the actual implementation.
+ */
+ void disconnectSignals();
+
private:
OrganizerCore *m_Proxied;
@@ -83,6 +107,19 @@ private:
MOBase::IPlugin *m_Plugin;
+ OrganizerCore::SignalAboutToRunApplication m_AboutToRun;
+ OrganizerCore::SignalFinishedRunApplication m_FinishedRun;
+ OrganizerCore::SignalUserInterfaceInitialized m_UserInterfaceInitialized;
+ OrganizerCore::SignalProfileCreated m_ProfileCreated;
+ OrganizerCore::SignalProfileRenamed m_ProfileRenamed;
+ OrganizerCore::SignalProfileRemoved m_ProfileRemoved;
+ OrganizerCore::SignalProfileChanged m_ProfileChanged;
+ OrganizerCore::SignalPluginSettingChanged m_PluginSettingChanged;
+ OrganizerCore::SignalPluginEnabled m_PluginEnabled;
+ OrganizerCore::SignalPluginEnabled m_PluginDisabled;
+
+ std::vector<boost::signals2::connection> m_Connections;
+
std::unique_ptr<DownloadManagerProxy> m_DownloadManagerProxy;
std::unique_ptr<ModListProxy> m_ModListProxy;
std::unique_ptr<PluginListProxy> m_PluginListProxy;