diff options
Diffstat (limited to 'share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml')
-rw-r--r-- | share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml | 50 |
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 } } |