diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-10-25 15:52:53 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-10-25 15:52:53 +0100 |
| commit | 4e11faf1c8b19013da6d5686f79b67c1c746653b (patch) | |
| tree | 14a132b9f70eca24eb08fed8b35957e36f6fc114 /src | |
| parent | 52cfb8e8a7609c8b763652e1575a769dd5fe1b02 (diff) | |
Move IOrganizer::onModInstalled() to IModList. Add IModList::onModRemoved().
Diffstat (limited to 'src')
| -rw-r--r-- | src/modlist.cpp | 25 | ||||
| -rw-r--r-- | src/modlist.h | 35 | ||||
| -rw-r--r-- | src/modlistproxy.cpp | 10 | ||||
| -rw-r--r-- | src/modlistproxy.h | 2 | ||||
| -rw-r--r-- | src/organizercore.cpp | 13 | ||||
| -rw-r--r-- | src/organizercore.h | 4 | ||||
| -rw-r--r-- | src/organizerproxy.cpp | 5 | ||||
| -rw-r--r-- | src/organizerproxy.h | 1 |
8 files changed, 65 insertions, 30 deletions
diff --git a/src/modlist.cpp b/src/modlist.cpp index 2499bac0..90433963 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -77,6 +77,8 @@ ModList::ModList(PluginContainer *pluginContainer, OrganizerCore *organizer) ModList::~ModList() { + m_ModInstalled.disconnect_all_slots(); + m_ModRemoved.disconnect_all_slots(); m_ModStateChanged.disconnect_all_slots(); m_ModMoved.disconnect_all_slots(); } @@ -1001,10 +1003,29 @@ bool ModList::setPriority(const QString &name, int newPriority) } } +bool ModList::onModInstalled(const std::function<void(MOBase::IModInterface*)>& func) +{ + return m_ModInstalled.connect(func).connected(); +} + +bool ModList::onModRemoved(const std::function<void(QString const&)>& func) +{ + return m_ModRemoved.connect(func).connected(); +} + bool ModList::onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>& func) { - auto conn = m_ModStateChanged.connect(func); - return conn.connected(); + return m_ModStateChanged.connect(func).connected(); +} + +void ModList::notifyModInstalled(MOBase::IModInterface* mod) const +{ + m_ModInstalled(mod); +} + +void ModList::notifyModRemoved(QString const& modName) const +{ + m_ModRemoved(modName); } void ModList::notifyModStateChanged(QList<unsigned int> modIndices) const diff --git a/src/modlist.h b/src/modlist.h index 5312db34..baaeede3 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -70,8 +70,10 @@ public: COL_LASTCOLUMN = COL_NOTES,
};
- typedef boost::signals2::signal<void (const std::map<QString, ModStates>&)> SignalModStateChanged;
- typedef boost::signals2::signal<void (const QString &, int, int)> SignalModMoved;
+ using SignalModInstalled = boost::signals2::signal<void(MOBase::IModInterface*)>;
+ using SignalModRemoved = boost::signals2::signal<void(QString const&)>;
+ using SignalModStateChanged = boost::signals2::signal<void (const std::map<QString, ModStates>&)>;
+ using SignalModMoved = boost::signals2::signal<void (const QString &, int, int)>;
public:
@@ -125,6 +127,22 @@ public: void highlightMods(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry);
/**
+ * @brief Notify the mod list that the given mod has been installed. This is used
+ * to notify the plugin that registered through onModInstalled().
+ *
+ * @param mod The installed mod.
+ */
+ void notifyModInstalled(MOBase::IModInterface *mod) const;
+
+ /**
+ * @brief Notify the mod list that a mod has been removed. This is used
+ * to notify the plugin that registered through onModRemoved().
+ *
+ * @param modName Name of the removed mod.
+ */
+ void notifyModRemoved(QString const& modName) const;
+
+ /**
* @brief Notify the mod list that the state of the specified mods has changed. This is used
* to notify the plugin that registered through onModStateChanged().
*
@@ -155,11 +173,10 @@ public: /// \copydoc MOBase::IModList::setPriority
virtual bool setPriority(const QString &name, int newPriority) override;
- /// \copydoc MOBase::IModList::onModStateChanged
- virtual bool onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>& func) override;
-
- /// \copydoc MOBase::IModList::onModMoved
- virtual bool onModMoved(const std::function<void (const QString &, int, int)> &func) override;
+ bool onModInstalled(const std::function<void(MOBase::IModInterface*)>& func) override;
+ bool onModRemoved(const std::function<void(QString const&)>& func) override;
+ bool onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>& func) override;
+ bool onModMoved(const std::function<void (const QString &, int, int)> &func) override;
public: // implementation of virtual functions of QAbstractItemModel
@@ -362,8 +379,10 @@ private: TModInfoChange m_ChangeInfo;
- SignalModStateChanged m_ModStateChanged;
+ SignalModInstalled m_ModInstalled;
SignalModMoved m_ModMoved;
+ SignalModRemoved m_ModRemoved;
+ SignalModStateChanged m_ModStateChanged;
QElapsedTimer m_LastCheck;
diff --git a/src/modlistproxy.cpp b/src/modlistproxy.cpp index 7ec00c49..321f1873 100644 --- a/src/modlistproxy.cpp +++ b/src/modlistproxy.cpp @@ -42,6 +42,16 @@ bool ModListProxy::setPriority(const QString& name, int newPriority) return m_Proxied->setPriority(name, newPriority); } +bool ModListProxy::onModInstalled(const std::function<void(IModInterface*)>& func) +{ + return m_Proxied->onModInstalled(MOShared::callIfPluginActive(m_OrganizerProxy, func)); +} + +bool ModListProxy::onModRemoved(const std::function<void(QString const&)>& func) +{ + return m_Proxied->onModRemoved(MOShared::callIfPluginActive(m_OrganizerProxy, func)); +} + bool ModListProxy::onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>& func) { return m_Proxied->onModStateChanged(MOShared::callIfPluginActive(m_OrganizerProxy, func)); diff --git a/src/modlistproxy.h b/src/modlistproxy.h index 13399e0a..5b0a7114 100644 --- a/src/modlistproxy.h +++ b/src/modlistproxy.h @@ -20,6 +20,8 @@ public: int setActive(const QStringList& names, bool active) override; int priority(const QString& name) const override; bool setPriority(const QString& name, int newPriority) override; + bool onModInstalled(const std::function<void(MOBase::IModInterface *)>& func) override; + bool onModRemoved(const std::function<void(QString const&)>& func) override; bool onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>& func) override; bool onModMoved(const std::function<void(const QString&, int, int)>& func) override; diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 2aaeb86c..989fdcc2 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -301,7 +301,6 @@ void OrganizerCore::disconnectPlugins() { m_AboutToRun.disconnect_all_slots(); m_FinishedRun.disconnect_all_slots(); - m_ModInstalled.disconnect_all_slots(); m_UserInterfaceInitialized.disconnect_all_slots(); m_ProfileChanged.disconnect_all_slots(); m_PluginSettingChanged.disconnect_all_slots(); @@ -674,6 +673,7 @@ bool OrganizerCore::removeMod(MOBase::IModInterface *mod) } else { return ModInfo::removeMod(index); } + m_ModList.notifyModRemoved(mod->name()); } void OrganizerCore::modDataChanged(MOBase::IModInterface *) @@ -760,7 +760,7 @@ MOBase::IModInterface *OrganizerCore::installMod(const QString &fileName, m_UserInterface->displayModInformation( modInfo, modIndex, ModInfoTabIDs::IniFiles); } - m_ModInstalled(modName); + m_ModList.notifyModInstalled(modInfo.get()); m_DownloadManager.markInstalled(fileName); m_InstallationManager.notifyInstallationEnd(result, modInfo); emit modInstalled(modName); @@ -839,7 +839,7 @@ void OrganizerCore::installDownload(int index) modInfo, modIndex, ModInfoTabIDs::IniFiles); } - m_ModInstalled(modName); + m_ModList.notifyModInstalled(modInfo.get()); m_InstallationManager.notifyInstallationEnd(IPluginInstaller::RESULT_SUCCESS, modInfo); } else { reportError(tr("mod not found: %1").arg(qUtf8Printable(modName))); @@ -1132,13 +1132,6 @@ bool OrganizerCore::onFinishedRun( return conn.connected(); } -bool OrganizerCore::onModInstalled( - const std::function<void(const QString &)> &func) -{ - auto conn = m_ModInstalled.connect(func); - return conn.connected(); -} - bool OrganizerCore::onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func) { return m_UserInterfaceInitialized.connect(func).connected(); diff --git a/src/organizercore.h b/src/organizercore.h index 813bf084..25e68786 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -80,7 +80,6 @@ private: using SignalAboutToRunApplication = boost::signals2::signal<bool (const QString&), SignalCombinerAnd>;
using SignalFinishedRunApplication = boost::signals2::signal<void (const QString&, unsigned int)>;
- using SignalModInstalled = boost::signals2::signal<void (const QString&)>;
using SignalUserInterfaceInitialized = boost::signals2::signal<void (QMainWindow*)>;
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&)>;
@@ -321,8 +320,6 @@ public: void refreshModList(bool saveChanges = true);
QStringList modsSortedByProfilePriority() const;
-
- bool onModInstalled(const std::function<void(const QString&)>& func);
bool onAboutToRun(const std::function<bool(const QString&)>& func);
bool onFinishedRun(const std::function<void(const QString&, unsigned int)>& func);
bool onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func);
@@ -440,7 +437,6 @@ private: SignalAboutToRunApplication m_AboutToRun;
SignalFinishedRunApplication m_FinishedRun;
- SignalModInstalled m_ModInstalled;
SignalUserInterfaceInitialized m_UserInterfaceInitialized;
SignalProfileChanged m_ProfileChanged;
SignalPluginSettingChanged m_PluginSettingChanged;
diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index 2932e6bf..6f4b0cc9 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -271,11 +271,6 @@ bool OrganizerProxy::onFinishedRun(const std::function<void(const QString&, unsi return m_Proxied->onFinishedRun(MOShared::callIfPluginActive(this, func));
}
-bool OrganizerProxy::onModInstalled(const std::function<void(const QString&)>& func)
-{
- return m_Proxied->onModInstalled(MOShared::callIfPluginActive(this, func));
-}
-
bool OrganizerProxy::onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func)
{
// Always call this one to allow plugin to initialize themselves even when not active:
diff --git a/src/organizerproxy.h b/src/organizerproxy.h index cc059aa9..907375fe 100644 --- a/src/organizerproxy.h +++ b/src/organizerproxy.h @@ -61,7 +61,6 @@ public: virtual bool onAboutToRun(const std::function<bool(const QString&)> &func);
virtual bool onFinishedRun(const std::function<void (const QString&, unsigned int)> &func);
- virtual bool onModInstalled(const std::function<void (const QString&)> &func);
virtual bool onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func);
virtual bool onProfileChanged(std::function<void(MOBase::IProfile*, MOBase::IProfile*)> const& func);
virtual bool onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func);
|
