Skip to content
Snippets Groups Projects
TimelineRow.qml 4.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • import "./delegates"
    import "./emoji"
    
    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
    
    
        Rectangle {
            color: (Settings.messageHoverHighlight && hoverHandler.containsMouse) ? colors.alternateBase : "transparent"
            anchors.fill: row
        }
    
    
        MouseArea {
    
            anchors.fill: parent
            propagateComposedEvents: true
    
            hoverEnabled: true
            acceptedButtons: Qt.AllButtons
            onClicked: {
                if (mouse.button === Qt.RightButton)
    
                messageContextMenu.show(model.id, model.type, model.isEncrypted, row);
                else
                event.accepted = false
    
    
            }
            onPressAndHold: {
                messageContextMenu.show(model.id, model.type, model.isEncrypted, row, mapToItem(timelineRoot, mouse.x, mouse.y));
            }
        }
    
        RowLayout {
            id: row
    
            anchors.leftMargin: avatarSize + 16
            anchors.left: parent.left
            anchors.right: parent.right
    
            Column {
                Layout.fillWidth: true
                Layout.alignment: Qt.AlignTop
                spacing: 4
    
                // fancy reply, if this is a reply
                Reply {
                    visible: model.replyTo
                    modelData: chat.model.getDump(model.replyTo, model.id)
    
                    userColor: TimelineManager.userColor(modelData.userId, 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
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
                width: 16
            }
    
            EmojiButton {
                id: reactButton
    
                visible: Settings.buttonsInTimeline
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
                width: 16
                hoverEnabled: true
                ToolTip.visible: hovered
                ToolTip.text: qsTr("React")
                emojiPicker: emojiPopup
                event_id: model.id
            }
    
            ImageButton {
                id: replyButton
    
                visible: Settings.buttonsInTimeline
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
                width: 16
                hoverEnabled: true
                image: ":/icons/icons/ui/mail-reply.png"
                ToolTip.visible: hovered
                ToolTip.text: qsTr("Reply")
                onClicked: chat.model.replyAction(model.id)
            }
    
            ImageButton {
                id: optionsButton
    
                visible: Settings.buttonsInTimeline
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                Layout.preferredHeight: 16
                width: 16
                hoverEnabled: true
                image: ":/icons/icons/ui/vertical-ellipsis.png"
                ToolTip.visible: hovered
                ToolTip.text: qsTr("Options")
                onClicked: messageContextMenu.show(model.id, model.type, model.isEncrypted, optionsButton)
            }
    
            Label {
                Layout.alignment: Qt.AlignRight | Qt.AlignTop
                text: model.timestamp.toLocaleTimeString("HH:mm")
                width: Math.max(implicitWidth, text.length * fontMetrics.maximumCharacterWidth)
                color: inactiveColors.text
                ToolTip.visible: ma.containsMouse
                ToolTip.text: Qt.formatDateTime(model.timestamp, Qt.DefaultLocaleLongDate)
    
                MouseArea {
                    id: ma
    
                    anchors.fill: parent
                    hoverEnabled: true
                    propagateComposedEvents: true
                }
    
            }
    
        }