mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Refactor extruders model to always use extruder stacks + cleanup - CURA-4482
This commit is contained in:
parent
8378c6f3c9
commit
38fdb5e56f
1 changed files with 41 additions and 31 deletions
|
@ -66,18 +66,18 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
||||||
self._update_extruder_timer = QTimer()
|
self._update_extruder_timer = QTimer()
|
||||||
self._update_extruder_timer.setInterval(100)
|
self._update_extruder_timer.setInterval(100)
|
||||||
self._update_extruder_timer.setSingleShot(True)
|
self._update_extruder_timer.setSingleShot(True)
|
||||||
self._update_extruder_timer.timeout.connect(self.__updateExtruders)
|
self._update_extruder_timer.connect(self.__updateExtruders)
|
||||||
|
|
||||||
self._add_global = False
|
self._add_global = False
|
||||||
self._simple_names = False
|
self._simple_names = False
|
||||||
|
|
||||||
self._active_machine_extruders = [] # type: Iterable[ExtruderStack]
|
self._active_machine_extruders = [] # type: Iterable[ExtruderStack]
|
||||||
self._add_optional_extruder = False
|
self._add_optional_extruder = False
|
||||||
|
|
||||||
#Listen to changes.
|
# Listen to changes
|
||||||
Application.getInstance().globalContainerStackChanged.connect(self._extrudersChanged) #When the machine is swapped we must update the active machine extruders.
|
Application.getInstance().globalContainerStackChanged.connect(self._extrudersChanged) # When the machine is swapped we must update the active machine extruders
|
||||||
ExtruderManager.getInstance().extrudersChanged.connect(self._extrudersChanged) #When the extruders change we must link to the stack-changed signal of the new extruder.
|
ExtruderManager.getInstance().extrudersChanged.connect(self._extrudersChanged) # When the extruders change we must link to the stack-changed signal of the new extruder
|
||||||
self._extrudersChanged() #Also calls _updateExtruders.
|
self._extrudersChanged() # Also calls _updateExtruders
|
||||||
|
|
||||||
def setAddGlobal(self, add):
|
def setAddGlobal(self, add):
|
||||||
if add != self._add_global:
|
if add != self._add_global:
|
||||||
|
@ -128,21 +128,24 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
||||||
def _extrudersChanged(self, machine_id = None):
|
def _extrudersChanged(self, machine_id = None):
|
||||||
if machine_id is not None:
|
if machine_id is not None:
|
||||||
if Application.getInstance().getGlobalContainerStack() is None:
|
if Application.getInstance().getGlobalContainerStack() is None:
|
||||||
return #No machine, don't need to update the current machine's extruders.
|
# No machine, don't need to update the current machine's extruders
|
||||||
|
return
|
||||||
if machine_id != Application.getInstance().getGlobalContainerStack().getId():
|
if machine_id != Application.getInstance().getGlobalContainerStack().getId():
|
||||||
return #Not the current machine.
|
# Not the current machine
|
||||||
#Unlink from old extruders.
|
return
|
||||||
|
|
||||||
|
# Unlink from old extruders
|
||||||
for extruder in self._active_machine_extruders:
|
for extruder in self._active_machine_extruders:
|
||||||
extruder.containersChanged.disconnect(self._onExtruderStackContainersChanged)
|
extruder.containersChanged.disconnect(self._onExtruderStackContainersChanged)
|
||||||
|
|
||||||
#Link to new extruders.
|
# Link to new extruders
|
||||||
self._active_machine_extruders = []
|
self._active_machine_extruders = []
|
||||||
extruder_manager = ExtruderManager.getInstance()
|
extruder_manager = ExtruderManager.getInstance()
|
||||||
for extruder in extruder_manager.getExtruderStacks():
|
for extruder in extruder_manager.getExtruderStacks():
|
||||||
extruder.containersChanged.connect(self._onExtruderStackContainersChanged)
|
extruder.containersChanged.connect(self._onExtruderStackContainersChanged)
|
||||||
self._active_machine_extruders.append(extruder)
|
self._active_machine_extruders.append(extruder)
|
||||||
|
|
||||||
self._updateExtruders() #Since the new extruders may have different properties, update our own model.
|
self._updateExtruders() # Since the new extruders may have different properties, update our own model.
|
||||||
|
|
||||||
def _onExtruderStackContainersChanged(self, container):
|
def _onExtruderStackContainersChanged(self, container):
|
||||||
# Update when there is an empty container or material change
|
# Update when there is an empty container or material change
|
||||||
|
@ -150,7 +153,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
||||||
# The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name
|
# The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name
|
||||||
self._updateExtruders()
|
self._updateExtruders()
|
||||||
|
|
||||||
|
|
||||||
modelChanged = pyqtSignal()
|
modelChanged = pyqtSignal()
|
||||||
|
|
||||||
def _updateExtruders(self):
|
def _updateExtruders(self):
|
||||||
|
@ -161,14 +163,17 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
||||||
# This should be called whenever the list of extruders changes.
|
# This should be called whenever the list of extruders changes.
|
||||||
@UM.FlameProfiler.profile
|
@UM.FlameProfiler.profile
|
||||||
def __updateExtruders(self):
|
def __updateExtruders(self):
|
||||||
changed = False
|
extruders_changed = False
|
||||||
|
|
||||||
if self.rowCount() != 0:
|
if self.rowCount() != 0:
|
||||||
changed = True
|
extruders_changed = True
|
||||||
|
|
||||||
items = []
|
items = []
|
||||||
|
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
if global_container_stack:
|
if global_container_stack:
|
||||||
|
|
||||||
|
# TODO: remove this - CURA-4482
|
||||||
if self._add_global:
|
if self._add_global:
|
||||||
material = global_container_stack.material
|
material = global_container_stack.material
|
||||||
color = material.getMetaDataEntry("color_code", default = self.defaultColors[0]) if material else self.defaultColors[0]
|
color = material.getMetaDataEntry("color_code", default = self.defaultColors[0]) if material else self.defaultColors[0]
|
||||||
|
@ -180,40 +185,44 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
||||||
"definition": ""
|
"definition": ""
|
||||||
}
|
}
|
||||||
items.append(item)
|
items.append(item)
|
||||||
changed = True
|
extruders_changed = True
|
||||||
|
|
||||||
|
# get machine extruder count for verification
|
||||||
machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value")
|
machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value")
|
||||||
manager = ExtruderManager.getInstance()
|
|
||||||
for extruder in manager.getMachineExtruders(global_container_stack.getId()):
|
for extruder in ExtruderManager.getInstance().getMachineExtruders(global_container_stack.getId()):
|
||||||
position = extruder.getMetaDataEntry("position", default = "0") # Get the position
|
position = extruder.getMetaDataEntry("position", default = "0") # Get the position
|
||||||
try:
|
try:
|
||||||
position = int(position)
|
position = int(position)
|
||||||
except ValueError: #Not a proper int.
|
except ValueError:
|
||||||
|
# Not a proper int.
|
||||||
position = -1
|
position = -1
|
||||||
if position >= machine_extruder_count:
|
if position >= machine_extruder_count:
|
||||||
continue
|
continue
|
||||||
extruder_name = extruder.getName()
|
|
||||||
material = extruder.material
|
|
||||||
variant = extruder.variant
|
|
||||||
|
|
||||||
default_color = self.defaultColors[position] if position >= 0 and position < len(self.defaultColors) else self.defaultColors[0]
|
default_color = self.defaultColors[position] if 0 <= position < len(self.defaultColors) else self.defaultColors[0]
|
||||||
color = material.getMetaDataEntry("color_code", default = default_color) if material else default_color
|
color = extruder.material.getMetaDataEntry("color_code", default = default_color) if material else default_color
|
||||||
item = { #Construct an item with only the relevant information.
|
|
||||||
|
# construct an item with only the relevant information
|
||||||
|
item = {
|
||||||
"id": extruder.getId(),
|
"id": extruder.getId(),
|
||||||
"name": extruder_name,
|
"name": extruder.getName(),
|
||||||
"color": color,
|
"color": color,
|
||||||
"index": position,
|
"index": position,
|
||||||
"definition": extruder.getBottom().getId(),
|
"definition": extruder.getBottom().getId(),
|
||||||
"material": material.getName() if material else "",
|
"material": extruder.material.getName() if material else "",
|
||||||
"variant": variant.getName() if variant else "",
|
"variant": extruder.variant.getName() if extruder.variant else "", # e.g. print core
|
||||||
}
|
}
|
||||||
items.append(item)
|
|
||||||
changed = True
|
|
||||||
|
|
||||||
if changed:
|
items.append(item)
|
||||||
|
extruders_changed = True
|
||||||
|
|
||||||
|
if extruders_changed:
|
||||||
|
# sort by extruder index
|
||||||
items.sort(key = lambda i: i["index"])
|
items.sort(key = lambda i: i["index"])
|
||||||
|
|
||||||
# We need optional extruder to be last, so add it after we do sorting.
|
# We need optional extruder to be last, so add it after we do sorting.
|
||||||
# This way we can simply intrepret the -1 of the index as the last item (which it now always is)
|
# This way we can simply interpret the -1 of the index as the last item (which it now always is)
|
||||||
if self._add_optional_extruder:
|
if self._add_optional_extruder:
|
||||||
item = {
|
item = {
|
||||||
"id": "",
|
"id": "",
|
||||||
|
@ -223,5 +232,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
||||||
"definition": ""
|
"definition": ""
|
||||||
}
|
}
|
||||||
items.append(item)
|
items.append(item)
|
||||||
|
|
||||||
self.setItems(items)
|
self.setItems(items)
|
||||||
self.modelChanged.emit()
|
self.modelChanged.emit()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue