matrixion/resources/qml/delegates/Reply.qml

144 lines
4.4 KiB
QML
Raw Normal View History

// SPDX-FileCopyrightText: 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
2020-06-24 17:24:22 +03:00
import im.nheko 1.0
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 color userColor: "red"
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 bool isStateEvent
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
2022-03-21 02:48:27 +03:00
property int duration
property int encryptionError
property int relatedEventCacheBuster
2022-02-09 23:36:04 +03:00
property int maxWidth
2022-04-24 17:37:35 +03:00
property bool keepFullText: false
2020-10-08 22:11:21 +03:00
height: replyContainer.height
implicitHeight: replyContainer.height
implicitWidth: visible? colorLine.width+Math.max(replyContainer.implicitWidth,userName_.fullTextWidth) : 0 // visible? seems to be causing issues
2020-10-08 22:11:21 +03:00
2023-06-19 02:38:40 +03:00
NhekoCursorShape {
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
color: TimelineManager.userColor(userId, palette.base)
2020-10-08 22:11:21 +03:00
}
2022-03-24 03:35:42 +03:00
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)
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
spacing: 0
2020-10-08 22:11:21 +03:00
2021-08-25 17:10:55 +03:00
TapHandler {
acceptedButtons: Qt.RightButton
2022-03-24 03:35:42 +03:00
onSingleTapped: replyContextMenu.show(reply.child.copyText, reply.child.linkAt(eventPoint.position.x, eventPoint.position.y - userName_.implicitHeight), r.eventId)
2021-08-25 17:10:55 +03:00
gesturePolicy: TapHandler.ReleaseWithinBounds
acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
2021-08-25 17:10:55 +03:00
}
AbstractButton {
Layout.leftMargin: 4
Layout.fillWidth: true
contentItem: ElidedLabel {
id: userName_
fullText: userName
color: r.userColor
textFormat: Text.RichText
width: parent.width
elideWidth: width
2020-10-08 22:11:21 +03:00
}
onClicked: room.openUserProfile(userId)
2020-10-08 22:11:21 +03:00
}
MessageDelegate {
Layout.leftMargin: 4
Layout.preferredHeight: height
2020-10-08 22:11:21 +03:00
id: reply
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
2022-03-21 02:48:27 +03:00
duration: r.duration
originalWidth: r.originalWidth
isOnlyEmoji: r.isOnlyEmoji
isStateEvent: r.isStateEvent
userId: r.userId
userName: r.userName
2021-07-12 02:28:09 +03:00
roomTopic: r.roomTopic
roomName: r.roomName
callType: r.callType
relatedEventCacheBuster: r.relatedEventCacheBuster
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
Layout.fillWidth: true
2020-10-08 22:11:21 +03:00
isReply: true
2022-04-24 17:37:35 +03:00
keepFullText: r.keepFullText
2020-10-08 22:11:21 +03:00
}
2020-10-08 22:11:21 +03:00
}
Rectangle {
id: backgroundItem
z: -1
anchors.fill: replyContainer
property color userColor: TimelineManager.userColor(userId, palette.base)
property color bgColor: palette.base
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
}