summaryrefslogtreecommitdiffstats
path: root/examples/declarative/tutorials/contacts/3_Collections/2/ContactView.qml
blob: 1be4b991f72157d7044735151ac01b28d6910fb4 (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
110
111
112
113
114
115
116
117
118
119
120
121
122
import "../lib"
Item {
    id: contacts
    width: 240
    height: 230
    property var mouseGrabbed: false
    resources: [
        SqlConnection {
            id: contactDatabase
            name: "qmlConnection"
            driver: "QSQLITE"
            databaseName: "../../shared/contacts.sqlite"
        },
        SqlQuery {
            id: contactList
            connection: contactDatabase
            query: "SELECT recid, label, email, phone FROM contacts ORDER BY label, recid"
        }
    ]
//! [button]
    Button {
        id: cancelEditButton
        anchors.top: parent.top
        anchors.topMargin: 5
        anchors.right: parent.right
        anchors.rightMargin: 5
        icon: "../../shared/pics/cancel.png"
        opacity: mouseGrabbed ? 0 : 1
    }
//! [button]
    ListView {
        id: contactListView
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.top: cancelEditButton.bottom
        anchors.bottom: parent.bottom
        clip: true
        model: contactList
        focus: true
        delegate: [
//! [components]
            Item {
                id: wrapper
                x: 0
                width: ListView.view.width
                height: 34
                Text {
                    id: label
                    x: 45
                    y: 12
                    width: parent.width-45
                    color: "black"
                    font.bold: true
                    text: model.label
                }
                MouseRegion {
                    anchors.fill: label
                    onClicked: { wrapper.state='opened'; }
                }
                Contact {
                    id: Details
                    anchors.fill: parent
                    contactId: model.recid
                    label: model.label
                    email: model.email
                    phone: model.phone
                    opacity: 0
                }
//! [components]
//! [states]
                states: [
                    State {
                        name: "opened"
                        SetProperties {
                            target: wrapper
                            height: contactListView.height
                        }
                        SetProperties {
                            target: contactListView
                            explicit: true
                            yPosition: wrapper.y
                        }
                        SetProperties {
                            target: contactListView
                            locked: 1
                        }
                        SetProperties {
                            target: label
                            opacity: 0
                        }
                        SetProperties {
                            target: Details
                            opacity: 1
                        }
                    }
                ]
//! [states]
//! [transitions]
                transitions: [
                    Transition {
                        NumericAnimation {
                            duration: 500
                            properties: "yPosition,height,opacity"
                        }
                    }
                ]
//! [transitions]
//! [connections]
                Connection {
                    sender: cancelEditButton
                    signal: "clicked()"
                    script: {
                        if (wrapper.state == 'opened') {
                            wrapper.state = '';
                        }
                    }
                }
//! [connections]
            }
        ]
    }
}