mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-19 20:48:09 +00:00
Allow smallbuttons to use emojis. Insert text in text area in chats. Ensure to send plain text message. Use custom text font for text edit. Emoji picker and display it aside of files preview with a splitter. Fix file preview layout in replies. Change double click to simple click on avatar for copying address into the smartsearchbar. Add an option to change emojis font. Update chat actions colors.
139 lines
4.8 KiB
QML
139 lines
4.8 KiB
QML
import QtQuick 2.7
|
|
import QtQuick.Layouts 1.3
|
|
|
|
import Clipboard 1.0
|
|
import Common 1.0
|
|
import Linphone 1.0
|
|
|
|
import Common.Styles 1.0
|
|
import Linphone.Styles 1.0
|
|
import TextToSpeech 1.0
|
|
import Utils 1.0
|
|
import Units 1.0
|
|
import UtilsCpp 1.0
|
|
import LinphoneEnums 1.0
|
|
|
|
import ColorsList 1.0
|
|
|
|
import 'Message.js' as Logic
|
|
|
|
// =============================================================================
|
|
|
|
Item {
|
|
id: mainItem
|
|
property ChatMessageModel chatMessageModel
|
|
property ChatMessageModel mainChatMessageModel
|
|
property int availableWidth : parent.width
|
|
property int headerHeight: ChatReplyMessageStyle.header.replyIcon.iconSize
|
|
//property int replyHeight: (chatMessageModel ? replyMessage.height + usernameReplied.implicitHeight + ChatStyle.entry.message.padding * 3 + 3 : 0)
|
|
//property int fitWidth: visible ? Math.max(usernameReplied.implicitWidth + replyMessage.fitWidth , headerArea.fitWidth) + 7 + ChatReplyMessageStyle.padding * 2 : 0
|
|
property int replyHeight: (chatMessageModel ? chatContent.height + usernameReplied.implicitHeight + ChatStyle.entry.message.padding * 3 + 3 : 0)
|
|
property int fitWidth: visible ? Math.max(usernameReplied.implicitWidth, chatContent.bestWidth +ChatReplyMessageStyle.padding*2, headerArea.fitWidth) + 7 + ChatReplyMessageStyle.padding * 2 : 0
|
|
property int fitHeight: visible ? headerHeight + replyHeight : 0
|
|
|
|
property font customFont : SettingsModel.textMessageFont
|
|
|
|
visible: mainChatMessageModel && mainChatMessageModel.isReply
|
|
width: availableWidth < 0 || availableWidth > fitWidth ? fitWidth : availableWidth
|
|
height: fitHeight
|
|
onMainChatMessageModelChanged: if( mainChatMessageModel && mainChatMessageModel.replyChatMessageModel) chatMessageModel = mainChatMessageModel.replyChatMessageModel
|
|
|
|
signal goToMessage(ChatMessageModel message)
|
|
|
|
ColumnLayout{
|
|
anchors.fill: parent
|
|
spacing: 5
|
|
Row{
|
|
id: headerArea
|
|
property int fitWidth: icon.width + headerText.implicitWidth
|
|
Layout.preferredHeight: headerHeight
|
|
Layout.topMargin: 5
|
|
Icon{
|
|
id: icon
|
|
icon: ChatReplyMessageStyle.header.replyIcon.icon
|
|
iconSize: ChatReplyMessageStyle.header.replyIcon.iconSize
|
|
height: iconSize
|
|
overwriteColor: ChatReplyMessageStyle.header.colorModel.color
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked: mainItem.goToMessage(mainItem.chatMessageModel)
|
|
}
|
|
}
|
|
Text{
|
|
id: headerText
|
|
height: parent.height
|
|
verticalAlignment: Qt.AlignVCenter
|
|
//: 'Reply' : Header on a message that contains a reply.
|
|
text: qsTr('headerReply')
|
|
+ (chatMessageModel || !mainChatMessageModel? '' : ' - ' + mainChatMessageModel.fromDisplayNameReplyMessage)
|
|
font.family: mainItem.customFont.family
|
|
font.pointSize: Units.dp * (mainItem.customFont.pointSize + ChatReplyMessageStyle.header.pointSizeOffset)
|
|
color: ChatReplyMessageStyle.header.colorModel.color
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked: mainItem.goToMessage(mainItem.chatMessageModel)
|
|
}
|
|
}
|
|
}
|
|
Rectangle{
|
|
id: replyArea
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.bottomMargin: ChatStyle.entry.message.padding
|
|
Layout.leftMargin: 10
|
|
Layout.rightMargin: 10
|
|
clip: true
|
|
Rectangle{
|
|
id: colorBar
|
|
anchors.left: parent.left
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
width: 15
|
|
radius: 8
|
|
color: chatMessageModel && chatMessageModel.isOutgoing ? ChatReplyMessageStyle.replyArea.outgoingMarkColor.color : ChatReplyMessageStyle.replyArea.incomingMarkColor.color
|
|
Rectangle{
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
width: 5
|
|
color: ChatReplyMessageStyle.replyArea.backgroundColor.color
|
|
}
|
|
}
|
|
|
|
radius: 8
|
|
color: ChatReplyMessageStyle.replyArea.backgroundColor.color
|
|
visible: chatMessageModel != undefined
|
|
Text{
|
|
id: usernameReplied
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.topMargin: 3
|
|
|
|
leftPadding: 2 * ChatStyle.entry.message.padding
|
|
|
|
text: mainChatMessageModel && mainChatMessageModel.fromDisplayNameReplyMessage
|
|
font.family: mainItem.customFont.family
|
|
font.pointSize: Units.dp * (mainItem.customFont.pointSize + ChatReplyMessageStyle.replyArea.usernamePointSizeOffset)
|
|
font.weight: Font.Bold
|
|
|
|
color: ChatReplyMessageStyle.replyArea.foregroundColor.color
|
|
}
|
|
ChatContent{
|
|
id: chatContent
|
|
anchors.top: usernameReplied.bottom
|
|
chatMessageModel: mainItem.chatMessageModel
|
|
availableWidth: mainItem.availableWidth
|
|
anchors.left: colorBar.right
|
|
anchors.right: parent.right
|
|
anchors.topMargin: 3
|
|
useTextColor: true
|
|
textColor: ChatReplyMessageStyle.replyArea.foregroundColor.color
|
|
|
|
fileBackgroundRadius:5
|
|
fileBackgroundColor: ChatReplyMessageStyle.replyArea.fileBackgroundColor.color
|
|
fileBorderWidth:1
|
|
}
|
|
}
|
|
}
|
|
}
|