matrixion/qml/delegates/Reply.qml

136 lines
4.4 KiB
QML
Raw Normal View History

2021-03-05 02:35:15 +03:00
// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
2021-03-05 02:35:15 +03:00
// SPDX-License-Identifier: GPL-3.0-or-later
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
import QtQuick.Layouts 1.2
import QtQuick.Window 2.13
import im.nheko
import "../"
2020-06-24 17:24:22 +03:00
2022-03-24 03:35:42 +03:00
AbstractButton {
id: r
2020-10-08 22:11:21 +03:00
property string blurhash
property string body
2022-04-16 03:13:01 +03:00
property string callType
property int duration
property int encryptionError
property string eventId
property string filename
property string filesize
2022-04-16 03:13:01 +03:00
property string formattedBody
property bool isOnlyEmoji
property bool isStateEvent
2022-04-16 03:13:01 +03:00
property int maxWidth
property int originalWidth
property double proportionalHeight
property int relatedEventCacheBuster
property string roomName
property string roomTopic
property string thumbnailUrl
property int type
property string typeString
property string url
property color userColor: "red"
property string userId
property string userName
2020-10-08 22:11:21 +03:00
height: replyContainer.height
implicitHeight: replyContainer.height
2022-04-16 03:13:01 +03:00
implicitWidth: visible ? colorLine.width + Math.max(replyContainer.implicitWidth, userName_.fullTextWidth) : 0 // visible? seems to be causing issues
onClicked: {
let link = reply.child.linkAt != undefined && reply.child.linkAt(pressX - colorLine.width, pressY - userName_.implicitHeight);
if (link) {
Nheko.openLink(link);
} else {
room.showEvent(r.eventId);
}
}
onPressAndHold: replyContextMenu.show(reply.child.copyText, reply.child.linkAt(pressX - colorLine.width, pressY - userName_.implicitHeight), r.eventId)
2020-10-08 22:11:21 +03:00
NhekoCursorShape {
2020-10-08 22:11:21 +03:00
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
}
Rectangle {
id: colorLine
anchors.bottom: replyContainer.bottom
2022-04-16 03:13:01 +03:00
anchors.top: replyContainer.top
2022-04-11 05:18:16 +03:00
color: TimelineManager.userColor(userId, timelineRoot.palette.base)
2022-04-16 03:13:01 +03:00
width: 4
2020-10-08 22:11:21 +03:00
}
ColumnLayout {
2020-10-08 22:11:21 +03:00
id: replyContainer
anchors.left: colorLine.right
spacing: 0
2022-04-16 03:13:01 +03:00
width: parent.width - 4
2020-10-08 22:11:21 +03:00
2021-08-25 17:10:55 +03:00
TapHandler {
acceptedButtons: Qt.RightButton
acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
2022-04-16 03:13:01 +03:00
gesturePolicy: TapHandler.ReleaseWithinBounds
2021-08-25 17:10:55 +03:00
2022-04-16 03:13:01 +03:00
onSingleTapped: replyContextMenu.show(reply.child.copyText, reply.child.linkAt(eventPoint.position.x, eventPoint.position.y - userName_.implicitHeight), r.eventId)
}
AbstractButton {
Layout.fillWidth: true
2022-04-16 03:13:01 +03:00
Layout.leftMargin: 4
contentItem: ElidedLabel {
id: userName_
color: r.userColor
2022-04-16 03:13:01 +03:00
elideWidth: width
fullText: userName
textFormat: Text.RichText
width: parent.width
2020-10-08 22:11:21 +03:00
}
2022-04-16 03:13:01 +03:00
onClicked: room.openUserProfile(userId)
2020-10-08 22:11:21 +03:00
}
MessageDelegate {
2022-04-16 03:13:01 +03:00
id: reply
Layout.fillWidth: true
Layout.leftMargin: 4
Layout.preferredHeight: height
blurhash: r.blurhash
body: r.body
2022-04-16 03:13:01 +03:00
callType: r.callType
duration: r.duration
// This is disabled so that left clicking the reply goes to its location
enabled: false
encryptionError: r.encryptionError
eventId: r.eventId
filename: r.filename
filesize: r.filesize
2022-04-16 03:13:01 +03:00
formattedBody: r.formattedBody
isOnlyEmoji: r.isOnlyEmoji
isReply: true
isStateEvent: r.isStateEvent
originalWidth: r.originalWidth
proportionalHeight: r.proportionalHeight
2022-04-16 03:13:01 +03:00
relatedEventCacheBuster: r.relatedEventCacheBuster
roomName: r.roomName
roomTopic: r.roomTopic
thumbnailUrl: r.thumbnailUrl
type: r.type
typeString: r.typeString ?? ""
url: r.url
userId: r.userId
userName: r.userName
2020-10-08 22:11:21 +03:00
}
}
Rectangle {
id: backgroundItem
2022-04-11 05:18:16 +03:00
property color bgColor: timelineRoot.palette.base
2022-04-16 03:13:01 +03:00
property color userColor: TimelineManager.userColor(userId, timelineRoot.palette.base)
anchors.fill: replyContainer
color: Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.1))
2022-04-16 03:13:01 +03:00
z: -1
2020-10-08 22:11:21 +03:00
}
2020-01-28 21:08:16 +03:00
}