From 54b18e88159738a3054c71d5a4827646caad4ded Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Sat, 23 Nov 2019 23:54:19 -0500
Subject: added loot info to tooltip
---
src/pluginlist.cpp | 212 +++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 172 insertions(+), 40 deletions(-)
(limited to 'src/pluginlist.cpp')
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index 52c3fc3c..e91d820d 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -1034,36 +1034,30 @@ QVariant PluginList::tooltipData(const QModelIndex &modelIndex) const
QString toolTip;
- // additional info
- auto itor = m_AdditionalInfo.find(esp.name.toLower());
-
- if (itor != m_AdditionalInfo.end()) {
- if (!itor->second.messages.isEmpty()) {
- toolTip += "
";
-
- for (auto&& message : itor->second.messages) {
- toolTip += "- " + message + "
";
- }
-
- toolTip += "
";
- }
- }
-
- toolTip += tr("Origin: %1").arg(esp.originName);
+ toolTip += "" + tr("Origin") + ": " + esp.originName;
if (esp.forceEnabled) {
- toolTip += tr("
This plugin can't be disabled (enforced by the game).");
+ toolTip +=
+ "
" +
+ tr("This plugin can't be disabled (enforced by the game).") +
+ "";
} else {
if (!esp.author.isEmpty()) {
- toolTip += "
" + tr("Author") + ": " + TruncateString(esp.author);
+ toolTip +=
+ "
" + tr("Author") + ": " +
+ TruncateString(esp.author);
}
if (esp.description.size() > 0) {
- toolTip += "
" + tr("Description") + ": " + TruncateString(esp.description);
+ toolTip +=
+ "
" + tr("Description") + ": " +
+ TruncateString(esp.description);
}
if (esp.masterUnset.size() > 0) {
- toolTip += "
" + tr("Missing Masters") + ": " + TruncateString(SetJoin(esp.masterUnset, ", ")) + "";
+ toolTip +=
+ "
" + tr("Missing Masters") + ": " +
+ "" + TruncateString(SetJoin(esp.masterUnset, ", ")) + "";
}
std::set enabledMasters;
@@ -1072,61 +1066,199 @@ QVariant PluginList::tooltipData(const QModelIndex &modelIndex) const
std::inserter(enabledMasters, enabledMasters.end()));
if (!enabledMasters.empty()) {
- toolTip += "
" + tr("Enabled Masters") + ": " + TruncateString(SetJoin(enabledMasters, ", "));
+ toolTip +=
+ "
" + tr("Enabled Masters") + ": " +
+ TruncateString(SetJoin(enabledMasters, ", "));
}
if (!esp.archives.empty()) {
- toolTip += "
" + tr("Loads Archives") + ": " + TruncateString(SetJoin(esp.archives, ", "));
- toolTip += "
" + tr("There are Archives connected to this plugin. "
- "Their assets will be added to your game, overwriting in case of conflicts following the plugin order. "
- "Loose files will always overwrite assets from Archives. (This flag only checks for Archives from the same mod as the plugin)");
+ toolTip +=
+ "
" + tr("Loads Archives") + ": " +
+ TruncateString(SetJoin(esp.archives, ", ")) +
+ "
" + tr(
+ "There are Archives connected to this plugin. Their assets will be "
+ "added to your game, overwriting in case of conflicts following the "
+ "plugin order. Loose files will always overwrite assets from "
+ "Archives. (This flag only checks for Archives from the same mod as "
+ "the plugin)");
}
if (esp.hasIni) {
- toolTip += "
" + tr("Loads INI settings") + ": ";
- toolTip += "
" + tr("There is an ini file connected to this plugin. "
- "Its settings will be added to your game settings, overwriting in case of conflicts.");
+ toolTip +=
+ "
" + tr("Loads INI settings") + ": "
+ "
" + tr(
+ "There is an ini file connected to this plugin. Its settings will "
+ "be added to your game settings, overwriting in case of conflicts.");
}
if (esp.isLightFlagged && !esp.isLight) {
- toolTip += "
" + tr("This ESP is flagged as an ESL. "
- "It will adhere to the ESP load order but the records will be loaded in ESL space.");
+ toolTip +=
+ "
" + tr(
+ "This ESP is flagged as an ESL. It will adhere to the ESP load "
+ "order but the records will be loaded in ESL space.");
}
}
+
+ // additional info
+ auto itor = m_AdditionalInfo.find(esp.name.toLower());
+
+ if (itor != m_AdditionalInfo.end()) {
+ if (!itor->second.messages.isEmpty()) {
+ toolTip += "
";
+
+ for (auto&& message : itor->second.messages) {
+ toolTip += "- " + message + "
";
+ }
+
+ toolTip += "
";
+ }
+
+ // loot
+ toolTip += makeLootTooltip(itor->second.loot);
+ }
+
return toolTip;
}
+QString PluginList::makeLootTooltip(const Loot::Plugin& loot) const
+{
+ QString s;
+
+ for (auto&& f : loot.incompatibilities) {
+ s +=
+ "" + tr("Incompatible with %1")
+ .arg(f.displayName.isEmpty() ? f.name : f.displayName) +
+ "";
+ }
+
+ for (auto&& m : loot.missingMasters) {
+ s += "" + tr("Depends on missing %1").arg(m) + "";
+ }
+
+ for (auto&& m : loot.messages) {
+ s += "";
+
+ switch (m.type)
+ {
+ case log::Warning:
+ s += tr("Warning") + ": ";
+ break;
+
+ case log::Error:
+ s += tr("Error") + ": ";
+ break;
+
+ case log::Info: // fall-through
+ case log::Debug:
+ default:
+ // nothing
+ break;
+ }
+
+ s += m.text + "";
+ }
+
+ for (auto&& d : loot.dirty) {
+ s += "" + d.toString(false) + "";
+ }
+
+ for (auto&& c : loot.clean) {
+ s += "" + c.toString(true) + "";
+ }
+
+ if (!s.isEmpty()) {
+ s =
+ "
"
+ "";
+ }
+
+ return s;
+}
+
QVariant PluginList::iconData(const QModelIndex &modelIndex) const
{
int index = modelIndex.row();
QVariantList result;
- QString nameLower = m_ESPs[index].name.toLower();
- if (m_ESPs[index].masterUnset.size() > 0) {
+
+ const auto& esp = m_ESPs[index];
+ const QString nameLower = esp.name.toLower();
+
+ auto infoItor = m_AdditionalInfo.find(nameLower);
+
+ const AdditionalInfo* info = nullptr;
+ if (infoItor != m_AdditionalInfo.end()) {
+ info = &infoItor->second;
+ }
+
+ if (isProblematic(esp, info)) {
result.append(":/MO/gui/warning");
}
+
if (m_LockedOrder.find(nameLower) != m_LockedOrder.end()) {
result.append(":/MO/gui/locked");
}
- auto bossInfoIter = m_AdditionalInfo.find(nameLower);
- if (bossInfoIter != m_AdditionalInfo.end()) {
- if (!bossInfoIter->second.messages.isEmpty()) {
- result.append(":/MO/gui/information");
- }
+
+ if (hasInfo(esp, info)) {
+ result.append(":/MO/gui/information");
}
- if (m_ESPs[index].hasIni) {
+
+ if (esp.hasIni) {
result.append(":/MO/gui/attachment");
}
- if (!m_ESPs[index].archives.empty()) {
+
+ if (!esp.archives.empty()) {
result.append(":/MO/gui/archive_conflict_neutral");
}
- if (m_ESPs[index].isLightFlagged && !m_ESPs[index].isLight) {
+
+ if (esp.isLightFlagged && !m_ESPs[index].isLight) {
result.append(":/MO/gui/awaiting");
}
+
return result;
}
+bool PluginList::isProblematic(const ESPInfo& esp, const AdditionalInfo* info) const
+{
+ if (esp.masterUnset.size() > 0) {
+ return true;
+ }
+
+ if (info) {
+ if (!info->loot.incompatibilities.empty()) {
+ return true;
+ }
+
+ if (!info->loot.missingMasters.empty()) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool PluginList::hasInfo(const ESPInfo& esp, const AdditionalInfo* info) const
+{
+ if (info) {
+ if (!info->messages.empty()) {
+ return true;
+ }
+
+ if (!info->loot.messages.empty()) {
+ return true;
+ }
+
+ if (!info->loot.dirty.empty()) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool PluginList::setData(const QModelIndex &modIndex, const QVariant &value, int role)
{
QString modName = modIndex.data().toString();
--
cgit v1.3.1