Browse Source

Unify `activeQualityDisplayNameMap` string creation

Generation quality display names in `CustomPrintSetup.qml` and `PrintSetupSelectorHeader.qml` were so similar that I decided to combine the logic.

Cura-9773
c.lamboo 2 years ago
parent
commit
52ee149edc

+ 41 - 23
cura/Settings/MachineManager.py

@@ -1631,33 +1631,49 @@ class MachineManager(QObject):
     #        Examples:
     #          - "my_profile - Fine" (only based on a default quality, no intent involved)
     #          - "my_profile - Engineering - Fine" (based on an intent)
-    @pyqtProperty("QVariantMap", notify = activeQualityDisplayNameChanged)
-    def activeQualityDisplayNameMap(self) -> Dict[str, str]:
-        global_stack = self._application.getGlobalContainerStack()
-        if global_stack is None:
-            return {"main": "",
-                    "suffix": ""}
+    @pyqtProperty("QList<QString>", notify = activeQualityDisplayNameChanged)
+    def activeQualityDisplayNameStringParts(self) -> [str]:
+        result_map = self.activeQualityDisplayNameMap
+        string_parts = list()
+
+        if result_map["custom_profile"] is not None:
+            string_parts.append(result_map["custom_profile"])
 
-        display_name = global_stack.quality.getName()
+        string_parts.append(result_map["profile"])
 
-        intent_category = self.activeIntentCategory
-        if intent_category != "default":
-            intent_display_name = IntentCategoryModel.translation(intent_category,
-                                                                  "name",
-                                                                  intent_category.title())
-            display_name = "{intent_name} - {the_rest}".format(intent_name = intent_display_name,
-                                                               the_rest = display_name)
+        if result_map["intent_category"] is not "default":
+            string_parts.append(result_map["intent_name"])
 
-        main_part = display_name
-        suffix_part = ""
+        if result_map["layer_height"]:
+            string_parts.append(f"""{result_map["layer_height"]}mm""")
 
-        # Not a custom quality
-        if global_stack.qualityChanges != empty_quality_changes_container:
-            main_part = self.activeQualityOrQualityChangesName
-            suffix_part = display_name
+        if result_map["is_experimental"]:
+            string_parts.append(catalog.i18nc("@label", "Experimental"))
 
-        return {"main": main_part,
-                "suffix": suffix_part}
+        return string_parts
+
+    @pyqtProperty("QVariantMap", notify = activeQualityDisplayNameChanged)
+    def activeQualityDisplayNameMap(self) -> Dict[str, Any]:
+        global_stack = self._application.getGlobalContainerStack()
+        if global_stack is None:
+            return {
+                "profile": "",
+                "intent_category": "",
+                "intent": "",
+                "custom_profile": None,
+                "is_experimental": False
+            }
+
+        return {
+            "profile": global_stack.quality.getName(),
+            "intent_category": self.activeIntentCategory,
+            "intent_name": IntentCategoryModel.translation(self.activeIntentCategory, "name", self.activeIntentCategory.title()),
+            "custom_profile": self.activeQualityOrQualityChangesName \
+                                    if global_stack.qualityChanges is not empty_quality_changes_container \
+                                    else None,
+            "layer_height": self.activeQualityLayerHeight if self.isActiveQualitySupported else None,
+            "is_experimental": self.isActiveQualityExperimental and self.isActiveQualitySupported,
+        }
 
     @pyqtSlot(str)
     def setIntentByCategory(self, intent_category: str) -> None:
@@ -1776,7 +1792,9 @@ class MachineManager(QObject):
     @pyqtProperty(bool, notify = activeQualityGroupChanged)
     def hasNotSupportedQuality(self) -> bool:
         global_container_stack = self._application.getGlobalContainerStack()
-        return (not global_container_stack is None) and global_container_stack.quality == empty_quality_container and global_container_stack.qualityChanges == empty_quality_changes_container
+        return global_container_stack is not None\
+               and global_container_stack.quality == empty_quality_container \
+               and global_container_stack.qualityChanges == empty_quality_changes_container
 
     @pyqtProperty(bool, notify = activeQualityGroupChanged)
     def isActiveQualityCustom(self) -> bool:

+ 3 - 28
resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml

@@ -67,7 +67,7 @@ Item
                 UM.Label
                 {
                     id: textLabel
-                    text: Cura.MachineManager.activeQualityDisplayNameMap["main"]
+                    text: Cura.MachineManager.activeQualityDisplayNameStringParts[0]
                     Layout.margins: 0
                     Layout.maximumWidth: Math.floor(parent.width * 0.7)  // Always leave >= 30% for the rest of the row.
                     height: contentHeight
@@ -77,7 +77,8 @@ Item
 
                 UM.Label
                 {
-                    text: activeQualityDetailText()
+                    text: Cura.MachineManager.activeQualityDisplayNameStringParts.slice(1).join(" - ")
+
                     color: UM.Theme.getColor("text_detail")
                     Layout.margins: 0
                     Layout.fillWidth: true
@@ -85,32 +86,6 @@ Item
                     height: contentHeight
                     elide: Text.ElideRight
                     wrapMode: Text.NoWrap
-                    function activeQualityDetailText()
-                    {
-                        var resultMap = Cura.MachineManager.activeQualityDisplayNameMap
-                        var resultSuffix = resultMap["suffix"]
-                        var result = ""
-
-                        if (Cura.MachineManager.isActiveQualityExperimental)
-                        {
-                            resultSuffix += " (Experimental)"
-                        }
-
-                        if (Cura.MachineManager.isActiveQualitySupported)
-                        {
-                            if (Cura.MachineManager.activeQualityLayerHeight > 0)
-                            {
-                                if (resultSuffix)
-                                {
-                                    result += " - " + resultSuffix
-                                }
-                                result += " - "
-                                result += Cura.MachineManager.activeQualityLayerHeight + "mm"
-                            }
-                        }
-
-                        return result
-                    }
                 }
             }
 

+ 1 - 19
resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml

@@ -17,26 +17,8 @@ RowLayout
     {
         source: UM.Theme.getIcon("Sliders", "medium")
         iconSize: UM.Theme.getSize("button_icon").width
-        text:
-        {
-            if (Cura.MachineManager.activeStack)
-            {
-                var resultMap = Cura.MachineManager.activeQualityDisplayNameMap
-                var text = resultMap["main"]
-                if (resultMap["suffix"])
-                {
-                    text += " - " + resultMap["suffix"]
-                }
 
-                if (!Cura.MachineManager.hasNotSupportedQuality)
-                {
-                    text += " - " + layerHeight.properties.value + "mm"
-                    text += Cura.MachineManager.isActiveQualityExperimental ? " - " + catalog.i18nc("@label", "Experimental") : ""
-                }
-                return text
-            }
-            return ""
-        }
+        text: Cura.MachineManager.activeQualityDisplayNameStringParts.join(" - ")
         font: UM.Theme.getFont("medium")
         elide: Text.ElideMiddle
         wrapMode: Text.NoWrap