From b53c8aac5499026392297d67a397b5d4cf60c6a2 Mon Sep 17 00:00:00 2001 From: Joey de l'Arago Date: Tue, 29 Nov 2022 16:06:55 +0100 Subject: [PATCH] Add single setting update ComboBox CURA-9793 --- .../RecommendedSupportSelector.qml | 14 +++-- .../qml/Widgets/SingleSettingComboBox.qml | 62 +++++++++++++++++++ resources/qml/qmldir | 1 + 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 resources/qml/Widgets/SingleSettingComboBox.qml diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml index 8f236ddf4c..3ff2cc0501 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml @@ -6,7 +6,7 @@ import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 import UM 1.5 as UM -import Cura 1.6 as Cura +import Cura 1.7 as Cura RecommendedSettingSection @@ -60,7 +60,7 @@ RecommendedSettingSection settingControl: Cura.ExtruderSelectorBar { model: extruderModel - selectedIndex: (supportExtruderNr.properties.value !== undefined) ? supportExtruderNr.properties.value : 0 + selectedIndex: supportExtruderNr.properties.value !== undefined ? supportExtruderNr.properties.value : 0 function onClickExtruder(index) { forceActiveFocus(); @@ -73,9 +73,13 @@ RecommendedSettingSection RecommendedSettingItem { settingName: catalog.i18nc("@action:label", "Placement") - settingControl: Rectangle { color: "green"; width: 50; height:50 } + + settingControl: Cura.SingleSettingComboBox + { + width: parent.width + height: UM.Theme.getSize("combobox").height + settingName: "support_type" + } } ] - - } diff --git a/resources/qml/Widgets/SingleSettingComboBox.qml b/resources/qml/Widgets/SingleSettingComboBox.qml new file mode 100644 index 0000000000..c79ff591e8 --- /dev/null +++ b/resources/qml/Widgets/SingleSettingComboBox.qml @@ -0,0 +1,62 @@ +// Copyright (c) 2022 UltiMaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import UM 1.5 as UM +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" +Cura.ComboBox { + textRole: "text" + property alias settingName: propertyProvider.key + + model: ListModel { + id: comboboxModel + + // The propertyProvider has not loaded the setting when this components onComplete triggers. Populating the model + // is defered until propertyProvider signals "onIsValueUsedChanged". + function updateModel() + { + clear() + + if(!propertyProvider.properties.options) // No options have been loaded yet to populate combobox + { + return + } + + for (var i = 0; i < propertyProvider.properties["options"].keys().length; i++) + { + var key = propertyProvider.properties["options"].keys()[i] + var value = propertyProvider.properties["options"][key] + comboboxModel.append({ text: value, code: key}) + + if (propertyProvider.properties.value == key) + { + // The combobox is cleared after each value change so the currentIndex must be set each time. + currentIndex = i + } + } + } + } + + property UM.SettingPropertyProvider propertyProvider: UM.SettingPropertyProvider + { + id: propertyProvider + containerStack: Cura.MachineManager.activeMachine + watchedProperties: [ "value" , "options"] + } + + Connections + { + target: propertyProvider + function onContainerStackChanged() { comboboxModel.updateModel() } + function onIsValueUsedChanged() { comboboxModel.updateModel() } + } + + onCurrentIndexChanged: propertyProvider.setPropertyValue("value", comboboxModel.get(currentIndex).code) +} diff --git a/resources/qml/qmldir b/resources/qml/qmldir index 1a6739f5fb..da90f32145 100644 --- a/resources/qml/qmldir +++ b/resources/qml/qmldir @@ -40,6 +40,7 @@ MenuItem 1.0 MenuItem.qml MenuSeparator 1.0 MenuSeparator.qml ExtruderSelectorBar 1.6 ExtruderSelectorBar.qml ExtruderButton 1.6 ExtruderButton.qml +SingleSettingComboBox 1.7 SingleSettingComboBox.qml # Cura/MachineSettings