aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickgridview/data/qtbug49218.qml
blob: 353157cf2a7c2e6596e8003e8f55a8b7e7438df2 (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick 2.4

Item {
    width: 500
    height: 160
    visible: true

    property var model1: ["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","a"]
    property var model2: ["a","b","c","d","e","f","g","h","i","j","k","l","m","1"]
    property bool useModel1: true

    function changeModel() {
        useModel1 = !useModel1
        grid.loadModel(useModel1 ? model1 : model2)
    }

    function scrollToTop() {
        grid.contentY = grid.originY;
    }

    GridView {
        id: grid
        anchors.fill: parent

        model: ListModel {
        }

        onCurrentIndexChanged: {
            positionViewAtIndex(currentIndex, GridView.Contain)
        }

        Component.onCompleted: {
            loadModel(model1)
            grid.currentIndex = 34
            grid.positionViewAtIndex(34, GridView.Contain)
        }

        function loadModel(m) {
            var remove = {};
            var add = {};
            var i;
            for (i=0; i < model.count; ++i)
                remove[model.get(i).name] = true;
            for (i=0; i < m.length; ++i)
                if (remove[m[i]])
                    delete remove[m[i]];
                else
                    add[m[i]] = true;

            for (i=model.count-1; i>= 0; --i)
                if (remove[model.get(i).name])
                    model.remove(i, 1);

            for (i=0; i<m.length; ++i)
                if (add[m[i]])
                    model.insert(i, { "name": m[i] })
        }

        delegate: Rectangle {
            height: grid.cellHeight
            width: grid.cellWidth
            color: GridView.isCurrentItem ? "gray" : "white"
            Text {
                anchors.fill: parent
                text: name
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    grid.currentIndex = index
                }
            }
        }
    }
}