linphone-desktop/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.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

91 lines
2.7 KiB
QML

import QtQuick 2.7
import QtQuick.Layouts 1.3
import Common 1.0
import Linphone 1.0
import Linphone.Styles 1.0
// =============================================================================
RowLayout {
id:mainRow
Layout.fillWidth: true
property alias isHovering: message.isHovering
property alias isTopGrouped: message.isTopGrouped
property alias isBottomGrouped: message.isBottomGrouped
signal copyAllDone()
signal copySelectionDone()
signal replyClicked()
signal forwardClicked()
signal goToMessage(ChatMessageModel message)
signal conferenceIcsCopied()
signal addContactClicked(string contactAddress)
signal viewContactClicked(string contactAddress)
implicitHeight: message.height
spacing: 0
Item {
Layout.alignment: Qt.AlignTop
Layout.preferredHeight: ChatStyle.entry.lineHeight
Layout.preferredWidth: ChatStyle.entry.metaWidth
Avatar {
id:avatar
anchors.centerIn: parent
height: ChatStyle.entry.message.incoming.avatarSize
image: $chatEntry.contactModel? $chatEntry.contactModel.vcard.avatar : '' //chat.sipAddressObserver.contact ? chat.sipAddressObserver.contact.vcard.avatar : ''
username: $chatEntry.fromDisplayName
width: ChatStyle.entry.message.incoming.avatarSize
// The avatar is only visible for the first message of a incoming messages sequence.
visible: {
if (index <= 0) {
return true // 1. First message, so visible.
}
var previousEntry = proxyModel.getAt(index - 1)
return !$chatEntry.isOutgoing && (// Only outgoing
!previousEntry //No previous entry
|| previousEntry.type != ChatRoomModel.MessageEntry // Previous entry is a message
|| previousEntry.fromSipAddress != $chatEntry.fromSipAddress // Different user
|| (new Date(previousEntry.timestamp)).setHours(0, 0, 0, 0) != (new Date($chatEntry.timestamp)).setHours(0, 0, 0, 0) // Same day == section
)
}
TooltipArea{
delay:0
text:avatar.username+'\n'+$chatEntry.fromSipAddress
maxWidth: mainRow.width
isClickable: true
onClicked: {
window.mainSearchBar.text = $chatEntry.fromSipAddress
}
}
}
}
Message {
id: message
onCopyAllDone: mainRow.copyAllDone()
onCopySelectionDone: mainRow.copySelectionDone()
onReplyClicked: mainRow.replyClicked()
onForwardClicked: mainRow.forwardClicked()
onGoToMessage: mainRow.goToMessage(message)
onConferenceIcsCopied: mainRow.conferenceIcsCopied()
onAddContactClicked: mainRow.addContactClicked(contactAddress)
onViewContactClicked: mainRow.viewContactClicked(contactAddress)
Layout.fillWidth: true
Layout.rightMargin: 10
// Not a style. Workaround to avoid a 0 width.
// Arbitrary value.
Layout.minimumWidth: 1
backgroundColorModel: ChatStyle.entry.message.incoming.backgroundColor
}
}