aboutsummaryrefslogtreecommitdiff
path: root/qml/ChatlistItem.qml
diff options
context:
space:
mode:
Diffstat (limited to 'qml/ChatlistItem.qml')
-rw-r--r--qml/ChatlistItem.qml109
1 files changed, 109 insertions, 0 deletions
diff --git a/qml/ChatlistItem.qml b/qml/ChatlistItem.qml
new file mode 100644
index 0000000..284f9d2
--- /dev/null
+++ b/qml/ChatlistItem.qml
@@ -0,0 +1,109 @@
+import QtQuick 2.12
+import QtQuick.Controls 2.12
+import QtQuick.Layouts 1.12
+import QtQml.Models 2.1
+import org.kde.kirigami 2.13 as Kirigami
+
+import DeltaChat 1.0
+
+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
+ }
+ }
+ }
+}