summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modlist.cpp25
-rw-r--r--src/modlist.h35
-rw-r--r--src/modlistproxy.cpp10
-rw-r--r--src/modlistproxy.h2
-rw-r--r--src/organizercore.cpp13
-rw-r--r--src/organizercore.h4
-rw-r--r--src/organizerproxy.cpp5
-rw-r--r--src/organizerproxy.h1
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);