Skip to content
Snippets Groups Projects
Reply.qml 4.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    
    // SPDX-FileCopyrightText: 2022 Nheko Contributors
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    import Qt.labs.platform 1.1 as Platform
    
    import QtQuick 2.12
    
    import QtQuick.Controls 2.3
    
    import QtQuick.Layouts 1.2
    
    import QtQuick.Window 2.13
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    import im.nheko 1.0
    
    
    
        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 string userId
        property string userName
        property string thumbnailUrl
    
        property string roomTopic
        property string roomName
        property string callType
    
        property int encryptionError
    
        property int relatedEventCacheBuster
    
        Layout.preferredHeight: replyContainer.height
    
        height: replyContainer.height
    
    
        CursorShape {
    
            anchors.fill: parent
            cursorShape: Qt.PointingHandCursor
        }
    
        Rectangle {
            id: colorLine
    
            anchors.top: replyContainer.top
            anchors.bottom: replyContainer.bottom
            width: 4
    
            color: TimelineManager.userColor(userId, Nheko.colors.base)
    
            id: replyContainer
    
            anchors.left: colorLine.right
    
    Malte E's avatar
    Malte E committed
            width: parent.width - 4
    
            TapHandler {
                acceptedButtons: Qt.LeftButton
    
                onSingleTapped: {
                    let link = reply.child.linkAt(eventPoint.position.x, eventPoint.position.y - userName_.implicitHeight);
                    if (link) {
                        Nheko.openLink(link)
                    } else {
                        room.showEvent(r.eventId)
                    }
                }
    
                gesturePolicy: TapHandler.ReleaseWithinBounds
            }
    
            TapHandler {
                acceptedButtons: Qt.RightButton
    
                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))
    
                gesturePolicy: TapHandler.ReleaseWithinBounds
            }
    
    
            Text {
    
                id: userName_
    
                text: TimelineManager.escapeEmoji(userName)
                color: r.userColor
    
                textFormat: Text.RichText
    
    
                TapHandler {
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    onSingleTapped: room.openUserProfile(userId)
    
                    gesturePolicy: TapHandler.ReleaseWithinBounds
    
            }
    
            MessageDelegate {
    
                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
                originalWidth: r.originalWidth
                isOnlyEmoji: r.isOnlyEmoji
                userId: r.userId
                userName: r.userName
    
                roomTopic: r.roomTopic
                roomName: r.roomName
                callType: r.callType
    
                relatedEventCacheBuster: r.relatedEventCacheBuster
    
                encryptionError: r.encryptionError
    
                // This is disabled so that left clicking the reply goes to its location
    
                enabled: false
    
                isReply: true
            }
    
        }
    
        Rectangle {
            id: backgroundItem
    
            z: -1
    
            anchors.fill: replyContainer
    
    Malte E's avatar
    Malte E committed
            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