diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-05-28 23:42:53 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-28 23:42:53 -0400 |
| commit | da35955d6c15c4abc83ae8c0a4ea8195c0c0ac85 (patch) | |
| tree | beab5513b64e93c32d50f628321654623b603129 /src/modlist.cpp | |
| parent | 652d3ab054cd2bd94fe88dc42aa39798fc3b2c4a (diff) | |
| parent | 0a5790b333883c7c4ef07bb44f0a411ce8ba79b5 (diff) | |
Merge pull request #1092 from Holt59/mod-data-content
Use ModDataContent feature from GamePlugin
Diffstat (limited to 'src/modlist.cpp')
| -rw-r--r-- | src/modlist.cpp | 89 |
1 files changed, 36 insertions, 53 deletions
diff --git a/src/modlist.cpp b/src/modlist.cpp index e8c14434..06e5e9bf 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -19,12 +19,14 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "modlist.h" +#include "widgetutility.h" #include "messagedialog.h" #include "qtgroupingproxy.h" #include "viewmarkingscrollbar.h" #include "modlistsortproxy.h" #include "pluginlist.h" #include "settings.h" +#include "organizercore.h" #include "modinforegular.h" #include "shared/directoryentry.h" #include "shared/fileentry.h" @@ -59,8 +61,9 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. using namespace MOBase; -ModList::ModList(PluginContainer *pluginContainer, QObject *parent) - : QAbstractItemModel(parent) +ModList::ModList(PluginContainer *pluginContainer, OrganizerCore *organizer) + : QAbstractItemModel(organizer) + , m_Organizer(organizer) , m_Profile(nullptr) , m_NexusInterface(nullptr) , m_Modified(false) @@ -69,19 +72,6 @@ ModList::ModList(PluginContainer *pluginContainer, QObject *parent) , m_DropOnItems(false) , m_PluginContainer(pluginContainer) { - m_ContentIcons[ModInfo::CONTENT_PLUGIN] = std::make_tuple(":/MO/gui/content/plugin", QT_TR_NOOP("Game Plugins (ESP/ESM/ESL)")); - m_ContentIcons[ModInfo::CONTENT_INTERFACE] = std::make_tuple(":/MO/gui/content/interface", QT_TR_NOOP("Interface")); - m_ContentIcons[ModInfo::CONTENT_MESH] = std::make_tuple(":/MO/gui/content/mesh", QT_TR_NOOP("Meshes")); - m_ContentIcons[ModInfo::CONTENT_BSA] = std::make_tuple(":/MO/gui/content/bsa", QT_TR_NOOP("Bethesda Archive")); - m_ContentIcons[ModInfo::CONTENT_SCRIPT] = std::make_tuple(":/MO/gui/content/script", QT_TR_NOOP("Scripts (Papyrus)")); - m_ContentIcons[ModInfo::CONTENT_SKSE] = std::make_tuple(":/MO/gui/content/skse", QT_TR_NOOP("Script Extender Plugin")); - m_ContentIcons[ModInfo::CONTENT_SKYPROC] = std::make_tuple(":/MO/gui/content/skyproc", QT_TR_NOOP("SkyProc Patcher")); - m_ContentIcons[ModInfo::CONTENT_SOUND] = std::make_tuple(":/MO/gui/content/sound", QT_TR_NOOP("Sound or Music")); - m_ContentIcons[ModInfo::CONTENT_TEXTURE] = std::make_tuple(":/MO/gui/content/texture", QT_TR_NOOP("Textures")); - m_ContentIcons[ModInfo::CONTENT_MCM] = std::make_tuple(":/MO/gui/content/menu", QT_TR_NOOP("MCM Configuration")); - m_ContentIcons[ModInfo::CONTENT_INI] = std::make_tuple(":/MO/gui/content/inifile", QT_TR_NOOP("INI files")); - m_ContentIcons[ModInfo::CONTENT_MODGROUP] = std::make_tuple(":/MO/gui/content/modgroup", QT_TR_NOOP("ModGroup files")); - m_LastCheck.start(); } @@ -188,32 +178,24 @@ QString ModList::getConflictFlagText(ModInfo::EConflictFlag flag, ModInfo::Ptr m } -QVariantList ModList::contentsToIcons(const std::vector<ModInfo::EContent> &contents) const +QVariantList ModList::contentsToIcons(const std::set<int> &contents) const { QVariantList result; - std::set<ModInfo::EContent> contentsSet(contents.begin(), contents.end()); - for (auto iter = m_ContentIcons.begin(); iter != m_ContentIcons.end(); ++iter) { - if (contentsSet.find(iter->first) != contentsSet.end()) { - result.append(std::get<0>(iter->second)); - } else { - result.append(QString()); - } - } + m_Organizer->modDataContents().forEachContentInOrOut( + contents, + [&result](auto const& content) { result.append(content.icon()); }, + [&result](auto const&) { result.append(QString()); }); return result; } -QString ModList::contentsToToolTip(const std::vector<ModInfo::EContent> &contents) const +QString ModList::contentsToToolTip(const std::set<int> &contents) const { QString result("<table cellspacing=7>"); - - std::set<ModInfo::EContent> contentsSet(contents.begin(), contents.end()); - for (auto iter = m_ContentIcons.begin(); iter != m_ContentIcons.end(); ++iter) { - if (contentsSet.find(iter->first) != contentsSet.end()) { - result.append(QString("<tr><td><img src=\"%1\" width=32/></td>" - "<td valign=\"middle\">%2</td></tr>") - .arg(std::get<0>(iter->second)).arg(tr(std::get<1>(iter->second).toStdString().c_str()))); - } - } + m_Organizer->modDataContents().forEachContentIn(contents, [&result](auto const& content) { + result.append(QString("<tr><td><img src=\"%1\" width=32/></td>" + "<td valign=\"middle\">%2</td></tr>") + .arg(content.icon()).arg(content.name())); + }); result.append("</table>"); return result; } @@ -681,6 +663,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); @@ -1309,7 +1298,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"); @@ -1321,24 +1310,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:<br>" - "<table cellspacing=7>" - "<tr><td><img src=\":/MO/gui/content/plugin\" width=32/></td><td>Game plugins (esp/esm/esl)</td></tr>" - "<tr><td><img src=\":/MO/gui/content/interface\" width=32/></td><td>Interface</td></tr>" - "<tr><td><img src=\":/MO/gui/content/mesh\" width=32/></td><td>Meshes</td></tr>" - "<tr><td><img src=\":/MO/gui/content/bsa\" width=32/></td><td>BSA</td></tr>" - "<tr><td><img src=\":/MO/gui/content/texture\" width=32/></td><td>Textures</td></tr>" - "<tr><td><img src=\":/MO/gui/content/sound\" width=32/></td><td>Sounds</td></tr>" - "<tr><td><img src=\":/MO/gui/content/music\" width=32/></td><td>Music</td></tr>" - "<tr><td><img src=\":/MO/gui/content/string\" width=32/></td><td>Strings</td></tr>" - "<tr><td><img src=\":/MO/gui/content/script\" width=32/></td><td>Scripts (Papyrus)</td></tr>" - "<tr><td><img src=\":/MO/gui/content/skse\" width=32/></td><td>Script Extender plugins</td></tr>" - "<tr><td><img src=\":/MO/gui/content/skyproc\" width=32/></td><td>SkyProc Patcher</td></tr>" - "<tr><td><img src=\":/MO/gui/content/menu\" width=32/></td><td>Mod Configuration Menu</td></tr>" - "<tr><td><img src=\":/MO/gui/content/inifile\" width=32/></td><td>INI files</td></tr>" - "<tr><td><img src=\":/MO/gui/content/modgroup\" width=32/></td><td>ModGroup files</td></tr>" - - "</table>"); + case COL_CONTENT: { + auto& contents = m_Organizer->modDataContents(); + if (m_Organizer->modDataContents().empty()) { + return QString(); + } + QString result = tr("Depicts the content of the mod:") + "<br>" + "<table cellspacing=7>"; + m_Organizer->modDataContents().forEachContent([&result](auto const& content) { + result += QString("<tr><td><img src=\"%1\" width=32/></td><td>%2</td></tr>") + .arg(content.icon()).arg(content.name()); + }); + return result + "</table>"; + }; case COL_INSTALLTIME: return tr("Time this mod was installed"); case COL_NOTES: return tr("User notes about the mod"); default: return tr("unknown"); |
