2021-03-05 02:35:15 +03:00
// SPDX-FileCopyrightText: 2021 Nheko Contributors
2022-01-01 06:57:53 +03:00
// SPDX-FileCopyrightText: 2022 Nheko Contributors
2021-03-07 07:57:56 +03:00
//
2021-03-05 02:35:15 +03:00
// SPDX-License-Identifier: GPL-3.0-or-later
2021-09-18 01:21:14 +03:00
import Qt . labs . platform 1.1 as Platform
2021-02-14 03:28:28 +03:00
import QtQuick 2.12
2020-01-28 21:08:16 +03:00
import QtQuick . Controls 2.3
2021-01-12 17:03:39 +03:00
import QtQuick . Layouts 1.2
2021-08-04 03:27:50 +03:00
import QtQuick . Window 2.13
2020-06-24 17:24:22 +03:00
import im . nheko 1.0
2020-04-09 01:10:08 +03:00
Item {
2021-07-12 01:24:33 +03:00
id: r
2020-10-08 22:11:21 +03:00
property color userColor: "red"
2021-07-12 01:24:33 +03:00
property double proportionalHeight
property int type
property string typeString
property int originalWidth
property string blurhash
property string body
property string formattedBody
property string eventId
property string filename
property string filesize
property string url
property bool isOnlyEmoji
property string userId
property string userName
property string thumbnailUrl
2021-07-12 02:28:09 +03:00
property string roomTopic
property string roomName
property string callType
2021-08-07 23:51:09 +03:00
property int encryptionError
2021-07-20 15:09:19 +03:00
property int relatedEventCacheBuster
2020-10-08 22:11:21 +03:00
2022-02-03 22:26:20 +03:00
Layout.preferredHeight: replyContainer . height
2020-10-08 22:11:21 +03:00
height: replyContainer . height
2021-02-14 03:28:28 +03:00
CursorShape {
2020-10-08 22:11:21 +03:00
anchors.fill: parent
cursorShape: Qt . PointingHandCursor
}
Rectangle {
id: colorLine
anchors.top: replyContainer . top
anchors.bottom: replyContainer . bottom
width: 4
2021-11-24 06:09:22 +03:00
color: TimelineManager . userColor ( userId , Nheko . colors . base )
2020-10-08 22:11:21 +03:00
}
2022-02-03 22:26:20 +03:00
ColumnLayout {
2020-10-08 22:11:21 +03:00
id: replyContainer
anchors.left: colorLine . right
2022-02-05 23:53:21 +03:00
width: parent . width - 4
2022-02-03 22:26:20 +03:00
spacing: 0
2020-10-08 22:11:21 +03:00
2021-08-25 17:10:55 +03:00
TapHandler {
acceptedButtons: Qt . LeftButton
2021-12-12 01:56:24 +03:00
onSingleTapped: {
let link = reply . child . linkAt ( eventPoint . position . x , eventPoint . position . y - userName_ . implicitHeight ) ;
if ( link ) {
Nheko . openLink ( link )
} else {
room . showEvent ( r . eventId )
}
}
2021-08-25 17:10:55 +03:00
gesturePolicy: TapHandler . ReleaseWithinBounds
}
TapHandler {
acceptedButtons: Qt . RightButton
2021-09-18 01:21:14 +03:00
onLongPressed: replyContextMenu . show ( reply . child . copyText , reply . child . linkAt ( eventPoint . position . x , eventPoint . position . y - userName_ . implicitHeight ) )
onSingleTapped: replyContextMenu . show ( reply . child . copyText , reply . child . linkAt ( eventPoint . position . x , eventPoint . position . y - userName_ . implicitHeight ) )
2021-08-25 17:10:55 +03:00
gesturePolicy: TapHandler . ReleaseWithinBounds
}
2020-10-08 22:11:21 +03:00
Text {
2022-02-03 22:26:20 +03:00
Layout.leftMargin: 4
2021-07-12 01:24:33 +03:00
id: userName_
2020-10-08 22:11:21 +03:00
2021-07-12 01:24:33 +03:00
text: TimelineManager . escapeEmoji ( userName )
color: r . userColor
2020-10-08 22:11:21 +03:00
textFormat: Text . RichText
2021-02-14 03:28:28 +03:00
TapHandler {
2021-12-11 08:10:41 +03:00
onSingleTapped: room . openUserProfile ( userId )
2021-04-11 23:24:39 +03:00
gesturePolicy: TapHandler . ReleaseWithinBounds
2020-10-08 22:11:21 +03:00
}
2021-09-18 01:21:14 +03:00
2020-10-08 22:11:21 +03:00
}
MessageDelegate {
2022-02-03 22:26:20 +03:00
Layout.leftMargin: 4
2020-10-08 22:11:21 +03:00
id: reply
2021-07-12 01:24:33 +03:00
blurhash: r . blurhash
body: r . body
formattedBody: r . formattedBody
eventId: r . eventId
filename: r . filename
filesize: r . filesize
proportionalHeight: r . proportionalHeight
type: r . type
typeString: r . typeString ? ? ""
url: r . url
thumbnailUrl: r . thumbnailUrl
originalWidth: r . originalWidth
isOnlyEmoji: r . isOnlyEmoji
userId: r . userId
userName: r . userName
2021-07-12 02:28:09 +03:00
roomTopic: r . roomTopic
roomName: r . roomName
callType: r . callType
2021-07-20 15:09:19 +03:00
relatedEventCacheBuster: r . relatedEventCacheBuster
2021-08-07 23:51:09 +03:00
encryptionError: r . encryptionError
2021-08-25 17:10:55 +03:00
// This is disabled so that left clicking the reply goes to its location
2021-07-03 23:45:36 +03:00
enabled: false
2022-02-03 22:26:20 +03:00
Layout.fillWidth: true
2020-10-08 22:11:21 +03:00
isReply: true
}
2021-09-18 01:21:14 +03:00
2020-10-08 22:11:21 +03:00
}
Rectangle {
id: backgroundItem
z: - 1
2022-02-03 22:26:20 +03:00
anchors.fill: replyContainer
2022-02-05 01:12:30 +03:00
property color userColor: TimelineManager . userColor ( userId , Nheko . colors . base )
property color bgColor: Nheko . colors . base
color: Qt . rgba ( userColor . r * 0.1 + bgColor . r * 0.9 , userColor . g * 0.1 + bgColor . g * 0.9 , userColor . b * 0.1 + bgColor . b * 0.9 , 1 ) // alpha makes this mix with the bubble color
2020-10-08 22:11:21 +03:00
}
2020-01-28 21:08:16 +03:00
}