From c432d4ffbbb8cbcbf38e040a3161e6c21106ae8d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 20 Feb 2018 11:16:32 +0100 Subject: [PATCH] WIP: Simplify global stack and extruder stack activation and fixes --- cura/Settings/CuraStackBuilder.py | 5 +++-- cura/Settings/ExtruderManager.py | 13 ++----------- cura/Settings/ExtruderStack.py | 3 +-- cura/Settings/MachineManager.py | 6 ++++-- plugins/CuraEngineBackend/CuraEngineBackend.py | 1 - resources/qml/Menus/NozzleMenu.qml | 7 ++++--- 6 files changed, 14 insertions(+), 21 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index c396a4a2be..f5e08b766a 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -102,6 +102,7 @@ class CuraStackBuilder: variant_container = variant_container, material_container = material_container, quality_container = application.empty_quality_container, + global_stack = new_global_stack, ) new_extruder.setNextStack(new_global_stack) new_global_stack.addExtruder(new_extruder) @@ -133,11 +134,11 @@ class CuraStackBuilder: @classmethod def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, machine_definition_id: str, position: int, - variant_container, material_container, quality_container) -> ExtruderStack: + variant_container, material_container, quality_container, global_stack) -> ExtruderStack: from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() - stack = ExtruderStack(new_stack_id) + stack = ExtruderStack(new_stack_id, parent = global_stack) stack.setName(extruder_definition.getName()) stack.setDefinition(extruder_definition) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 35b5b1320b..56834ca32a 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -36,22 +36,15 @@ class ExtruderManager(QObject): self._global_container_stack_definition_id = None self._addCurrentMachineExtruders() - Application.getInstance().globalContainerStackChanged.connect(self.__globalContainerStackChanged) + #Application.getInstance().globalContainerStackChanged.connect(self._globalContainerStackChanged) Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) ## Signal to notify other components when the list of extruders for a machine definition changes. extrudersChanged = pyqtSignal(QVariant) - ## Signal to notify other components when the global container stack is switched to a definition - # that has different extruders than the previous global container stack - globalContainerStackDefinitionChanged = pyqtSignal() - ## Notify when the user switches the currently active extruder. activeExtruderChanged = pyqtSignal() - ## The signal notifies subscribers if extruders are added - extrudersAdded = pyqtSignal() - ## Gets the unique identifier of the currently active extruder stack. # # The currently active extruder stack is the stack that is currently being @@ -371,11 +364,10 @@ class ExtruderManager(QObject): return result[:machine_extruder_count] - def __globalContainerStackChanged(self) -> None: + def _globalContainerStackChanged(self) -> None: global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack and global_container_stack.getBottom() and global_container_stack.getBottom().getId() != self._global_container_stack_definition_id: self._global_container_stack_definition_id = global_container_stack.getBottom().getId() - self.globalContainerStackDefinitionChanged.emit() # If the global container changed, the machine changed and might have extruders that were not registered yet self._addCurrentMachineExtruders() @@ -415,7 +407,6 @@ class ExtruderManager(QObject): if extruders_changed: self.extrudersChanged.emit(global_stack_id) - self.extrudersAdded.emit() self.setActiveExtruderIndex(0) ## Get all extruder values for a certain setting. diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index a2ff092143..5a3ac85d75 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -3,7 +3,6 @@ from typing import Any, TYPE_CHECKING, Optional -from UM.Application import Application from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack @@ -34,7 +33,7 @@ class ExtruderStack(CuraContainerStack): # # This will set the next stack and ensure that we register this stack as an extruder. @override(ContainerStack) - def setNextStack(self, stack: ContainerStack) -> None: + def setNextStack(self, stack: CuraContainerStack) -> None: super().setNextStack(stack) stack.addExtruder(self) self.addMetaDataEntry("machine", stack.id) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 7be3f0798e..45c7648916 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -283,6 +283,7 @@ class MachineManager(QObject): containers = container_registry.findContainerStacks(id = stack_id) if containers: Application.getInstance().setGlobalContainerStack(containers[0]) + ExtruderManager.getInstance()._globalContainerStackChanged() self.__emitChangedSignals() @@ -877,9 +878,10 @@ class MachineManager(QObject): @pyqtSlot(int, result = QObject) def getExtruder(self, position: int): + extruder = None if self._global_container_stack: - return self._global_container_stack.extruders.get(str(position)) - return None + extruder = self._global_container_stack.extruders.get(str(position)) + return extruder def _onMachineNameChanged(self): self.globalContainerChanged.emit() diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index cd4f74141b..ea3ac3c0f8 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -88,7 +88,6 @@ class CuraEngineBackend(QObject, Backend): # self._global_container_stack = None Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) - Application.getInstance().getExtruderManager().extrudersAdded.connect(self._onGlobalStackChanged) self._onGlobalStackChanged() Application.getInstance().stacksValidationFinished.connect(self._onStackErrorCheckFinished) diff --git a/resources/qml/Menus/NozzleMenu.qml b/resources/qml/Menus/NozzleMenu.qml index ea1c0000f4..153bd88220 100644 --- a/resources/qml/Menus/NozzleMenu.qml +++ b/resources/qml/Menus/NozzleMenu.qml @@ -13,7 +13,8 @@ Menu title: "Nozzle" property int extruderIndex: 0 - property var extruderStack: Cura.MachineManager.getExtruder(menu.extruderIndex) + property QtObject extruderStack: Cura.MachineManager.getExtruder(menu.extruderIndex) + property bool hasExtruderStack: extruderStack != null Cura.NozzleModel { @@ -24,7 +25,7 @@ Menu { target: Cura.MachineManager onGlobalContainerChanged: { - menu.extruderStack = Cura.MachineManager.getExtruder(extruderIndex); + menu.extruderStack = Cura.MachineManager.getExtruder(menu.extruderIndex); } } @@ -36,7 +37,7 @@ Menu { text: model.hotend_name checkable: true - checked: extruderStack.variant.name == model.hotend_name + checked: menu.hasExtruderStack && extruderStack.variant.name == model.hotend_name exclusiveGroup: group onTriggered: { Cura.MachineManager.setVariantGroup(extruderIndex, model.container_node);