Browse Source

Merge branch '4.4' of github.com:Ultimaker/Cura

Jaime van Kessel 5 years ago
parent
commit
c22281ad9c

+ 4 - 24
cura/Machines/Models/IntentCategoryModel.py

@@ -2,8 +2,8 @@
 #Cura is released under the terms of the LGPLv3 or higher.
 
 from PyQt5.QtCore import Qt, QTimer
-import collections
 from typing import TYPE_CHECKING, Optional, Dict
+from cura.Machines.Models.IntentTranslations import intent_translations
 
 from cura.Machines.Models.IntentModel import IntentModel
 from cura.Settings.IntentManager import IntentManager
@@ -29,26 +29,6 @@ class IntentCategoryModel(ListModel):
 
     modelUpdated = pyqtSignal()
 
-    # Translations to user-visible string. Ordered by weight.
-    # TODO: Create a solution for this name and weight to be used dynamically.
-    _translations = collections.OrderedDict()  # type: "collections.OrderedDict[str,Dict[str,Optional[str]]]"
-    _translations["default"] = {
-        "name": catalog.i18nc("@label", "Default")
-    }
-    _translations["visual"] = {
-        "name": catalog.i18nc("@label", "Visual"),
-        "description": catalog.i18nc("@text", "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality.")
-    }
-    _translations["engineering"] = {
-        "name": catalog.i18nc("@label", "Engineering"),
-        "description": catalog.i18nc("@text", "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances.")
-    }
-    _translations["quick"] = {
-        "name": catalog.i18nc("@label", "Draft"),
-        "description": catalog.i18nc("@text", "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction.")
-    }
-
-
     ##  Creates a new model for a certain intent category.
     #   \param The category to list the intent profiles for.
     def __init__(self, intent_category: str) -> None:
@@ -99,15 +79,15 @@ class IntentCategoryModel(ListModel):
                 "name": IntentCategoryModel.translation(category, "name", catalog.i18nc("@label", "Unknown")),
                 "description": IntentCategoryModel.translation(category, "description", None),
                 "intent_category": category,
-                "weight": list(self._translations.keys()).index(category),
+                "weight": list(intent_translations).index(category),
                 "qualities": qualities
             })
         result.sort(key = lambda k: k["weight"])
         self.setItems(result)
 
-    ##  Get a display value for a category. See IntenCategoryModel._translations
+    ##  Get a display value for a category.
     ##  for categories and keys
     @staticmethod
     def translation(category: str, key: str, default: Optional[str] = None):
-        display_strings = IntentCategoryModel._translations.get(category, {})
+        display_strings = intent_translations.get(category, {})
         return display_strings.get(key, default)

+ 20 - 0
cura/Machines/Models/IntentTranslations.py

@@ -0,0 +1,20 @@
+import collections
+from UM.i18n import i18nCatalog
+catalog = i18nCatalog("cura")
+
+intent_translations = collections.OrderedDict()  # type: "collections.OrderedDict[str, Dict[str, Optional[str]]]"
+intent_translations["default"] = {
+    "name": catalog.i18nc("@label", "Default")
+}
+intent_translations["visual"] = {
+    "name": catalog.i18nc("@label", "Visual"),
+    "description": catalog.i18nc("@text", "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality.")
+}
+intent_translations["engineering"] = {
+    "name": catalog.i18nc("@label", "Engineering"),
+    "description": catalog.i18nc("@text", "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances.")
+}
+intent_translations["quick"] = {
+    "name": catalog.i18nc("@label", "Draft"),
+    "description": catalog.i18nc("@text", "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction.")
+}

+ 4 - 2
cura/Machines/Models/QualityManagementModel.py

@@ -14,6 +14,7 @@ from cura.Machines.ContainerTree import ContainerTree
 from cura.Settings.cura_empty_instance_containers import empty_quality_changes_container
 from cura.Settings.IntentManager import IntentManager
 from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
+from cura.Machines.Models.IntentTranslations import intent_translations
 
 from UM.i18n import i18nCatalog
 catalog = i18nCatalog("cura")
@@ -336,10 +337,11 @@ class QualityManagementModel(ListModel):
                 "quality_type": quality_type,
                 "quality_changes_group": None,
                 "intent_category": intent_category,
-                "section_name": catalog.i18nc("@label", intent_category.capitalize()),
+                "section_name": catalog.i18nc("@label", intent_translations.get(intent_category, {}).get("name", catalog.i18nc("@label", "Unknown"))),
             })
         # Sort by quality_type for each intent category
-        result = sorted(result, key = lambda x: (x["intent_category"], x["quality_type"]))
+
+        result = sorted(result, key = lambda x: (list(intent_translations).index(x["intent_category"]), x["quality_type"]))
         item_list += result
 
         # Create quality_changes group items

+ 10 - 1
cura/Machines/VariantNode.py

@@ -85,11 +85,20 @@ class VariantNode(ContainerNode):
         for base_material, material_node in self.materials.items():
             if self.machine.preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
                 return material_node
-        # First fallback: Choose any material with matching diameter.
+            
+        # First fallback: Check if we should be checking for the 175 variant.
+        if approximate_diameter == 2:
+            preferred_material = self.machine.preferred_material + "_175"
+            for base_material, material_node in self.materials.items():
+                if preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
+                    return material_node
+        
+        # Second fallback: Choose any material with matching diameter.
         for material_node in self.materials.values():
             if material_node.getMetaDataEntry("approximate_diameter") and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
                 Logger.log("w", "Could not find preferred material %s, falling back to whatever works", self.machine.preferred_material)
                 return material_node
+
         fallback = next(iter(self.materials.values()))  # Should only happen with empty material node.
         Logger.log("w", "Could not find preferred material {preferred_material} with diameter {diameter} for variant {variant_id}, falling back to {fallback}.".format(
             preferred_material = self.machine.preferred_material,