Warning, /plasma-mobile/raven/src/contents/ui/mailboxselector/MailBoxList.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: LGPL-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 Qt.labs.qmlmodels 1.0
0010 
0011 import org.kde.kirigami 2.15 as Kirigami
0012 import org.kde.kitemmodels 1.0
0013 import org.kde.raven 1.0
0014 
0015 ListView {
0016     id: mailList
0017 
0018     model: KDescendantsProxyModel {
0019         id: foldersModel
0020         model: MailManager.foldersModel
0021     }
0022     
0023     onModelChanged: currentIndex = -1
0024     
0025     signal folderChosen()
0026 
0027     delegate: DelegateChooser {
0028         role: 'kDescendantExpandable'
0029         
0030         DelegateChoice {
0031             roleValue: true
0032 
0033             ColumnLayout {
0034                 spacing: 0
0035                 width: ListView.view.width
0036                 
0037                 Item {
0038                     Layout.topMargin: Kirigami.Units.largeSpacing
0039                     visible: (model.kDescendantLevel === 1) && (model.index !== 0)
0040                 }
0041                 
0042                 QQC2.ItemDelegate {
0043                     id: categoryHeader
0044                     Layout.fillWidth: true
0045                     topPadding: Kirigami.Units.largeSpacing
0046                     bottomPadding: Kirigami.Units.largeSpacing
0047                     leftPadding: Kirigami.Units.largeSpacing * (model.kDescendantLevel)
0048 
0049                     property string displayText: model.display
0050                     
0051                     onClicked: mailList.model.toggleChildren(index)
0052                     
0053                     contentItem: RowLayout {
0054                         Kirigami.Icon {
0055                             Layout.alignment: Qt.AlignVCenter
0056                             visible: model.kDescendantLevel > 1
0057                             source: "folder-symbolic"
0058                             Layout.preferredHeight: Kirigami.Units.iconSizes.small
0059                             Layout.preferredWidth: Layout.preferredHeight
0060                         }
0061                         
0062                         QQC2.Label {
0063                             Layout.fillWidth: true
0064                             
0065                             color: Kirigami.Theme.disabledTextColor
0066                             text: categoryHeader.displayText
0067                             font.weight: Font.DemiBold
0068                             elide: Text.ElideRight
0069                         }
0070                         
0071                         Kirigami.Icon {
0072                             implicitWidth: Kirigami.Units.iconSizes.small
0073                             implicitHeight: Kirigami.Units.iconSizes.small
0074                             source: model.kDescendantExpanded ? 'arrow-up' : 'arrow-down'
0075                         }
0076                     }
0077                 }
0078             }
0079         }
0080 
0081         DelegateChoice {
0082             roleValue: false
0083             
0084             QQC2.ItemDelegate {
0085                 id: controlRoot
0086                 text: model.display
0087                 width: ListView.view.width
0088                 padding: Kirigami.Units.largeSpacing
0089                 leftPadding: Kirigami.Units.largeSpacing * model.kDescendantLevel
0090                 
0091                 property bool chosen: false
0092                 
0093                 Connections {
0094                     target: mailList
0095                     
0096                     function onFolderChosen() {
0097                         if (controlRoot.chosen) {
0098                             controlRoot.chosen = false;
0099                             controlRoot.highlighted = true;
0100                         } else {
0101                             controlRoot.highlighted = false;
0102                         }
0103                     }
0104                 }
0105                 
0106                 property bool showSelected: (controlRoot.pressed || (controlRoot.highlighted && applicationWindow().isWidescreen))
0107     
0108                 background: Rectangle {
0109                     color: Qt.rgba(Kirigami.Theme.highlightColor.r, Kirigami.Theme.highlightColor.g, Kirigami.Theme.highlightColor.b, controlRoot.showSelected ? 0.5 : hoverHandler.hovered ? 0.2 : 0)
0110                     
0111                     // indicator rectangle
0112                     Rectangle {
0113                         anchors.left: parent.left
0114                         anchors.top: parent.top
0115                         anchors.topMargin: 1
0116                         anchors.bottom: parent.bottom
0117                         anchors.bottomMargin: 1
0118                         
0119                         width: 4
0120                         visible: controlRoot.highlighted
0121                         color: Kirigami.Theme.highlightColor
0122                     }
0123                     
0124                     HoverHandler {
0125                         id: hoverHandler
0126                         // disable hover input on mobile because touchscreens trigger hover feedback and do not "unhover" in Qt
0127                         enabled: !Kirigami.Settings.isMobile
0128                     }
0129                 }
0130                 
0131                 contentItem: RowLayout {
0132                     spacing: Kirigami.Units.smallSpacing
0133                     
0134                     Kirigami.Icon {
0135                         Layout.alignment: Qt.AlignVCenter
0136                         source: model.decoration
0137                         Layout.preferredHeight: Kirigami.Units.iconSizes.small
0138                         Layout.preferredWidth: Layout.preferredHeight
0139                     }
0140                     
0141                     QQC2.Label {
0142                         leftPadding: controlRoot.mirrored ? (controlRoot.indicator ? controlRoot.indicator.width : 0) + controlRoot.spacing : 0
0143                         rightPadding: !controlRoot.mirrored ? (controlRoot.indicator ? controlRoot.indicator.width : 0) + controlRoot.spacing : 0
0144 
0145                         text: controlRoot.text
0146                         font: controlRoot.font
0147                         color: Kirigami.Theme.textColor
0148                         elide: Text.ElideRight
0149                         visible: controlRoot.text
0150                         horizontalAlignment: Text.AlignLeft
0151                         verticalAlignment: Text.AlignVCenter
0152                         Layout.alignment: Qt.AlignLeft
0153                         Layout.fillWidth: true
0154                     }
0155                 }
0156 
0157                 onClicked: {
0158                     model.checkState = model.checkState === 0 ? 2 : 0
0159                     MailManager.loadMailCollection(foldersModel.mapToSource(foldersModel.index(model.index, 0)));
0160                     
0161                     controlRoot.chosen = true;
0162                     mailList.folderChosen();
0163                     
0164                     // push list page if in narrow mode
0165                     if (!applicationWindow().isWidescreen) {
0166                         applicationWindow().pageStack.push(applicationWindow().getPage("FolderView"));
0167                     }
0168                 }
0169             }
0170         }
0171     }
0172 }