Skip to content
Snippets Groups Projects
TimelineRow.qml 3.75 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    import "./delegates"
    import "./emoji"
    
    import QtQuick 2.12
    
    import QtQuick.Controls 2.3
    
    import QtQuick.Layouts 1.2
    import QtQuick.Window 2.2
    
        anchors.left: parent.left
        anchors.right: parent.right
        height: row.height
    
    
            color: (Settings.messageHoverHighlight && hoverHandler.hovered) ? Nheko.colors.alternateBase : "transparent"
    
        HoverHandler {
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
    
            acceptedDevices: PointerDevice.GenericPointer
        }
    
        TapHandler {
            acceptedButtons: Qt.RightButton
    
            onSingleTapped: messageContextMenu.show(model.id, model.type, model.isSender, model.isEncrypted, model.isEditable, contentItem.child.hoveredLink, contentItem.child.copyText)
    
            gesturePolicy: TapHandler.ReleaseWithinBounds
    
            onLongPressed: messageContextMenu.show(model.id, model.type, model.isSender, model.isEncrypted, model.isEditable, contentItem.child.hoveredLink, contentItem.child.copyText)
    
            onDoubleTapped: chat.model.reply = model.id
    
            gesturePolicy: TapHandler.ReleaseWithinBounds
    
        }
    
        RowLayout {
            id: row
    
    
            anchors.rightMargin: 1
    
            anchors.leftMargin: Nheko.avatarSize + 16
    
            anchors.left: parent.left
            anchors.right: parent.right
    
            Column {
                Layout.fillWidth: true
                Layout.alignment: Qt.AlignTop
                spacing: 4
    
                Layout.topMargin: 1
                Layout.bottomMargin: 1
    
    
                // fancy reply, if this is a reply
                Reply {
                    visible: model.replyTo
                    modelData: chat.model.getDump(model.replyTo, model.id)
    
                    userColor: TimelineManager.userColor(modelData.userId, Nheko.colors.base)
    
                }
    
                // actual message content
                MessageDelegate {
                    id: contentItem
    
                    width: parent.width
                    modelData: model
                }
    
                Reactions {
                    id: reactionRow
    
                    reactions: model.reactions
                    eventId: model.id
                }
    
            }
    
            StatusIndicator {
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
                width: 16
            }
    
            EncryptionIndicator {
                visible: model.isRoomEncrypted
                encrypted: model.isEncrypted
    
                trust: model.trustlevel
    
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
    
                Layout.preferredWidth: 16
    
                visible: model.isEdited || model.id == chat.model.edit
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
    
                Layout.preferredWidth: 16
                height: 16
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                width: 16
    
                sourceSize.width: 16
                sourceSize.height: 16
    
                source: "image://colorimage/:/icons/icons/ui/edit.png?" + ((model.id == chat.model.edit) ? Nheko.colors.highlight : Nheko.colors.buttonText)
    
                ToolTip.visible: editHovered.hovered
                ToolTip.text: qsTr("Edited")
    
                HoverHandler {
                    id: editHovered
    
    
            }
    
            Label {
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
    
                text: model.timestamp.toLocaleTimeString(Locale.ShortFormat)
    
                width: Math.max(implicitWidth, text.length * fontMetrics.maximumCharacterWidth)
    
                color: Nheko.inactiveColors.text
    
                ToolTip.visible: ma.hovered
    
                ToolTip.text: Qt.formatDateTime(model.timestamp, Qt.DefaultLocaleLongDate)
    
    
                HoverHandler {