linphone-desktop/tests/ui/views/App/MainWindow/Contacts.qml
Ronan Abhamon 08fbc20c97 feat(app): many changes:
- use vcard of Contact in qml
- remove `sipAddress` attribute of Contact
- refactoring...
2016-12-14 13:20:35 +01:00

255 lines
6.8 KiB
QML

import QtQuick 2.7
import QtQuick.Layouts 1.3
import Common 1.0
import Linphone 1.0
import Utils 1.0
import App.Styles 1.0
// =============================================================================
ColumnLayout {
function _removeContact (contact) {
Utils.openConfirmDialog(window, {
descriptionText: qsTr('removeContactDescription'),
exitHandler: function (status) {
if (status) {
ContactsListModel.removeContact(contact)
}
},
title: qsTr('removeContactTitle')
})
}
spacing: 0
// ---------------------------------------------------------------------------
// Search Bar & actions.
// ---------------------------------------------------------------------------
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: ContactsStyle.bar.height
color: ContactsStyle.bar.backgroundColor
RowLayout {
anchors {
fill: parent
leftMargin: ContactsStyle.bar.leftMargin
rightMargin: ContactsStyle.bar.rightMargin
}
spacing: ContactsStyle.spacing
TextField {
Layout.fillWidth: true
icon: 'filter'
placeholderText: qsTr('searchContactPlaceholder')
onTextChanged: contacts.setFilter(text)
}
ExclusiveButtons {
texts: [
qsTr('selectAllContacts'),
qsTr('selectConnectedContacts')
]
onClicked: contacts.useConnectedFilter = !!button
}
TextButtonB {
text: qsTr('addContact')
onClicked: window.setView('ContactEdit')
}
}
}
// ---------------------------------------------------------------------------
// Contacts list.
// ---------------------------------------------------------------------------
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: ContactsStyle.backgroundColor
ScrollableListView {
anchors.fill: parent
spacing: 0
model: ContactsListProxyModel {
id: contacts
}
delegate: Borders {
bottomColor: ContactsStyle.contact.border.color
bottomWidth: ContactsStyle.contact.border.width
height: ContactsStyle.contact.height
width: parent.width
// ---------------------------------------------------------------------
Rectangle {
id: contact
anchors.fill: parent
color: ContactsStyle.contact.backgroundColor.normal
// -------------------------------------------------------------------
Component {
id: container1
RowLayout {
spacing: ContactsStyle.contact.spacing
PresenceLevel {
Layout.preferredHeight: ContactsStyle.contact.presenceLevelSize
Layout.preferredWidth: ContactsStyle.contact.presenceLevelSize
level: $contact.presenceLevel
}
PresenceString {
Layout.fillWidth: true
status: $contact.presenceStatus
}
}
}
Component {
id: container2
Item {
ActionBar {
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
}
iconSize: ContactsStyle.contact.actionButtonsSize
ActionButton {
icon: 'video_call'
onClicked: CallsWindow.show()
}
ActionButton {
icon: 'call'
onClicked: CallsWindow.show()
}
ActionButton {
icon: 'chat'
onClicked: window.setView('Conversation', {
sipAddress: $contact.vcard.sipAddresses[0] // FIXME: Display menu if many addresses.
})
}
}
ActionButton {
anchors {
right: parent.right
verticalCenter: parent.verticalCenter
}
icon: 'delete'
iconSize: ContactsStyle.contact.deleteButtonSize
onClicked: _removeContact($contact)
}
}
}
// -------------------------------------------------------------------
Rectangle {
id: indicator
anchors.left: parent.left
color: 'transparent'
height: parent.height
width: ContactsStyle.contact.indicator.width
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
RowLayout {
anchors {
fill: parent
leftMargin: ContactsStyle.contact.leftMargin
rightMargin: ContactsStyle.contact.rightMargin
}
spacing: ContactsStyle.contact.spacing
Avatar {
Layout.preferredHeight: ContactsStyle.contact.avatarSize
Layout.preferredWidth: ContactsStyle.contact.avatarSize
image: $contact.vcard.avatar
username: $contact.vcard.username
}
Text {
Layout.preferredWidth: ContactsStyle.contact.username.width
color: ContactsStyle.contact.username.color
elide: Text.ElideRight
font {
bold: true
pointSize: ContactsStyle.contact.username.fontSize
}
text: $contact.vcard.username
MouseArea {
anchors.fill: parent
cursorShape: containsMouse
? Qt.PointingHandCursor
: Qt.ArrowCursor
hoverEnabled: true
onClicked: window.setView('ContactEdit', {
sipAddress: $contact.vcard.sipAddresses[0] // FIXME: Display menu if many addresses.
})
}
}
// Container.
Loader {
id: loader
Layout.fillWidth: true
Layout.fillHeight: true
sourceComponent: container1
}
}
}
// -------------------------------------------------------------------
states: State {
when: mouseArea.containsMouse
PropertyChanges {
color: ContactsStyle.contact.backgroundColor.hovered
target: contact
}
PropertyChanges {
color: ContactsStyle.contact.indicator.color
target: indicator
}
PropertyChanges {
sourceComponent: container2
target: loader
}
}
}
}
}
}
}