~renatofilho/address-book-app/new-designer-contact-list

« back to all changes in this revision

Viewing changes to src/imports/Ubuntu/Contacts/ContactListView.qml

  • Committer: Renato Araujo Oliveira Filho
  • Date: 2014-06-17 00:41:33 UTC
  • mfrom: (169.9.9 staging)
  • Revision ID: renato.filho@canonical.com-20140617004133-m4lm6hbiiyd1zx0w
Staging merged.

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
Item {
42
42
    id: root
43
43
 
44
 
    property alias view: view
45
 
    property alias count: view.count
46
 
 
 
44
    readonly property alias view: view
 
45
    readonly property alias count: view.count
 
46
 
 
47
    /*!
 
48
      \qmlproperty string contactNameFilter
 
49
 
 
50
      This property holds a string that will be used to filter contacts on the list
 
51
      By default this is set to empty
 
52
    */
 
53
    property string contactNameFilter: ""
 
54
    /*!
 
55
      \qmlproperty Filter filter
 
56
 
 
57
      This property holds the filter instance used by the contact model.
 
58
 
 
59
      \sa Filter
 
60
    */
 
61
    property var filter: null
 
62
    /*!
 
63
      \qmlproperty bool showFavourites
 
64
 
 
65
      This property holds if the option to switch between favourite and all contacts should be visible
 
66
      By default this is set to true.
 
67
    */
47
68
    property alias showFavourites: view.showFavourites
 
69
    /*!
 
70
      \qmlproperty bool showAvatar
 
71
 
 
72
      This property holds if the contact avatar will appear on the list or not.
 
73
      By default this is set to true.
 
74
    */
48
75
    property alias showAvatar: view.showAvatar
 
76
    /*!
 
77
      \qmlproperty int titleDetail
 
78
 
 
79
      This property holds the contact detail which will be used to display the contact title in the delegate
 
80
      By default this is set to ContactDetail.Name.
 
81
    */
49
82
    property alias titleDetail: view.titleDetail
 
83
    /*!
 
84
      \qmlproperty list<int> titleFields
 
85
 
 
86
      This property holds the list of all fields which will be used to display the contact title in the delegate
 
87
      By default this is set to [ Name.FirstName, Name.LastName ]
 
88
    */
50
89
    property alias titleFields: view.titleFields
 
90
    /*!
 
91
      \qmlproperty list<SortOrder> sortOrders
 
92
 
 
93
      This property holds a list of sort orders used by the contacts model.
 
94
      \sa SortOrder
 
95
    */
51
96
    property alias sortOrders: view.sortOrders
 
97
    /*!
 
98
      \qmlproperty FetchHint fetchHint
 
99
 
 
100
      This property holds the fetch hint instance used by the contact model.
 
101
 
 
102
      \sa FetchHint
 
103
    */
52
104
    property alias fetchHint: view.fetchHint
53
 
    property alias filter: view.filter
 
105
    /*!
 
106
      \qmlproperty bool multiSelectionEnabled
 
107
 
 
108
      This property holds if the multi selection mode is enabled or not
 
109
      By default this is set to false
 
110
    */
54
111
    property alias multiSelectionEnabled: view.multiSelectionEnabled
 
112
    /*!
 
113
      \qmlproperty string defaultAvatarImage
 
114
 
 
115
      This property holds the default image url to be used when the current contact does
 
116
      not contains a photo
 
117
    */
55
118
    property alias defaultAvatarImageUrl: view.defaultAvatarImageUrl
 
119
    /*!
 
120
      \qmlproperty bool loading
 
121
 
 
122
      This property holds when the model still loading new contacts
 
123
    */
56
124
    readonly property alias loading: view.loading
 
125
    /*!
 
126
      \qmlproperty int detailToPick
 
127
 
 
128
      This property holds the detail type to be picked
 
129
    */
57
130
    property alias detailToPick: view.detailToPick
 
131
    /*!
 
132
      \qmlproperty int currentIndex
 
133
 
 
134
      This property holds the current active item index
 
135
    */
58
136
    property alias currentIndex: view.currentIndex
 
137
    /*!
 
138
      \qmlproperty bool showSections
 
139
 
 
140
      This property holds if the listview will show or not the section headers
 
141
      By default this is set to true
 
142
    */
59
143
    property alias showSections: view.showSections
 
144
    /*!
 
145
      \qmlproperty string manager
 
146
 
 
147
      This property holds the manager uri of the contact backend engine.
 
148
      By default this is set to "galera"
 
149
    */
60
150
    property alias manager: view.manager
 
151
    /*!
 
152
      \qmlproperty bool fastScrolling
 
153
 
 
154
      This property holds if the listview is in fast scroll mode or not
 
155
    */
61
156
    property alias fastScrolling: fastScroll.fastScrolling
 
157
    /*!
 
158
      \qmlproperty Action leftSideAction
 
159
 
 
160
      This property holds the available actions when swipe the contact item from left to right
 
161
    */
62
162
    property alias leftSideAction: view.leftSideAction
 
163
    /*!
 
164
      \qmlproperty list<Action> rightSideActions
 
165
 
 
166
      This property holds the available actions when swipe the contact item from right to left
 
167
    */
63
168
    property alias rightSideActions: view.rightSideActions
 
169
    /*!
 
170
      \qmlproperty model selectedItems
64
171
 
 
172
      This property holds the list of selected items
 
173
    */
65
174
    readonly property alias selectedItems: view.selectedItems
 
175
    /*!
 
176
      \qmlproperty bool multipleSelection
 
177
 
 
178
      This property holds if the selection will accept multiple items or single items
 
179
    */
66
180
    property alias multipleSelection: view.multipleSelection
 
181
    /*!
 
182
      \qmlproperty model listModel
 
183
 
 
184
      This property holds the model providing data for the list.
 
185
    */
67
186
    property alias listModel: view.listModel
 
187
    /*!
 
188
      \qmlproperty Component listDelegate
 
189
 
 
190
      The delegate provides a template defining each item instantiated by the view.
 
191
    */
68
192
    property alias listDelegate: view.listDelegate
 
193
    /*!
 
194
      \qmlproperty bool autoUpdate
 
195
 
 
196
       This property indicates whether or not the contact model should be updated automatically, default value is true.
 
197
    */
 
198
    property alias autoUpdate: contactsModel.autoUpdate
 
199
    /*!
 
200
      \qmlproperty bool isInSelectionMode
 
201
 
 
202
      This property holds a list with the index of selected items
 
203
    */
69
204
    readonly property alias isInSelectionMode: view.isInSelectionMode
70
 
 
 
205
    /*!
 
206
      This handler is called when the selection mode is finished without be canceled
 
207
    */
71
208
    signal selectionDone(var items)
 
209
    /*!
 
210
      This handler is called when the selection mode is canceled
 
211
    */
72
212
    signal selectionCanceled()
 
213
    /*!
 
214
      This handler is called when any error occurs in the contact model
 
215
    */
73
216
    signal error(string message)
 
217
    /*!
 
218
      This handler is called when details button on contact delegate is clicked
 
219
    */
74
220
    signal infoRequested(QtObject contact)
 
221
    /*!
 
222
      This handler is called when any contact detail in the list receives a click
 
223
    */
75
224
    signal detailClicked(QtObject contact, QtObject detail, string action)
 
225
    /*!
 
226
      This handler is called when the contact delegate disapear (height === 0) caused by the function call makeDisappear
 
227
    */
76
228
    signal contactDisappeared(QtObject contact)
77
229
 
78
230
    function startSelection()
79
231
    {
80
232
        view.startSelection()
81
233
    }
82
 
 
83
234
    function isSelected(item)
84
235
    {
85
236
        return view.isSelected(item)
127
278
        }
128
279
        root.filter = newFilter
129
280
    }
 
281
    /*!
 
282
      Causes the list to update
 
283
      \l autoUpdate
 
284
    */
 
285
    function update()
 
286
    {
 
287
        contactsModel.update()
 
288
    }
130
289
 
131
290
    Rectangle {
132
291
        id: itemHeader
193
352
        }
194
353
    }
195
354
 
 
355
    onContactNameFilterChanged: contactSearchTimeout.restart()
 
356
 
196
357
    ContactSimpleListView {
197
358
        id: view
198
359
 
242
403
        IntersectionFilter {
243
404
            id: contactsFilter
244
405
 
 
406
            property bool active: false
 
407
 
245
408
            filters: {
246
409
                var filters = []
247
410
                if (root.showFavourites) {
250
413
                if (root.filter) {
251
414
                    filters.push(root.filter)
252
415
                }
 
416
                if (nameFilter.value && (nameFilter.value.length > 0)) {
 
417
                    filters.push(nameFilter)
 
418
                }
 
419
                active = (filters.length > 0)
253
420
                return filters
254
421
            }
255
422
        }
256
423
 
 
424
        DetailFilter {
 
425
            id: nameFilter
 
426
 
 
427
            detail: ContactDetail.DisplayLabel
 
428
            field: DisplayLabel.Label
 
429
            value: root.nameFilter
 
430
            matchFlags: DetailFilter.MatchContains
 
431
        }
 
432
 
 
433
        Timer {
 
434
            id: contactSearchTimeout
 
435
 
 
436
            running: false
 
437
            repeat: false
 
438
            interval: 300
 
439
            onTriggered: {
 
440
                if (root.contactNameFilter === "") { // if the search criteria is empty clear the list before show all contacts
 
441
                    contactList.changeFilter(root.filter)
 
442
                    nameFilter.value = ""
 
443
                } else {
 
444
                    if (nameFilter.value === "") { // if the search starts clear the list before show results
 
445
                        contactList.changeFilter(root.filter)
 
446
                    }
 
447
                    nameFilter.value = root.contactNameFilter
 
448
                }
 
449
            }
 
450
        }
 
451
 
257
452
        listModel: ContactModel {
258
453
            id: contactsModel
259
454
 
265
460
            filter: {
266
461
                if (contactsModel._clearModel) {
267
462
                    return invalidFilter
268
 
                } else if (view.showFavourites || root.filter) {
269
 
                    console.debug("show vaforite")
 
463
                } else if (contactsFilter.active) {
270
464
                    return contactsFilter
271
465
                } else {
272
466
                    return null