Warning, /plasma-mobile/raven/src/contents/ui/MailDelegate.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0002 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004
0005 import QtQuick 2.15
0006 import QtQuick.Controls 2.15 as QQC2
0007 import QtQuick.Layouts 1.15
0008
0009 import org.kde.kirigami 2.19 as Kirigami
0010
0011 Kirigami.AbstractListItem {
0012 id: root
0013
0014 property bool showSeparator: false
0015
0016 property string datetime
0017 property string author
0018 property string title
0019 property string contentPreview
0020
0021 property bool isRead
0022
0023 leftPadding: Kirigami.Units.gridUnit
0024 rightPadding: Kirigami.Units.gridUnit
0025 topPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0026 bottomPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0027
0028 hoverEnabled: true
0029
0030 signal openMailRequested()
0031 signal starMailRequested()
0032 signal contextMenuRequested()
0033
0034 property bool showSelected: (mouseArea.pressed || (root.highlighted && applicationWindow().isWidescreen))
0035
0036 background: Rectangle {
0037 color: Qt.rgba(Kirigami.Theme.highlightColor.r, Kirigami.Theme.highlightColor.g, Kirigami.Theme.highlightColor.b, root.showSelected ? 0.5 : hoverHandler.hovered ? 0.2 : 0)
0038
0039 // indicator rectangle
0040 Rectangle {
0041 anchors.left: parent.left
0042 anchors.top: parent.top
0043 anchors.topMargin: 1
0044 anchors.bottom: parent.bottom
0045 anchors.bottomMargin: 1
0046
0047 width: 4
0048 visible: !root.isRead
0049 color: Kirigami.Theme.highlightColor
0050 }
0051
0052 HoverHandler {
0053 id: hoverHandler
0054 // disable hover input on mobile because touchscreens trigger hover feedback and do not "unhover" in Qt
0055 enabled: !Kirigami.Settings.isMobile
0056 }
0057
0058 Kirigami.Separator {
0059 anchors.bottom: parent.bottom
0060 anchors.left: parent.left
0061 anchors.right: parent.right
0062 anchors.leftMargin: root.leftPadding
0063 anchors.rightMargin: root.rightPadding
0064 visible: root.showSeparator && !root.showSelected
0065 opacity: 0.5
0066 }
0067 }
0068
0069 onClicked: root.openMailRequested()
0070
0071 Item {
0072 id: item
0073 implicitHeight: rowLayout.implicitHeight
0074
0075 RowLayout {
0076 id: rowLayout
0077 anchors.top: parent.top
0078 anchors.left: parent.left
0079 anchors.right: parent.right
0080
0081 Kirigami.Avatar {
0082 // Euristic to extract name from "Name <email>" pattern
0083 name: author.replace(/<.*>/, '').replace(/\(.*\)/, '')
0084 // Extract and use email address as unique identifier for image provider
0085 source: 'image://contact/' + new RegExp("<(.*)>").exec(author)[1] ?? ''
0086 Layout.rightMargin: Kirigami.Units.largeSpacing
0087 sourceSize.width: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing * 2
0088 sourceSize.height: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing * 2
0089 Layout.preferredWidth: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing * 2
0090 Layout.preferredHeight: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing * 2
0091 }
0092
0093 ColumnLayout {
0094 Layout.fillWidth: true
0095 spacing: Kirigami.Units.smallSpacing
0096
0097 RowLayout {
0098 Layout.fillWidth: true
0099 QQC2.Label {
0100 Layout.fillWidth: true
0101 text: root.author
0102 elide: Text.ElideRight
0103 font.weight: root.isRead ? Font.Normal : Font.Bold
0104 }
0105
0106 QQC2.Label {
0107 color: Kirigami.Theme.disabledTextColor
0108 text: root.datetime
0109 }
0110 }
0111 QQC2.Label {
0112 Layout.fillWidth: true
0113 text: root.title
0114 elide: Text.ElideRight
0115 font.weight: root.isRead ? Font.Normal : Font.Bold
0116 }
0117 QQC2.Label {
0118 Layout.fillWidth: true
0119 text: root.contentPreview
0120 elide: Text.ElideRight
0121 color: Kirigami.Theme.disabledTextColor
0122 }
0123 }
0124 }
0125
0126 MouseArea {
0127 id: mouseArea
0128 anchors.fill: parent
0129 acceptedButtons: Qt.LeftButton | Qt.RightButton
0130
0131 onClicked: {
0132 if (mouse.button === Qt.RightButton) {
0133 root.contextMenuRequested();
0134 } else if (mouse.button === Qt.LeftButton) {
0135 root.clicked();
0136 }
0137 }
0138 onPressAndHold: root.contextMenuRequested();
0139 }
0140 }
0141 }