From 6bad88ba99e54a3a7eb6ada1c2231f4edf2c9cfc Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 21 Nov 2024 21:11:02 +0000 Subject: [PATCH] Fix display of active submods of disabled root mods --- launcher/modManager/modstateitemmodel_moc.cpp | 5 ++++- launcher/modManager/modstatemodel.cpp | 5 +++++ launcher/modManager/modstatemodel.h | 1 + lib/modding/ModManager.cpp | 5 +++++ lib/modding/ModManager.h | 1 + 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/launcher/modManager/modstateitemmodel_moc.cpp b/launcher/modManager/modstateitemmodel_moc.cpp index 5a8de79aa..c81eab38c 100644 --- a/launcher/modManager/modstateitemmodel_moc.cpp +++ b/launcher/modManager/modstateitemmodel_moc.cpp @@ -112,7 +112,10 @@ QVariant ModStateItemModel::getIcon(const ModState & mod, int field) const if(mod.isSubmod() && !model->isModEnabled(mod.getTopParentID())) { - if (model->isModEnabled(mod.getID())) + QString topParentID = mod.getTopParentID(); + QString settingID = mod.getID().section('.', 1); + + if (model->isModSettingEnabled(topParentID, settingID)) return QIcon(iconEnabledSubmod); else return QIcon(iconDisabledSubmod); diff --git a/launcher/modManager/modstatemodel.cpp b/launcher/modManager/modstatemodel.cpp index 88fc0a148..be4bc5627 100644 --- a/launcher/modManager/modstatemodel.cpp +++ b/launcher/modManager/modstatemodel.cpp @@ -70,6 +70,11 @@ bool ModStateModel::isModInstalled(QString modName) const return getMod(modName).isInstalled(); } +bool ModStateModel::isModSettingEnabled(QString rootModName, QString modSettingName) const +{ + return modManager->isModSettingActive(rootModName.toStdString(), modSettingName.toStdString()); +} + bool ModStateModel::isModEnabled(QString modName) const { return modManager->isModActive(modName.toStdString()); diff --git a/launcher/modManager/modstatemodel.h b/launcher/modManager/modstatemodel.h index 59f6ece86..08bf1935f 100644 --- a/launcher/modManager/modstatemodel.h +++ b/launcher/modManager/modstatemodel.h @@ -40,6 +40,7 @@ public: bool isModExists(QString modName) const; bool isModInstalled(QString modName) const; bool isModEnabled(QString modName) const; + bool isModSettingEnabled(QString rootModName, QString modSettingName) const; bool isModUpdateAvailable(QString modName) const; bool isModVisible(QString modName) const; diff --git a/lib/modding/ModManager.cpp b/lib/modding/ModManager.cpp index 13217cbc7..f11d43a12 100644 --- a/lib/modding/ModManager.cpp +++ b/lib/modding/ModManager.cpp @@ -387,6 +387,11 @@ const ModDescription & ModManager::getModDescription(const TModID & modID) const return modsStorage->getMod(modID); } +bool ModManager::isModSettingActive(const TModID & rootModID, const TModID & modSettingID) const +{ + return modsPreset->getModSettings(rootModID).at(modSettingID); +} + bool ModManager::isModActive(const TModID & modID) const { return vstd::contains(getActiveMods(), modID); diff --git a/lib/modding/ModManager.h b/lib/modding/ModManager.h index bf1016173..9a2255322 100644 --- a/lib/modding/ModManager.h +++ b/lib/modding/ModManager.h @@ -128,6 +128,7 @@ public: const TModList & getActiveMods() const; TModList getAllMods() const; + bool isModSettingActive(const TModID & rootModID, const TModID & modSettingID) const; bool isModActive(const TModID & modID) const; uint32_t computeChecksum(const TModID & modName) const; std::optional getValidatedChecksum(const TModID & modName) const;