aboutsummaryrefslogtreecommitdiff
path: root/qml/ChatlistItem.qml
blob: d087f4b0974387a53b11769d36649214141ab17e (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
118
119
120
121
122
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
            }

        }

        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" badge
        Rectangle {
            visible: root.isPinned
            color: Kirigami.Theme.alternateBackgroundColor
            width: Kirigami.Units.gridUnit
            height: Kirigami.Units.gridUnit
            radius: 0.25 * height

            Kirigami.Icon {
                source: "pin"
                height: Kirigami.Units.gridUnit
                width: Kirigami.Units.gridUnit
            }

        }

    }

}