linphone-desktop/linphone-app/ui/modules/Linphone/Chat/ChatReplyMessage.qml
Julien Wadel 682e5dc913 Primary color on links in chat.
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.
2023-04-07 17:08:57 +02:00

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
}
}
}
}