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.
This commit is contained in:
Ghostkeeper 2018-03-12 17:07:52 +01:00
parent 981c47ed87
commit d904f677bc
No known key found for this signature in database
GPG key ID: 5252B696FB5E7C7A
4 changed files with 14 additions and 13 deletions

View file

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

View file

@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V. # Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # 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 from PyQt5.QtCore import QObject, pyqtSlot
@ -25,7 +25,7 @@ class QualityGroup(QObject):
super().__init__(parent) super().__init__(parent)
self.name = name self.name = name
self.node_for_global = None # type: Optional["QualityGroup"] 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.quality_type = quality_type
self.is_available = False self.is_available = False

View file

@ -939,9 +939,9 @@ class MachineManager(QObject):
# Set quality and quality_changes for each ExtruderStack # Set quality and quality_changes for each ExtruderStack
for position, node in quality_group.nodes_for_extruders.items(): 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: 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.activeQualityGroupChanged.emit()
self.activeQualityChangesGroupChanged.emit() self.activeQualityChangesGroupChanged.emit()

View file

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