From de984a4ef8b4720f73db5b80b018b358cbe12f8a Mon Sep 17 00:00:00 2001 From: Tannin Date: Thu, 23 Jan 2014 21:14:44 +0100 Subject: - information from boss no longer gets lost as soon as the plugin list gets refreshed - bugfix: modified boss dll missed one file on sorting --- src/lockeddialog.ui | 9 ++++++--- src/pluginlist.cpp | 43 +++++++++++++++++++++++++------------------ src/pluginlist.h | 5 +++++ 3 files changed, 36 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/lockeddialog.ui b/src/lockeddialog.ui index 623e8da1..2175f8ac 100644 --- a/src/lockeddialog.ui +++ b/src/lockeddialog.ui @@ -6,14 +6,14 @@ 0 0 - 236 - 110 + 317 + 151 Locked - + @@ -22,6 +22,9 @@ MO is locked while the executable is running. + + Qt::AlignCenter + true diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index c2e14182..e04b8bb0 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -699,7 +699,7 @@ void PluginList::convertPluginListForBoss(boost::ptr_vector &inputPlugi void PluginList::applyBOSSSorting(uint8_t **pluginList, size_t size, int &priority, bool recognized, const char *extension) { - for (size_t i= 0; i < size; ++i) { + for (size_t i = 0; i < size; ++i) { QString name = QString::fromUtf8(reinterpret_cast(pluginList[i])).toLower(); if (name.endsWith(extension)) { auto iter = m_ESPsByName.find(name); @@ -709,12 +709,13 @@ void PluginList::applyBOSSSorting(uint8_t **pluginList, size_t size, int &priori BossMessage *message; size_t numMessages = 0; m_BOSS->GetPluginMessages(m_BOSSDB, pluginList[i], &message, &numMessages); - m_ESPs[iter->second].m_BOSSMessages.clear(); + BossInfo newInfo; for (size_t im = 0; im < numMessages; ++im) { - m_ESPs[iter->second].m_BOSSMessages.append(QString::fromUtf8(reinterpret_cast(message[im].message))); + newInfo.m_BOSSMessages.append(QString::fromUtf8(reinterpret_cast(message[im].message))); } + newInfo.m_BOSSUnrecognized = !recognized; + m_BossInfo[name] = newInfo; m_ESPs[iter->second].m_Priority = priority++; - m_ESPs[iter->second].m_BOSSUnrecognized = !recognized; } } } @@ -735,7 +736,6 @@ void PluginList::bossSort() uint8_t **sortedPlugins; uint8_t **unrecognizedPlugins; size_t sizeSorted, sizeUnrecognized; - if (m_BOSS->SortCustomMods(m_BOSSDB, inputPlugins.c_array(), inputPlugins.size(), &sortedPlugins, &sizeSorted, @@ -917,12 +917,16 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const return QVariant(Qt::AlignHCenter | Qt::AlignVCenter); } } else if (role == Qt::ToolTipRole) { + QString name = m_ESPs[index].m_Name.toLower(); + auto bossInfoIter = m_BossInfo.find(name); QString toolTip; - if (!m_ESPs[index].m_BOSSMessages.isEmpty()) { - toolTip += m_ESPs[index].m_BOSSMessages.join("
") + "

"; - } - if (m_ESPs[index].m_BOSSUnrecognized) { - toolTip += "Not recognized by BOSS
"; + if (bossInfoIter != m_BossInfo.end()) { + if (!bossInfoIter->second.m_BOSSMessages.isEmpty()) { + toolTip += bossInfoIter->second.m_BOSSMessages.join("
") + "

"; + } + if (bossInfoIter->second.m_BOSSUnrecognized) { + toolTip += "Not recognized by BOSS
"; + } } if (m_ESPs[index].m_ForceEnabled) { toolTip += tr("This plugin can't be disabled (enforced by the game)"); @@ -948,17 +952,21 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const return toolTip; } else if (role == Qt::UserRole + 1) { QVariantList result; + QString nameLower = m_ESPs[index].m_Name.toLower(); if (m_ESPs[index].m_MasterUnset.size() > 0) { result.append(QIcon(":/MO/gui/warning")); } - if (m_LockedOrder.find(m_ESPs[index].m_Name.toLower()) != m_LockedOrder.end()) { + if (m_LockedOrder.find(nameLower) != m_LockedOrder.end()) { result.append(QIcon(":/MO/gui/locked")); } - if (!m_ESPs[index].m_BOSSMessages.isEmpty()) { - result.append(QIcon(":/MO/gui/information")); - } - if (m_ESPs[index].m_BOSSUnrecognized) { - result.append(QIcon(":/MO/gui/help")); + auto bossInfoIter = m_BossInfo.find(nameLower); + if (bossInfoIter != m_BossInfo.end()) { + if (!bossInfoIter->second.m_BOSSMessages.isEmpty()) { + result.append(QIcon(":/MO/gui/information")); + } + if (bossInfoIter->second.m_BOSSUnrecognized) { + result.append(QIcon(":/MO/gui/help")); + } } if (m_ESPs[index].m_HasIni) { result.append(QIcon(":/MO/gui/attachment")); @@ -1227,8 +1235,7 @@ PluginList::ESPInfo::ESPInfo(const QString &name, bool enabled, FILETIME time, const QString &originName, const QString &fullPath, bool hasIni) : m_Name(name), m_Enabled(enabled), m_ForceEnabled(enabled), m_Removed(false), - m_Priority(0), m_LoadOrder(-1), m_Time(time), m_OriginName(originName), m_HasIni(hasIni), - m_BOSSUnrecognized(false) + m_Priority(0), m_LoadOrder(-1), m_Time(time), m_OriginName(originName), m_HasIni(hasIni) { try { ESP::File file(ToWString(fullPath)); diff --git a/src/pluginlist.h b/src/pluginlist.h index bb7428d0..f8c69e11 100644 --- a/src/pluginlist.h +++ b/src/pluginlist.h @@ -214,6 +214,9 @@ private: bool m_HasIni; std::set m_Masters; mutable std::set m_MasterUnset; + }; + + struct BossInfo { QStringList m_BOSSMessages; bool m_BOSSUnrecognized; }; @@ -332,6 +335,8 @@ private: std::map m_ESPLoadOrder; std::map m_LockedOrder; + std::map m_BossInfo; // maps esp names to boss information + QString m_CurrentProfile; QFontMetrics m_FontMetrics; -- cgit v1.3.1