summaryrefslogtreecommitdiff
path: root/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml')
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml50
1 files changed, 44 insertions, 6 deletions
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml
index c90ba1c2aa..0512b0861b 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml
@@ -6,7 +6,7 @@ import HelperWidgets 2.0 as HelperWidgets
import StudioControls 1.0 as StudioControls
StudioControls.ComboBox {
- id: comboBox
+ id: root
property alias typeFilter: itemFilterModel.typeFilter
@@ -14,7 +14,9 @@ StudioControls.ComboBox {
property bool __isCompleted: false
editable: true
- model: itemFilterModel.itemModel
+ model: itemFilterModel
+ textRole: "IdRole"
+ valueRole: "IdRole"
HelperWidgets.ItemFilterModel {
id: itemFilterModel
@@ -22,13 +24,49 @@ StudioControls.ComboBox {
}
Component.onCompleted: {
- comboBox.__isCompleted = true
+ root.__isCompleted = true
+ root.resetInitialIndex()
+ }
+
+ onInitialModelDataChanged: root.resetInitialIndex()
+ onValueRoleChanged: root.resetInitialIndex()
+ onModelChanged: root.resetInitialIndex()
+ onTextRoleChanged: root.resetInitialIndex()
+
+ function resetInitialIndex() {
+ let currentSelectedDataIndex = -1
// Workaround for proper initialization. Use the initial modelData value and search for it
// in the model. If nothing was found, set the editText to the initial modelData.
- comboBox.currentIndex = comboBox.find(comboBox.initialModelData)
+ if (root.textRole === root.valueRole) {
+ currentSelectedDataIndex = root.find(root.initialModelData)
+ } else {
+ for (let i = 0; i < root.count; ++i) {
+ let movingModelIndex = root.model.index(i)
+ let movingModelValueData = root.model.data(movingModelIndex, root.valueRole)
+ if (movingModelValueData === root.initialModelData) {
+ currentSelectedDataIndex = i
+ break
+ }
+ }
+ }
+ root.currentIndex = currentSelectedDataIndex
+ if (root.currentIndex === -1)
+ root.editText = root.initialModelData
+ }
+
+ function currentData(role = root.valueRole) {
+ if (root.currentIndex !== -1) {
+ let currentModelIndex = root.model.index(root.currentIndex)
+ return root.model.data(currentModelIndex, role)
+ }
+ return root.editText
+ }
+
+ function availableValue() {
+ if (root.currentIndex !== -1 && root.currentValue !== "")
+ return root.currentValue
- if (comboBox.currentIndex === -1)
- comboBox.editText = comboBox.initialModelData
+ return root.editText
}
}