From d7e1aa08ac155b0ac54340035cdf70267c1592c1 Mon Sep 17 00:00:00 2001 From: Joey de l'Arago Date: Mon, 5 Dec 2022 11:32:24 +0100 Subject: [PATCH] Update the single setting components to optionally update all extruders when a setting is settable per extruder or limited to extruder. This forces all extruders to have their settings updated but only displays the value from a single extruder. CURA-9793 --- .../RecommendedStrengthSelector.qml | 6 +----- .../qml/Widgets/SingleSettingComboBox.qml | 20 +++++++++++++++--- resources/qml/Widgets/SingleSettingSlider.qml | 21 +++++++++++++++---- .../qml/Widgets/SingleSettingTextField.qml | 9 +++++--- 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml index 61079c8fca..52a2197b99 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedStrengthSelector.qml @@ -39,6 +39,7 @@ RecommendedSettingSection width: parent.width settingName: "infill_sparse_density" roundToNearestTen: true + updateAllExtruders: true // disable slider when gradual support is enabled enabled: parseInt(infillSteps.properties.value) == 0 @@ -58,11 +59,6 @@ RecommendedSettingSection { width: parent.width settingName: "infill_pattern" - - function updateSetting(value) - { - Cura.MachineManager.setSettingForAllExtruders("infill_pattern", "value", value) - } } }, RecommendedSettingItem diff --git a/resources/qml/Widgets/SingleSettingComboBox.qml b/resources/qml/Widgets/SingleSettingComboBox.qml index 5c56fedb9c..0767c271ca 100644 --- a/resources/qml/Widgets/SingleSettingComboBox.qml +++ b/resources/qml/Widgets/SingleSettingComboBox.qml @@ -11,10 +11,17 @@ import Cura 1.7 as Cura // This ComboBox allows changing of a single setting. Only the setting name has to be passed in to "settingName". // All of the setting updating logic is handled by this component. // This uses the "options" value of a setting to populate the drop down. This will only work for settings with "options" +// If the setting is limited to a single extruder or is settable with different values per extruder use "updateAllExtruders: true" Cura.ComboBox { textRole: "text" property alias settingName: propertyProvider.key + // If true, all extruders will have "settingName" property updated. + // The displayed value will be read from the extruder with index "defaultExtruderIndex" instead of the machine. + property bool updateAllExtruders: false + // This is only used if updateAllExtruders == true + property int defaultExtruderIndex: 0 + model: ListModel { id: comboboxModel @@ -47,8 +54,8 @@ Cura.ComboBox { property UM.SettingPropertyProvider propertyProvider: UM.SettingPropertyProvider { id: propertyProvider - containerStack: Cura.MachineManager.activeMachine - watchedProperties: [ "value" , "options"] + containerStackId: updateAllExtruders ? Cura.ExtruderManager.extruderIds[defaultExtruderIndex] : Cura.MachineManager.activeMachine.id + watchedProperties: ["value" , "options"] } Connections @@ -71,6 +78,13 @@ Cura.ComboBox { function updateSetting(value) { - propertyProvider.setPropertyValue("value", value) + if (updateAllExtruders) + { + Cura.MachineManager.setSettingForAllExtruders(propertyProvider.key, "value", value) + } + else + { + propertyProvider.setPropertyValue("value", value) + } } } diff --git a/resources/qml/Widgets/SingleSettingSlider.qml b/resources/qml/Widgets/SingleSettingSlider.qml index 8fc81f6c2f..f1b0f2c54d 100644 --- a/resources/qml/Widgets/SingleSettingSlider.qml +++ b/resources/qml/Widgets/SingleSettingSlider.qml @@ -11,7 +11,7 @@ import QtQuick.Layouts 1.3 // This silder allows changing of a single setting. Only the setting name has to be passed in to "settingName". // All of the setting updating logic is handled by this component. // This component allows you to choose values between minValue -> maxValue and rounds them to the nearest 10. - +// If the setting is limited to a single extruder or is settable with different values per extruder use "updateAllExtruders: true" RowLayout { height: childrenRect.height @@ -20,6 +20,12 @@ RowLayout property alias settingName: propertyProvider.key property alias enabled: settingSlider.enabled + // If true, all extruders will have "settingName" property updated. + // The displayed value will be read from the extruder with index "defaultExtruderIndex" instead of the machine. + property bool updateAllExtruders: false + // This is only used if updateAllExtruders == true + property int defaultExtruderIndex: 0 + property bool roundToNearestTen: false property int maxValue: 100 property int minValue: 0 @@ -28,8 +34,8 @@ RowLayout UM.SettingPropertyProvider { id: propertyProvider - containerStackId: Cura.MachineManager.activeStackId - watchedProperties: [ "value" ] + containerStackId: updateAllExtruders ? Cura.ExtruderManager.extruderIds[defaultExtruderIndex] : Cura.MachineManager.activeMachine.id + watchedProperties: ["value"] storeIndex: 0 } @@ -99,6 +105,13 @@ RowLayout // Override this function to update a setting differently function updateSetting(value) { - propertyProvider.setPropertyValue("value", value) + if (updateAllExtruders) + { + Cura.MachineManager.setSettingForAllExtruders(propertyProvider.key, "value", value) + } + else + { + propertyProvider.setPropertyValue("value", value) + } } } diff --git a/resources/qml/Widgets/SingleSettingTextField.qml b/resources/qml/Widgets/SingleSettingTextField.qml index f3cc433ace..72edf58681 100644 --- a/resources/qml/Widgets/SingleSettingTextField.qml +++ b/resources/qml/Widgets/SingleSettingTextField.qml @@ -10,14 +10,17 @@ import Cura 1.7 as Cura // This text field allows you to edit a single setting. The setting can be passed by "settingName". // You must specify a validator with Validator. We store our default setting validators in qml/Validators +// If the setting is limited to a single extruder or is settable with different values per extruder use "updateAllExtruders: true" UM.TextField { id: control property alias settingName: propertyProvider.key // If true, all extruders will have "settingName" property updated. - // The displayed value will be read from the first extruder instead of the machine. + // The displayed value will be read from the extruder with index "defaultExtruderIndex" instead of the machine. property bool updateAllExtruders: false + // This is only used if updateAllExtruders == true + property int defaultExtruderIndex: 0 // Resolving the value in the textField. Binding @@ -49,8 +52,8 @@ UM.TextField property UM.SettingPropertyProvider propertyProvider: UM.SettingPropertyProvider { id: propertyProvider - watchedProperties: [ "value", "validationState", "resolve" ] - containerStackId: updateAllExtruders ? Cura.ExtruderManager.extruderIds[0] : Cura.MachineManager.activeMachine + watchedProperties: ["value", "validationState", "resolve"] + containerStackId: updateAllExtruders ? Cura.ExtruderManager.extruderIds[defaultExtruderIndex] : Cura.MachineManager.activeMachine.id } Connections