summaryrefslogtreecommitdiff
path: root/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ListViewComboBox.qml
blob: 1f8dbbb3d41cb61da29332b8428acc40fc2960dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick
import HelperWidgets 2.0 as HelperWidgets
import StudioControls 1.0 as StudioControls

StudioControls.ComboBox {
    id: root

    property var initialModelData
    property bool __isCompleted: false

    editable: true
    textRole: "id"
    valueRole: "id"

    Component.onCompleted: {
        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.
        if (root.textRole === root.valueRole) {
            currentSelectedDataIndex = root.find(root.initialModelData)
        } else {
            for (let i = 0; i < root.count; ++i) {
                if (root.valueAt(i) === root.initialModelData) {
                    currentSelectedDataIndex = i
                    break
                }
            }
        }
        root.currentIndex = currentSelectedDataIndex
        if (root.currentIndex === -1)
            root.editText = root.initialModelData
    }

    function availableValue() {
        if (root.currentIndex !== -1 && root.currentValue !== "")
            return root.currentValue

        return root.editText
    }
}