summary refs log tree commit diff
path: root/resources/qml/delegates/Reply.qml
blob: 64eb65a3b51983f1c55d1029a502e7a5431cbdd3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// SPDX-FileCopyrightText: Nheko Contributors
//
// 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
import im.nheko 1.0
import "../"

AbstractButton {
    id: r

    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
    property string roomTopic
    property string roomName
    property string callType
    property int duration
    property int encryptionError
    property int relatedEventCacheBuster
    property int maxWidth
    property bool keepFullText: false

    height: replyContainer.height
    implicitHeight: replyContainer.height
    implicitWidth: visible? colorLine.width+Math.max(replyContainer.implicitWidth,userName_.fullTextWidth) : 0 // visible? seems to be causing issues

    NhekoCursorShape {
        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)
    }

    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 {
        id: replyContainer

        anchors.left: colorLine.right
        width: parent.width - 4
        spacing: 0

        TapHandler {
            acceptedButtons: Qt.RightButton
            onSingleTapped: replyContextMenu.show(reply.child.copyText, reply.child.linkAt(eventPoint.position.x, eventPoint.position.y - userName_.implicitHeight), r.eventId)
            gesturePolicy: TapHandler.ReleaseWithinBounds
            acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
        }

        AbstractButton {
            Layout.leftMargin: 4
            Layout.fillWidth: true
            contentItem: ElidedLabel {
                id: userName_
                fullText: userName
                color: r.userColor
                textFormat: Text.RichText
                width: parent.width
                elideWidth: width
            }
            onClicked: room.openUserProfile(userId)
        }

        Rectangle {
            Layout.leftMargin: 4
            Layout.preferredHeight: 20
            Layout.fillWidth: true
            color: "green"
        }

    }

    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))
    }

}