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
|
2022-02-07 23:00:51 +03:00
|
|
|
property bool isStateEvent
|
2021-07-12 01:24:33 +03:00
|
|
|
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
|
2022-02-09 23:36:04 +03:00
|
|
|
property int maxWidth
|
2020-10-08 22:11:21 +03:00
|
|
|
|
|
|
|
height: replyContainer.height
|
2022-02-12 00:02:30 +03:00
|
|
|
implicitHeight: replyContainer.height
|
2022-02-09 19:53:02 +03:00
|
|
|
implicitWidth: visible? colorLine.width+replyContainer.implicitWidth : 0
|
2020-10-08 22:11:21 +03:00
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2022-02-24 05:16:39 +03:00
|
|
|
AbstractButton {
|
2021-07-12 01:24:33 +03:00
|
|
|
id: userName_
|
2022-02-24 05:16:39 +03:00
|
|
|
Layout.leftMargin: 4
|
|
|
|
contentItem: Text {
|
2020-10-08 22:11:21 +03:00
|
|
|
|
2022-02-24 05:16:39 +03:00
|
|
|
text: TimelineManager.escapeEmoji(userName)
|
|
|
|
color: r.userColor
|
|
|
|
textFormat: Text.RichText
|
2020-10-08 22:11:21 +03:00
|
|
|
}
|
2022-02-24 05:16:39 +03:00
|
|
|
onClicked: room.openUserProfile(userId)
|
2020-10-08 22:11:21 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
MessageDelegate {
|
2022-02-03 22:26:20 +03:00
|
|
|
Layout.leftMargin: 4
|
2022-02-12 00:02:30 +03:00
|
|
|
Layout.preferredHeight: height
|
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
|
2022-02-07 23:00:51 +03:00
|
|
|
isStateEvent: r.isStateEvent
|
2021-07-12 01:24:33 +03:00
|
|
|
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
|
2022-02-13 15:12:51 +03:00
|
|
|
color: Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.1))
|
2020-10-08 22:11:21 +03:00
|
|
|
}
|
|
|
|
|
2020-01-28 21:08:16 +03:00
|
|
|
}
|