Browse Source

Store extruder position of quality groups as int

Instead of as a string with a number in it.
For the actual global stack's extruders we still need to convert to string, sadly. I could go refactor that too, but then I won't be going home until 23 o'clock or something.

Contributes to issue CURA-4606.
Ghostkeeper 7 years ago
parent
commit
d904f677bc

+ 9 - 8
cura/Machines/Models/QualitySettingsModel.py

@@ -21,6 +21,8 @@ class QualitySettingsModel(ListModel):
     UserValueRole = Qt.UserRole + 6
     CategoryRole = Qt.UserRole + 7
 
+    GLOBAL_STACK_POSITION = -1
+
     def __init__(self, parent = None):
         super().__init__(parent = parent)
 
@@ -36,8 +38,7 @@ class QualitySettingsModel(ListModel):
         self._application = Application.getInstance()
         self._quality_manager = self._application.getQualityManager()
 
-        self._selected_position = ""  # empty string means GlobalStack
-                                      # strings such as "0", "1", etc. mean extruder positions
+        self._selected_position = self.GLOBAL_STACK_POSITION #Must be either GLOBAL_STACK_POSITION or an extruder position (0, 1, etc.)
         self._selected_quality_item = None  # The selected quality in the quality management page
         self._i18n_catalog = None
 
@@ -54,7 +55,7 @@ class QualitySettingsModel(ListModel):
             self.selectedPositionChanged.emit()
             self._update()
 
-    @pyqtProperty(str, fset = setSelectedPosition, notify = selectedPositionChanged)
+    @pyqtProperty(int, fset = setSelectedPosition, notify = selectedPositionChanged)
     def selectedPosition(self):
         return self._selected_position
 
@@ -83,7 +84,7 @@ class QualitySettingsModel(ListModel):
         quality_group = self._selected_quality_item["quality_group"]
         quality_changes_group = self._selected_quality_item["quality_changes_group"]
 
-        if self._selected_position == "":
+        if self._selected_position == self.GLOBAL_STACK_POSITION:
             quality_node = quality_group.node_for_global
         else:
             quality_node = quality_group.nodes_for_extruders.get(self._selected_position)
@@ -93,7 +94,7 @@ class QualitySettingsModel(ListModel):
         # Here, if the user has selected a quality changes, then "quality_changes_group" will not be None, and we fetch
         # the settings in that quality_changes_group.
         if quality_changes_group is not None:
-            if self._selected_position == "":
+            if self._selected_position == self.GLOBAL_STACK_POSITION:
                 quality_changes_node = quality_changes_group.node_for_global
             else:
                 quality_changes_node = quality_changes_group.nodes_for_extruders.get(self._selected_position)
@@ -127,7 +128,7 @@ class QualitySettingsModel(ListModel):
                     profile_value = new_value
 
                 # Global tab should use resolve (if there is one)
-                if self._selected_position == "":
+                if self._selected_position == self.GLOBAL_STACK_POSITION:
                     resolve_value = global_container_stack.getProperty(definition.key, "resolve")
                     if resolve_value is not None and definition.key in settings_keys:
                         profile_value = resolve_value
@@ -135,10 +136,10 @@ class QualitySettingsModel(ListModel):
                 if profile_value is not None:
                     break
 
-            if not self._selected_position:
+            if self._selected_position == self.GLOBAL_STACK_POSITION:
                 user_value = global_container_stack.userChanges.getProperty(definition.key, "value")
             else:
-                extruder_stack = global_container_stack.extruders[self._selected_position]
+                extruder_stack = global_container_stack.extruders[str(self._selected_position)]
                 user_value = extruder_stack.userChanges.getProperty(definition.key, "value")
 
             if profile_value is None and user_value is None:

+ 2 - 2
cura/Machines/QualityGroup.py

@@ -1,7 +1,7 @@
 # Copyright (c) 2018 Ultimaker B.V.
 # Cura is released under the terms of the LGPLv3 or higher.
 
-from typing import Optional, List
+from typing import Dict, Optional, List
 
 from PyQt5.QtCore import QObject, pyqtSlot
 
@@ -25,7 +25,7 @@ class QualityGroup(QObject):
         super().__init__(parent)
         self.name = name
         self.node_for_global = None  # type: Optional["QualityGroup"]
-        self.nodes_for_extruders = dict()  # position str -> QualityGroup
+        self.nodes_for_extruders = {}  # type: Dict[int, "QualityGroup"]
         self.quality_type = quality_type
         self.is_available = False
 

+ 2 - 2
cura/Settings/MachineManager.py

@@ -939,9 +939,9 @@ class MachineManager(QObject):
 
         # Set quality and quality_changes for each ExtruderStack
         for position, node in quality_group.nodes_for_extruders.items():
-            self._global_container_stack.extruders[position].quality = node.getContainer()
+            self._global_container_stack.extruders[str(position)].quality = node.getContainer()
             if empty_quality_changes:
-                self._global_container_stack.extruders[position].qualityChanges = self._empty_quality_changes_container
+                self._global_container_stack.extruders[str(position)].qualityChanges = self._empty_quality_changes_container
 
         self.activeQualityGroupChanged.emit()
         self.activeQualityChangesGroupChanged.emit()

+ 1 - 1
resources/qml/Preferences/ProfileTab.qml

@@ -11,7 +11,7 @@ Tab
 {
     id: base
 
-    property string extruderPosition: ""
+    property int extruderPosition: -1 //Denotes the global stack.
     property var qualityItem: null
 
     property bool isQualityItemCurrentlyActivated: