linphone-desktop/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedMessage.qml

111 lines
3.8 KiB
QML

import QtQuick 2.7
import QtQuick.Layouts 1.3
import Common 1.0
import Linphone 1.0
import Linphone.Styles 1.0
import UtilsCpp 1.0
import Units 1.0
import 'qrc:/ui/scripts/Utils/utils.js' as Utils
// =============================================================================
Notification {
id: notification
icon: 'message_sign'
// ---------------------------------------------------------------------------
readonly property TimelineModel timelineModel: notificationData && notificationData.timelineModel
readonly property string peerAddress: notificationData && notificationData.peerAddress || ''
readonly property string localAddress: notificationData && notificationData.localAddress || ''
readonly property string fullPeerAddress: notificationData && notificationData.fullPeerAddress || ''
readonly property string fullLocalAddress: notificationData && notificationData.fullLocalAddress || ''
readonly property string messageId: notificationData && notificationData.messageId || ''
// ---------------------------------------------------------------------------
Loader {
active: timelineModel//Boolean(notification.peerAddress) && Boolean(notification.localAddress)
anchors {
fill: parent
leftMargin: NotificationReceivedMessageStyle.leftMargin
rightMargin: NotificationReceivedMessageStyle.rightMargin
bottomMargin: NotificationReceivedMessageStyle.bottomMargin
}
sourceComponent: ColumnLayout {
spacing: NotificationReceivedMessageStyle.spacing
Contact {
Layout.fillWidth: true
property ChatRoomModel chatRoomModel : notification.timelineModel.getChatRoomModel()
property var sipObserver: SipAddressesModel.getSipAddressObserver(notification.fullPeerAddress, notification.fullLocalAddress)
subtitle: chatRoomModel.isOneToOne
? UtilsCpp.toDisplayString(SipAddressesModel.cleanSipAddress(notification.fullPeerAddress), SettingsModel.sipDisplayMode)
: UtilsCpp.getDisplayName(notification.fullPeerAddress)
entry: chatRoomModel ? chatRoomModel : sipObserver
Component.onDestruction: sipObserver=null// Need to set it to null because of not calling destructor if not.
}
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
color: NotificationReceivedMessageStyle.messageContainer.colorModel.color
radius: NotificationReceivedMessageStyle.messageContainer.radius
TextEdit {
id: messageText
property font customFont : SettingsModel.textMessageFont
property string fullText: notification.notificationData.message
anchors {
fill: parent
margins: NotificationReceivedMessageStyle.messageContainer.margins
}
color: NotificationReceivedMessageStyle.messageContainer.text.colorModel.color
font {
italic: true
family: customFont.family
pointSize: Units.dp * (customFont.pointSize - 1)
}
verticalAlignment: Text.AlignVCenter
text: UtilsCpp.encodeTextToQmlRichFormat(metrics.elidedText)
textFormat: Text.RichText
wrapMode: Text.Wrap
TextMetrics {
id: metrics
font: messageText.font
text: messageText.fullText
elideWidth: messageText.width
elide: Qt.ElideRight
}
}
}
}
}
MouseArea {
anchors.fill: parent
onClicked: notification._close(function () {
AccountSettingsModel.setDefaultAccountFromSipAddress(notification.localAddress)
App.smartShowWindow(notification.notificationData.window)
notification.notificationData.window.setView('Conversations')
var chatroom = notification.timelineModel.getChatRoomModel()
console.debug("Load conversation from notification: "+chatroom)
if(!notification.timelineModel.selected)// Check to avoid reloading
notification.timelineModel.selected = true
if(chatroom && notification.messageId)
chatroom.displayMessageIdRequested(notification.messageId)
})
}
}