mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-04-20 01:18:29 +00:00
153 lines
5.1 KiB
QML
153 lines
5.1 KiB
QML
import QtQuick 2.7
|
|
import QtQuick.Layouts 1.3
|
|
import QtGraphicalEffects 1.12
|
|
|
|
import Linphone 1.0
|
|
import Linphone.Styles 1.0
|
|
import Common 1.0
|
|
|
|
import UtilsCpp 1.0
|
|
|
|
// =============================================================================
|
|
|
|
Rectangle {
|
|
id: item
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// An entry from `SipAddressesModel`, an `SipAddressObserver` or a ChatRoomModel
|
|
property var entry
|
|
// entry should have these functions : presenceStatus, sipAddress, username, avatar (image)
|
|
|
|
property alias sipAddressColor: description.sipAddressColor
|
|
property alias usernameColor: description.usernameColor
|
|
property alias statusText : description.statusText
|
|
|
|
property bool displayUnreadMessageCount: false
|
|
property bool showContactAddress : true
|
|
property bool showAuxData : false
|
|
|
|
property string username: (entry != undefined
|
|
? entry.conferenceInfoModel && entry.conferenceInfoModel.subject
|
|
? entry.conferenceInfoModel.subject
|
|
: entry.username != undefined
|
|
? entry.username
|
|
: entry.contactModel != undefined
|
|
? entry.contactModel.vcard.username
|
|
: UtilsCpp.getDisplayName(entry.sipAddress || entry.fullPeerAddress || entry.peerAddress || '')
|
|
: '')
|
|
signal avatarClicked(var mouse)
|
|
// ---------------------------------------------------------------------------
|
|
|
|
color: 'transparent' // No color by default.
|
|
height: ContactStyle.height
|
|
|
|
RowLayout {
|
|
anchors {
|
|
fill: parent
|
|
leftMargin: ContactStyle.leftMargin
|
|
rightMargin: ContactStyle.rightMargin
|
|
}
|
|
spacing: 0
|
|
|
|
Avatar {
|
|
id: avatar
|
|
|
|
Layout.preferredHeight: ContactStyle.contentHeight
|
|
Layout.preferredWidth: ContactStyle.contentHeight
|
|
|
|
//image: _contact && _contact.vcard.avatar
|
|
image: entry?(entry.avatar ? entry.avatar
|
|
: entry.contactModel ? entry.contactModel.vcard.avatar
|
|
: '')
|
|
:''
|
|
presenceLevel: entry?(entry.contactModel ? (entry.contactModel.presenceStatus >= 0 ? Presence.getPresenceLevel(entry.contactModel.presenceStatus) : -1)
|
|
: (entry.presenceStatus >= 0 ? Presence.getPresenceLevel(entry.presenceStatus) : -1)
|
|
)
|
|
:-1
|
|
|
|
//username: UtilsCpp.getDisplayName(entry.sipAddress || entry.peerAddress )
|
|
|
|
username : entry!=undefined
|
|
? entry.conferenceInfoModel
|
|
? UtilsCpp.getDisplayName(entry.conferenceInfoModel.organizer)
|
|
: entry.isOneToOne!=undefined && !entry.isOneToOne
|
|
? ''
|
|
: item.username
|
|
: item.username
|
|
|
|
visible:!groupChat.visible
|
|
Icon {
|
|
|
|
anchors.fill: parent
|
|
|
|
icon: ContactStyle.groupChat.icon
|
|
overwriteColor: ContactStyle.groupChat.avatarColor
|
|
iconSize: ContactStyle.contentHeight
|
|
visible: entry!=undefined && entry.isOneToOne!=undefined && !entry.isOneToOne
|
|
}
|
|
|
|
Icon{
|
|
anchors.top:parent.top
|
|
anchors.horizontalCenter: parent.right
|
|
visible: entry!=undefined && entry.haveEncryption != undefined && entry.haveEncryption
|
|
icon: entry?(entry.securityLevel === 2?'secure_level_1': entry.securityLevel===3? 'secure_level_2' : 'secure_level_unsafe'):'secure_level_unsafe'
|
|
iconSize: parent.height/2
|
|
}
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked: item.avatarClicked(mouse)
|
|
}
|
|
}
|
|
Icon {
|
|
id: groupChat
|
|
|
|
Layout.preferredHeight: ContactStyle.contentHeight
|
|
Layout.preferredWidth: ContactStyle.contentHeight
|
|
|
|
icon: ContactStyle.groupChat.icon
|
|
overwriteColor: ContactStyle.groupChat.color
|
|
iconSize: ContactStyle.contentHeight
|
|
visible: false //entry!=undefined && entry.isOneToOne!=undefined && !entry.isOneToOne
|
|
|
|
Icon{
|
|
anchors.right: parent.right
|
|
anchors.top:parent.top
|
|
anchors.topMargin: -5
|
|
visible: entry!=undefined && entry.haveEncryption != undefined && entry.haveEncryption
|
|
icon: entry?(entry.securityLevel === 2?'secure_level_1': entry.securityLevel===3? 'secure_level_2' : 'secure_level_unsafe'):'secure_level_unsafe'
|
|
iconSize:15
|
|
}
|
|
}
|
|
|
|
ContactDescription {
|
|
id: description
|
|
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: ContactStyle.spacing
|
|
|
|
sipAddress: (entry && item.showContactAddress
|
|
&& (item.showAuxData
|
|
? item.subject
|
|
? '- ' +item.subject +' -'
|
|
: ''
|
|
: (entry.isOneToOne == undefined || entry.isOneToOne) && (entry.haveEncryption == undefined || !entry.haveEncryption)
|
|
? entry.conferenceInfoModel
|
|
? entry.conferenceInfoModel.organizer
|
|
: entry.sipAddress || entry.fullPeerAddress || entry.peerAddress || ''
|
|
: '')
|
|
) || ''
|
|
participants: entry && item.showContactAddress && sipAddress == '' && entry.isOneToOne && entry.participants ? entry.participants.addressesToString : ''
|
|
username: item.username
|
|
}
|
|
|
|
ContactMessageCounter {
|
|
Layout.alignment: Qt.AlignTop
|
|
|
|
count: entry?Number(entry.unreadMessagesCount) + Number(entry.missedCallsCount):0
|
|
isComposing: Boolean(entry && entry.composers && entry.composers.length > 0)
|
|
|
|
visible: entry?(entry.unreadMessagesCount !== null || entry.missedCallsCount !== null) && item.displayUnreadMessageCount:false
|
|
}
|
|
}
|
|
}
|