From cf1bbdd13e0db8856df672c367d3ec1610f6c556 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Mon, 25 May 2020 19:53:21 +0200 Subject: Switch to using the ModDataContent feature from the game plugin. --- src/modlist.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/modlist.h') diff --git a/src/modlist.h b/src/modlist.h index 4d456a9a..2abda076 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -20,7 +20,7 @@ along with Mod Organizer. If not, see . #ifndef MODLIST_H #define MODLIST_H - +#include "moddatacontent.h" #include "categories.h" #include "nexusinterface.h" #include "modinfo.h" @@ -42,6 +42,7 @@ along with Mod Organizer. If not, see . class QSortFilterProxyModel; class PluginContainer; +class OrganizerCore; /** * Model presenting an overview of the installed mod @@ -78,7 +79,7 @@ public: * @brief constructor * @todo ensure this view works without a profile set, otherwise there are intransparent dependencies on the initialisation order **/ - ModList(PluginContainer *pluginContainer, QObject *parent = nullptr); + ModList(PluginContainer *pluginContainer, OrganizerCore *parent = nullptr); ~ModList(); @@ -284,9 +285,9 @@ private: static QString getColumnToolTip(int column); - QVariantList contentsToIcons(const std::vector &content) const; + QVariantList contentsToIcons(const std::vector &contentIds) const; - QString contentsToToolTip(const std::vector &contents) const; + QString contentsToToolTip(const std::vector &contentsIds) const; ModList::EColumn getEnabledColumn(int index) const; @@ -328,6 +329,7 @@ private: private: + OrganizerCore *m_Organizer; Profile *m_Profile; NexusInterface *m_NexusInterface; @@ -352,8 +354,6 @@ private: SignalModStateChanged m_ModStateChanged; SignalModMoved m_ModMoved; - std::map > m_ContentIcons; - QElapsedTimer m_LastCheck; PluginContainer *m_PluginContainer; -- cgit v1.3.1 From 36b81b4a7ca4d9760c4fbe79d67c9aed7e0ab6fe Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Mon, 25 May 2020 20:17:21 +0200 Subject: Use ModDataContent to display the tooltip in the header. --- src/modlist.cpp | 40 +++++++++++++++++++++------------------- src/modlist.h | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) (limited to 'src/modlist.h') diff --git a/src/modlist.cpp b/src/modlist.cpp index 3ace0ed0..e71bff14 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -19,6 +19,7 @@ along with Mod Organizer. If not, see . #include "modlist.h" +#include "widgetutility.h" #include "messagedialog.h" #include "qtgroupingproxy.h" #include "viewmarkingscrollbar.h" @@ -670,6 +671,13 @@ QVariant ModList::headerData(int section, Qt::Orientation orientation, return getColumnToolTip(section); } else if (role == Qt::TextAlignmentRole) { return QVariant(Qt::AlignCenter); + } else if (role == MOBase::EnabledColumnRole) { + if (section == COL_CONTENT) { + return !m_Organizer->modDataContents().empty(); + } + else { + return true; + } } } return QAbstractItemModel::headerData(section, orientation, role); @@ -1298,7 +1306,7 @@ QString ModList::getColumnName(int column) } -QString ModList::getColumnToolTip(int column) +QString ModList::getColumnToolTip(int column) const { switch (column) { case COL_NAME: return tr("Name of your mods"); @@ -1310,24 +1318,18 @@ QString ModList::getColumnToolTip(int column) case COL_MODID: return tr("Id of the mod as used on Nexus."); case COL_CONFLICTFLAGS: return tr("Indicators of file conflicts between mods."); case COL_FLAGS: return tr("Emblems to highlight things that might require attention."); - case COL_CONTENT: return tr("Depicts the content of the mod:
" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - - "
Game plugins (esp/esm/esl)
Interface
Meshes
BSA
Textures
Sounds
Music
Strings
Scripts (Papyrus)
Script Extender plugins
SkyProc Patcher
Mod Configuration Menu
INI files
ModGroup files
"); + case COL_CONTENT: { + auto& contents = m_Organizer->modDataContents(); + if (contents.empty()) { + return QString(); + } + QString result = tr("Depicts the content of the mod:") + "
" + ""; + for (auto& content : contents) { + result += QString("") + .arg(content.icon()).arg(content.name()); + } + return result + "
%2
"; + }; case COL_INSTALLTIME: return tr("Time this mod was installed"); case COL_NOTES: return tr("User notes about the mod"); default: return tr("unknown"); diff --git a/src/modlist.h b/src/modlist.h index 2abda076..4e2e86d2 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -283,7 +283,7 @@ private: QString getConflictFlagText(ModInfo::EConflictFlag flag, ModInfo::Ptr modInfo) const; - static QString getColumnToolTip(int column); + QString getColumnToolTip(int column) const; QVariantList contentsToIcons(const std::vector &contentIds) const; -- cgit v1.3.1 From 700c5fb16c1c4e39fd757998e95ead4a25ecc6da Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Wed, 27 May 2020 22:45:42 +0200 Subject: Store contents as a set instead of a vector. --- src/modinfo.h | 2 +- src/modinforegular.cpp | 5 +++-- src/modinforegular.h | 2 +- src/modinfowithconflictinfo.cpp | 2 +- src/modinfowithconflictinfo.h | 7 ++++--- src/modlist.cpp | 11 ++++------- src/modlist.h | 6 +++--- 7 files changed, 17 insertions(+), 18 deletions(-) (limited to 'src/modlist.h') diff --git a/src/modinfo.h b/src/modinfo.h index 5f2d7ba7..a6c8ea65 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -521,7 +521,7 @@ public: /** * @return a list of content types contained in a mod */ - virtual const std::vector& getContents() const = 0; + virtual const std::set& getContents() const = 0; /** * @brief test if the specified flag is set for this mod diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp index 8ad7ffe5..8ef8e007 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -653,12 +653,13 @@ std::vector ModInfoRegular::getFlags() const } -std::vector ModInfoRegular::doGetContents() const +std::set ModInfoRegular::doGetContents() const { ModDataContent* contentFeature = m_GamePlugin->feature(); if (contentFeature) { - return contentFeature->getContentsFor(contentFileTree()); + auto result = contentFeature->getContentsFor(contentFileTree()); + return std::set(std::begin(result), std::end(result)); } return {}; diff --git a/src/modinforegular.h b/src/modinforegular.h index b09dcd98..7e70631e 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -416,7 +416,7 @@ private slots: protected: - virtual std::vector doGetContents() const override; + virtual std::set doGetContents() const override; ModInfoRegular(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &path, MOShared::DirectoryEntry **directoryStructure); diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index 14b341d2..227ee12e 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -331,7 +331,7 @@ bool ModInfoWithConflictInfo::isValid() const { return m_Valid.value(); } -const std::vector& ModInfoWithConflictInfo::getContents() const { +const std::set& ModInfoWithConflictInfo::getContents() const { return m_Contents.value(); } diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h index b66a7444..7109b83d 100644 --- a/src/modinfowithconflictinfo.h +++ b/src/modinfowithconflictinfo.h @@ -6,6 +6,7 @@ #include "thread_utils.h" #include "modinfo.h" +#include #include class ModInfoWithConflictInfo : public ModInfo @@ -24,7 +25,7 @@ public: /** * @return a list of content types contained in a mod */ - virtual const std::vector& getContents() const override; + virtual const std::set& getContents() const override; /** * @brief Test if the mod contains the specified content. @@ -75,7 +76,7 @@ protected: * * @return the contents for this mod. **/ - virtual std::vector doGetContents() const { return {}; } + virtual std::set doGetContents() const { return {}; } /** * @brief Retrieve a file tree corresponding to the underlying disk content @@ -146,7 +147,7 @@ private: MOShared::MemoizedLocked> m_FileTree; MOShared::MemoizedLocked m_Valid; - MOShared::MemoizedLocked> m_Contents; + MOShared::MemoizedLocked> m_Contents; MOShared::DirectoryEntry **m_DirectoryStructure; diff --git a/src/modlist.cpp b/src/modlist.cpp index 7fa63b54..614588db 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -178,13 +178,12 @@ QString ModList::getConflictFlagText(ModInfo::EConflictFlag flag, ModInfo::Ptr m } -QVariantList ModList::contentsToIcons(const std::vector &contents) const +QVariantList ModList::contentsToIcons(const std::set &contents) const { QVariantList result; - std::set contentsSet(contents.begin(), contents.end()); for (auto &content: m_Organizer->modDataContents()) { if (!content.isOnlyForFilter()) { - if (contentsSet.find(content.id()) != contentsSet.end()) { + if (contents.find(content.id()) != contents.end()) { result.append(content.icon()); } else { @@ -195,13 +194,11 @@ QVariantList ModList::contentsToIcons(const std::vector &contents) const return result; } -QString ModList::contentsToToolTip(const std::vector &contents) const +QString ModList::contentsToToolTip(const std::set &contents) const { QString result(""); - - std::set contentsSet(contents.begin(), contents.end()); for (auto& content : m_Organizer->modDataContents()) { - if (!content.isOnlyForFilter() && contentsSet.find(content.id()) != contentsSet.end()) { + if (!content.isOnlyForFilter() && contents.find(content.id()) != contents.end()) { result.append(QString("" "") .arg(content.icon()).arg(content.name())); diff --git a/src/modlist.h b/src/modlist.h index 4e2e86d2..8c29300d 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -79,7 +79,7 @@ public: * @brief constructor * @todo ensure this view works without a profile set, otherwise there are intransparent dependencies on the initialisation order **/ - ModList(PluginContainer *pluginContainer, OrganizerCore *parent = nullptr); + ModList(PluginContainer *pluginContainer, OrganizerCore *parent); ~ModList(); @@ -285,9 +285,9 @@ private: QString getColumnToolTip(int column) const; - QVariantList contentsToIcons(const std::vector &contentIds) const; + QVariantList contentsToIcons(const std::set &contentIds) const; - QString contentsToToolTip(const std::vector &contentsIds) const; + QString contentsToToolTip(const std::set &contentsIds) const; ModList::EColumn getEnabledColumn(int index) const; -- cgit v1.3.1
%2