From 3ddebe7a84b5e6fa4f3a7b95aec7c2838c2b18a8 Mon Sep 17 00:00:00 2001 From: Joey de l'Arago Date: Tue, 6 Dec 2022 10:37:06 +0100 Subject: [PATCH] The extrudersCHanged signal was incorrectly being emitted before the global stack had updated. This was causing the extruderIds to always return the old extruderIds to connected qml components. The setting slider was incorrectly setting the slider value when updating the model. CURA-9793 --- cura/Settings/ExtruderManager.py | 12 ++++++++---- .../Recommended/RecommendedStrengthSelector.qml | 1 + resources/qml/Widgets/SingleSettingSlider.qml | 2 -- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index f429a0de19..aff1498a2a 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -2,13 +2,14 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt. + +from UM.Application import Application from UM.FlameProfiler import pyqtSlot import cura.CuraApplication # To get the global container stack to find the current machine. from cura.Settings.GlobalStack import GlobalStack from UM.Logger import Logger from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator -from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Settings.ContainerRegistry import ContainerRegistry # Finding containers by ID. @@ -45,13 +46,18 @@ class ExtruderManager(QObject): self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]] Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) + Application.getInstance().globalContainerStackChanged.connect(self.emitExtrudersChanged) # When the machine is swapped we must update the active machine extruders - extrudersChanged = pyqtSignal(QVariant) + extrudersChanged = pyqtSignal() """Signal to notify other components when the list of extruders for a machine definition changes.""" activeExtruderChanged = pyqtSignal() """Notify when the user switches the currently active extruder.""" + def emitExtrudersChanged(self): + # The emit function can't be directly connected to another signal. This wrapper function is required. + self.extrudersChanged.emit() + @pyqtProperty(str, notify = activeExtruderChanged) def activeExtruderStackId(self) -> Optional[str]: """Gets the unique identifier of the currently active extruder stack. @@ -375,8 +381,6 @@ class ExtruderManager(QObject): extruders_changed = True self.fixSingleExtrusionMachineExtruderDefinition(global_stack) - if extruders_changed: - self.extrudersChanged.emit(global_stack_id) # After 3.4, all single-extrusion machines have their own extruder definition files instead of reusing # "fdmextruder". We need to check a machine here so its extruder definition is correct according to this. diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml index 53a54cdc94..7424aed01c 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml @@ -59,6 +59,7 @@ RecommendedSettingSection { width: parent.width settingName: "infill_pattern" + updateAllExtruders: true } }, RecommendedSettingItem diff --git a/resources/qml/Widgets/SingleSettingSlider.qml b/resources/qml/Widgets/SingleSettingSlider.qml index 91ff9c1ed4..24692f75fc 100644 --- a/resources/qml/Widgets/SingleSettingSlider.qml +++ b/resources/qml/Widgets/SingleSettingSlider.qml @@ -83,9 +83,7 @@ RowLayout function roundSliderValueUpdateSetting() { // If the user interacts with the slider we round the value and update the setting. - print("roundSliderValueUpdateSetting()") const roundedSliderValue = roundToNearestTen ? Math.round(settingSlider.value / 10) * 10 : Math.round(settingSlider.value) - settingSlider.value = roundedSliderValue updateSetting(roundedSliderValue) }