aboutsummaryrefslogtreecommitdiff
path: root/qml/ChatlistItem.qml
blob: aa05d422f79d7dd96e303a5e5f71117fc4f53aec (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
import DeltaChat 1.0
import QtQml.Models 2.1
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import org.kde.kirigami 2.13 as Kirigami

Kirigami.AbstractListItem {
    id: root

    property DcContext context
    property int chatId
    property string chatName
    property string avatarSource
    property string username
    property int freshMsgCnt
    property bool isContactRequest
    property bool isPinned

    RowLayout {
        Kirigami.Avatar {
            source: root.avatarSource
            name: root.chatName
            color: root.context.getChat(root.chatId).getColor()

            MouseArea {
                anchors.fill: parent
                acceptedButtons: Qt.RightButton
                onClicked: {
                    if (mouse.button === Qt.RightButton)
                        contextMenu.popup();

                }

                Menu {
                    id: contextMenu

                    Action {
                        icon.name: "pin"
                        text: "Pin chat"
                        onTriggered: root.context.setChatVisibility(root.chatId, 2)
                    }

                    Action {
                        text: "Unpin chat"
                        onTriggered: root.context.setChatVisibility(root.chatId, 0)
                    }

                    Action {
                        text: "Archive chat"
                        onTriggered: root.context.setChatVisibility(root.chatId, 1)
                    }

                    Action {
                        text: "Unarchive chat"
                        onTriggered: root.context.setChatVisibility(root.chatId, 0)
                    }

                    Action {
                        icon.name: "delete"
                        text: "Delete chat"
                        onTriggered: root.context.deleteChat(root.chatId)
                    }

                }

            }

        }

        ColumnLayout {
            Layout.fillWidth: true

            Label {
                text: root.context.getChat(root.chatId).getName()
                font.weight: Font.Bold
                Layout.fillWidth: true
            }

            Label {
                text: root.username
                font: Kirigami.Theme.smallFont
                Layout.fillWidth: true
            }

        }

        // Contact request / new messages count badge
        Label {
            text: root.isContactRequest ? "NEW" : root.freshMsgCnt
            visible: root.freshMsgCnt > 0 || root.isContactRequest
            // Align label in the center of a badge.
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
            // Make sure badge is not too narrow.
            Layout.minimumWidth: height

            background: Rectangle {
                color: Kirigami.Theme.alternateBackgroundColor
                radius: 0.25 * height
            }

        }

        // Pinned message badge
        Label {
            visible: root.isPinned
            text: "📌"
            font.pixelSize: 20
            rightPadding: 15
            bottomPadding: 15
        }

    }

}