Jelajahi Sumber

Fix display of active submods of disabled root mods

Ivan Savenko 11 bulan lalu
induk
melakukan
6bad88ba99

+ 4 - 1
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);

+ 5 - 0
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());

+ 1 - 0
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;
 

+ 5 - 0
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);

+ 1 - 0
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<uint32_t> getValidatedChecksum(const TModID & modName) const;