瀏覽代碼

Display name of parent mod next to the name of submods in dependencies

Ivan Savenko 1 年之前
父節點
當前提交
c22471fd91
共有 3 個文件被更改,包括 27 次插入6 次删除
  1. 6 0
      launcher/modManager/cmodlist.cpp
  2. 4 0
      launcher/modManager/cmodlist.h
  3. 17 6
      launcher/modManager/cmodlistview_moc.cpp

+ 6 - 0
launcher/modManager/cmodlist.cpp

@@ -149,6 +149,12 @@ QString CModEntry::getName() const
 	return modname;
 }
 
+QString CModEntry::getTopParentName() const
+{
+	assert(isSubmod());
+	return modname.section('.', 0, 0);
+}
+
 QVariant CModEntry::getValue(QString value) const
 {
 	return getValueImpl(value, true);

+ 4 - 0
launcher/modManager/cmodlist.h

@@ -66,8 +66,12 @@ public:
 	// see ModStatus enum
 	int getModStatus() const;
 
+	// Returns mod name / identifier (not human-readable)
 	QString getName() const;
 
+	// For submods only. Returns mod name / identifier of a top-level parent mod
+	QString getTopParentName() const;
+
 	// get value of some field in mod structure. Returns empty optional if value is not present
 	QVariant getValue(QString value) const;
 	QVariant getBaseValue(QString value) const;

+ 17 - 6
launcher/modManager/cmodlistview_moc.cpp

@@ -261,14 +261,25 @@ QStringList CModListView::getModNames(QStringList input)
 	{
 		auto mod = modModel->getMod(modID.toLower());
 
-		QString modName = mod.getValue("name").toString();
+		QString displayName = mod.getValue("name").toString();
+		if (displayName.isEmpty())
+			displayName = modID.toLower();
 
-		if (modName.isEmpty())
-			result += modID.toLower();
-		else
-			result += modName;
+		if (mod.isSubmod())
+		{
+			auto parentModID = mod.getTopParentName();
+			auto parentMod = modModel->getMod(parentModID.toLower());
+			QString parentDisplayName = parentMod.getValue("name").toString();
+			if (parentDisplayName.isEmpty())
+				parentDisplayName = parentModID.toLower();
+
+			if (mod.isInstalled())
+				displayName = QString("%1 (%2)").arg(displayName, parentDisplayName);
+			else
+				displayName = parentDisplayName;
+		}
+		result += displayName;
 	}
-
 	return result;
 }