From e38592da977858149013d0c500c66975720b3e1f Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 17 May 2015 14:30:14 +0200 Subject: extended plugin interface. Plugins can now activate/deactivate mods, install mods suggesting a name and retrieve a list of all installed mods --- src/modlist.cpp | 23 +++++++++++++++++++++++ src/modlist.h | 18 ++++++++++++------ src/organizerproxy.cpp | 4 ++-- src/organizerproxy.h | 2 +- 4 files changed, 38 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/modlist.cpp b/src/modlist.cpp index e05935ef..fc09097a 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -708,6 +708,15 @@ QString ModList::displayName(const QString &internalName) const } } +QStringList ModList::allMods() const +{ + QStringList result; + for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) { + result.append(ModInfo::getByIndex(i)->internalName()); + } + return result; +} + IModList::ModStates ModList::state(const QString &name) const { unsigned int modIndex = ModInfo::getIndex(name); @@ -715,6 +724,20 @@ IModList::ModStates ModList::state(const QString &name) const return state(modIndex); } +bool ModList::setActive(const QString &name, bool active) +{ + unsigned int modIndex = ModInfo::getIndex(name); + if (modIndex == UINT_MAX) { + return false; + } else { + m_Profile->setModEnabled(modIndex, active); + + IModList::ModStates newState = state(modIndex); + m_ModStateChanged(name, newState); + return true; + } +} + int ModList::priority(const QString &name) const { unsigned int modIndex = ModInfo::getIndex(name); diff --git a/src/modlist.h b/src/modlist.h index d2cd00ce..fed91f71 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -116,22 +116,28 @@ public: public: /// \copydoc MOBase::IModList::displayName - virtual QString displayName(const QString &internalName) const; + virtual QString displayName(const QString &internalName) const override; + + /// \copydoc MOBase::IModList::allMods + virtual QStringList allMods() const override; /// \copydoc MOBase::IModList::state - virtual ModStates state(const QString &name) const; + virtual ModStates state(const QString &name) const override; + + /// \copydoc MOBase::IModList::setActive + virtual bool setActive(const QString &name, bool active) override; /// \copydoc MOBase::IModList::priority - virtual int priority(const QString &name) const; + virtual int priority(const QString &name) const override; /// \copydoc MOBase::IModList::setPriority - virtual bool setPriority(const QString &name, int newPriority); + virtual bool setPriority(const QString &name, int newPriority) override; /// \copydoc MOBase::IModList::onModStateChanged - virtual bool onModStateChanged(const std::function &func); + virtual bool onModStateChanged(const std::function &func) override; /// \copydoc MOBase::IModList::onModMoved - virtual bool onModMoved(const std::function &func); + virtual bool onModMoved(const std::function &func) override; public: // implementation of virtual functions of QAbstractItemModel diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index 2ce5b3ee..095cb0bb 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -125,9 +125,9 @@ void OrganizerProxy::refreshModList(bool saveChanges) m_Proxied->refreshModList(saveChanges); } -IModInterface *OrganizerProxy::installMod(const QString &fileName) +IModInterface *OrganizerProxy::installMod(const QString &fileName, const QString &nameSuggestion) { - return m_Proxied->installMod(fileName, QString()); + return m_Proxied->installMod(fileName, nameSuggestion); } QString OrganizerProxy::resolvePath(const QString &fileName) const diff --git a/src/organizerproxy.h b/src/organizerproxy.h index 29f8a8d1..fb502a7f 100644 --- a/src/organizerproxy.h +++ b/src/organizerproxy.h @@ -28,7 +28,7 @@ public: virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const; virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true); virtual QString pluginDataPath() const; - virtual MOBase::IModInterface *installMod(const QString &fileName); + virtual MOBase::IModInterface *installMod(const QString &fileName, const QString &nameSuggestion = QString()); virtual QString resolvePath(const QString &fileName) const; virtual QStringList listDirectories(const QString &directoryName) const; virtual QStringList findFiles(const QString &path, const std::function &filter) const; -- cgit v1.3.1