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
This commit is contained in:
Joey de l'Arago 2022-12-05 11:32:24 +01:00
parent 540d810293
commit d7e1aa08ac
4 changed files with 41 additions and 15 deletions

View file

@ -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)
}
}
}