summaryrefslogtreecommitdiff
path: root/examples/declarative/map3d/common/Menu.qml
blob: 89efc9833c092de7e59710fe63f96ca612d7c0f7 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import QtQuick 2.0

Item {
    id: menu
    property int gap: 0
    property int button: 0
    property alias orientation: menuView.orientation
    property alias count: menuModel.count
    property int itemHeight  //to create menu just set menu item height and width, do not set menu's height and width explicitly
    property int itemWidth
//    height: (menuView.orientation == ListView.Horizontal)? itemHeight : itemHeight * count
    width: (menuView.orientation == ListView.Horizontal)? itemWidth * count : itemWidth

    signal clicked

    function setModel(objects)
    {
        for (var i=0; i< objects.length; i++){
            menuModel.append({"label": objects[i], "enabledItem" : true})
        }
        height = (menuView.orientation == ListView.Horizontal)? itemHeight : itemHeight * count
    }

    function disableItem(index){
        menuModel.set(index, {"enabledItem": false})
    }

    function enableItem(index){
        menuModel.set(index, {"enabledItem": true})
    }

    ListModel {
        id: menuModel
    }

    Component{
        id: menuItemDelegate
        Item {
            height: itemHeight
            width: itemWidth

            BorderImage {
                id: menuItemImage;
                source: "../resources/menuItem.sci";
                height: parent.height + 14;
                width: parent.width
                y: -7
            }

            Text {
                id: menuItemText
                text: label;
                elide: Text.ElideLeft
                font.bold: true;
                color: "white"
                style: Text.Raised;
                styleColor: "dimgrey"
                anchors.verticalCenter: parent.verticalCenter
                Component.onCompleted: {
                    if (menuView.orientation == ListView.Horizontal){
                        anchors.horizontalCenter = parent.horizontalCenter
                    }
                    else {
                        anchors.left = parent.left
                        anchors.leftMargin = 10
                    }
                }
            }
            MouseArea {
                id: mouseRegion
                anchors.fill: parent
                hoverEnabled: true
                enabled: enabledItem
                onClicked: {
                    button = index
                    menu.clicked()
                }
            }

            states: [
                State {
                    name: "Pressed"
                    when: mouseRegion.pressed == true
                    PropertyChanges { target: menuItemImage; source: "../resources/menuItem_pressed.png"}
                    PropertyChanges { target: menuItemText; style: Text.Sunken }
                },
                State {
                    name: "Hovered"
                    when: mouseRegion.containsMouse == true
                    PropertyChanges { target: menuItemImage; source: "../resources/menuItem_hovered.png"}
                },
                State {
                    name: "Disabled"
                    when: mouseRegion.enabled == false
                    PropertyChanges { target: menuItemText; color: "grey"}
                }
            ]
        }
    }

    ListView {
        id: menuView
        anchors.fill: parent
        model: menuModel
        delegate: menuItemDelegate
        spacing: gap
        interactive: false
    }
}