20
20
import QtContacts 5.0
22
22
import Ubuntu.Components 1.3
23
import Ubuntu.Components.ListItems 1.3 as ListItem
24
23
import Ubuntu.Contacts 0.1
29
28
// FIXME: change the Ubuntu.Contacts model to search for more fields
30
29
property alias filterTerm: contactModel.filterTerm
31
onFilterTermChanged: console.debug("FILTER :" + filterTerm)
33
31
signal contactPicked(string identifier, string label, string avatar)
35
model: ContactListModel {
34
ContactDetailPhoneNumberTypeModel {
41
property var proxyModel: []
61
66
detailTypesHint: [ ContactDetail.DisplayLabel,
62
67
ContactDetail.PhoneNumber ]
66
ContactDetailPhoneNumberTypeModel {
72
for (var i=0; i < contacts.length; i++) {
73
for (var p=0; p < contacts[i].phoneNumbers.length; p++) {
74
proxy.push({"contact": contacts[i], "phoneIndex": p})
77
contactModel.proxyModel = proxy
81
model: contactModel.proxyModel
73
85
right: parent.right
75
height: phoneRepeater.count * units.gu(6)
82
model: contact.phoneNumbers.length
91
onClicked: root.contactPicked(contact.phoneNumbers[index].number, contact.displayLabel.label, contact.avatar.url)
94
anchors.right: parent.right
95
anchors.left: parent.left
96
anchors.verticalCenter: parent.verticalCenter
97
height: childrenRect.height
103
leftMargin: units.gu(2)
108
// this is necessary to keep the string in the original format
109
var originalText = contact.displayLabel.label
110
var lowerSearchText = filterTerm.toLowerCase()
111
var lowerText = originalText.toLowerCase()
112
var searchIndex = lowerText.indexOf(lowerSearchText)
113
if (searchIndex !== -1) {
114
var piece = originalText.substr(searchIndex, lowerSearchText.length)
115
return originalText.replace(piece, "<b>" + piece + "</b>")
121
color: Theme.palette.normal.backgroundText
126
leftMargin: units.gu(2)
131
var phoneDetail = contact.phoneNumbers[index]
132
return ("%1 %2").arg(phoneTypeModel.get(phoneTypeModel.getTypeIndex(phoneDetail)).label)
133
.arg(phoneDetail.number)
135
color: Theme.palette.normal.backgroundSecondaryText
138
ListItem.ThinDivider {}
87
height: itemLayout.height
89
onClicked: root.contactPicked(modelData.contact.phoneNumbers[modelData.phoneIndex].number,
90
modelData.contact.displayLabel.label, modelData.contact.avatar.url)
96
// this is necessary to keep the string in the original format
97
var originalText = modelData.contact.displayLabel.label
98
var lowerSearchText = filterTerm.toLowerCase()
99
var lowerText = originalText.toLowerCase()
100
var searchIndex = lowerText.indexOf(lowerSearchText)
101
if (searchIndex !== -1) {
102
var piece = originalText.substr(searchIndex, lowerSearchText.length)
103
return originalText.replace(piece, "<b>" + piece + "</b>")
108
title.fontSize: "medium"
109
title.color: Theme.palette.normal.backgroundText
112
var phoneDetail = modelData.contact.phoneNumbers[modelData.phoneIndex]
113
return ("%1 %2").arg(phoneTypeModel.get(phoneTypeModel.getTypeIndex(phoneDetail)).label)
114
.arg(phoneDetail.number)
116
subtitle.color: Theme.palette.normal.backgroundSecondaryText
121
if (currentIndex == 0)
124
event.accepted = false