From a0ba1188a1ca12b3c6e1f9a4d6b48726f2888fcb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 1 Feb 2017 16:17:12 +0100 Subject: [PATCH] Always listen to changes on all extruder stacks of the current machine We need to listen for changes on all extruder stacks because the values might change and therefore the validation states might change. The value of a different extruder stack could change if you change a global value that has impact on a per-extruder value via inheritance, or in this case if a limit-to-extruder property specifies that the setting should be changed on a different stack. It could change on the stack that is not active in either case. This might have some performance impact, but it is very small. Other than layer_height there aren't many global settings that have impact on multiple extruders via inheritance. And via limit-to-extruder there will typically only be one changed value which you want to update for. Changing layer height will be a bit slower though. Contributes to issue CURA-3291. --- cura/Settings/MachineManager.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index bd431340e3..c81d1a1bc7 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -220,6 +220,11 @@ class MachineManager(QObject): quality = self._global_container_stack.findContainer({"type": "quality"}) quality.nameChanged.disconnect(self._onQualityNameChanged) + if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: + for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): + extruder_stack.propertyChanged.disconnect(self._onPropertyChanged) + extruder_stack.containersChanged.disconnect(self._onInstanceContainersChanged) + self._global_container_stack = Application.getInstance().getGlobalContainerStack() self._active_container_stack = self._global_container_stack @@ -243,6 +248,10 @@ class MachineManager(QObject): if global_material != self._empty_material_container: self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_material), self._empty_material_container) + for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): #Listen for changes on all extruder stacks. + extruder_stack.propertyChanged.connect(self._onPropertyChanged) + extruder_stack.containersChanged.connect(self._onInstanceContainersChanged) + else: material = self._global_container_stack.findContainer({"type": "material"}) material.nameChanged.connect(self._onMaterialNameChanged) @@ -263,14 +272,8 @@ class MachineManager(QObject): self.blurSettings.emit() # Ensure no-one has focus. old_active_container_stack = self._active_container_stack - if self._active_container_stack and self._active_container_stack != self._global_container_stack: - self._active_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged) - self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged) self._active_container_stack = ExtruderManager.getInstance().getActiveExtruderStack() - if self._active_container_stack: - self._active_container_stack.containersChanged.connect(self._onInstanceContainersChanged) - self._active_container_stack.propertyChanged.connect(self._onPropertyChanged) - else: + if not self._active_container_stack: self._active_container_stack = self._global_container_stack self._updateStacksHaveErrors()