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