From 914956eb5d6fb0776383675224ff3da4101b817c Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Fri, 8 Mar 2024 22:18:14 +0200 Subject: [PATCH] QmlDesigner: Add select all/none options to FlagsComboBox Fixes: QDS-12214 Change-Id: Iea02b76a1f2f57cfb9bb292dc26e9ce0a517693b Reviewed-by: Miikka Heikkinen --- .../imports/HelperWidgets/FlagsComboBox.qml | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml index bb08fdcdff9..05a97e7a145 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml @@ -2,17 +2,14 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 import QtQuick -import StudioControls 1.0 as StudioControls -import StudioTheme 1.0 as StudioTheme +import StudioControls as StudioControls +import HelperWidgets as HelperWidgets +import StudioTheme as StudioTheme /* - A ComboBox of flags, it expects a list mode as below, first item will act as clear: + A ComboBox of flags, it expects a list model as below itemsModel: ListModel { - ListElement { - name: qsTr("Clear") - flag: 0 - } ListElement { name: "..." flag: ... @@ -41,11 +38,12 @@ StudioControls.CustomComboBox { let numSelected = 0 let selectedItem = "" - for (let i = 1; i < root.itemsModel.count; ++i) { - let flag = (root.backendValue.value >> (i - 1)) & 1; - root.popupItem.itemAt(i).checked = flag + for (let i = 0; i < root.itemsModel.count; ++i) { + let flag = root.itemsModel.get(i).flag + let flagActive = root.backendValue.value & flag + root.popupItem.itemAt(i).checked = flagActive - if (flag) { + if (flagActive) { selectedItem = root.itemsModel.get(i).name ++numSelected } @@ -70,6 +68,27 @@ StudioControls.CustomComboBox { return repeater.itemAt(idx) } + Row { + spacing: 5 + + HelperWidgets.Button { + text: qsTr("Select All") + + onClicked: { + let allFlags = 0 + for (let i = 0; i < root.itemsModel.count; ++i) + allFlags += root.itemsModel.get(i).flag + + root.backendValue.value = allFlags + } + } + HelperWidgets.Button { + text: qsTr("Select None") + + onClicked: root.backendValue.value = 0 + } + } + Repeater { id: repeater @@ -77,18 +96,12 @@ StudioControls.CustomComboBox { delegate: StudioControls.CheckBox { text: name actionIndicatorVisible: false - checked: (root.backendValue.value >> (index - 1)) & 1 onToggled: { - if (index === 0) { // Clear - root.popupItem.itemAt(0).checked = false - root.backendValue.value = 0 - } else { - if (root.popupItem.itemAt(index).checked) - root.backendValue.value |= flag - else - root.backendValue.value &= ~flag - } + if (root.popupItem.itemAt(index).checked) + root.backendValue.value |= flag + else + root.backendValue.value &= ~flag } } }