Warning, /pim/kube/framework/qml/ConversationView.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright (C) 2016 Michael Bohlender, <michael.bohlender@kdemail.net>
0003 * Copyright (C) 2017 Christian Mollekopf, <mollekopf@kolabsystems.com>
0004 *
0005 * This program is free software; you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation; either version 2 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License along
0016 * with this program; if not, write to the Free Software Foundation, Inc.,
0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0018 */
0019
0020 import QtQuick 2.9
0021 import QtQuick.Controls 2
0022 import QtQuick.Layouts 1.1
0023 import org.kube.framework 1.0 as Kube
0024
0025 import QtQml 2.2 as QtQml
0026
0027
0028 FocusScope {
0029 id: root
0030
0031 property alias model: listView.model
0032 property bool hideTrash: true;
0033 property bool hideNonTrash: false;
0034 property string searchString: ""
0035 property bool autoLoadImages: true
0036
0037 Kube.Listener {
0038 filter: Kube.Messages.searchString
0039 onMessageReceived: root.searchString = message.searchString
0040 }
0041
0042 Kube.Listener {
0043 filter: Kube.Messages.selectNextMessage
0044 onMessageReceived: {
0045 listView.incrementCurrentIndex()
0046 listView.forceActiveFocus()
0047 }
0048 }
0049
0050 Kube.Listener {
0051 filter: Kube.Messages.selectPreviousMessage
0052 onMessageReceived: {
0053 listView.decrementCurrentIndex()
0054 listView.forceActiveFocus()
0055 }
0056 }
0057
0058 Kube.Listener {
0059 filter: Kube.Messages.scrollConversationDown
0060 onMessageReceived: listView.scrollDown()
0061 }
0062
0063 Kube.Listener {
0064 filter: Kube.Messages.scrollConversationUp
0065 onMessageReceived: listView.scrollUp()
0066 }
0067
0068 Rectangle {
0069 anchors.fill: parent
0070 color: Kube.Colors.backgroundColor
0071
0072 Kube.ConversationListView {
0073 id: listView
0074 objectName: "listView"
0075 focus: true
0076
0077 anchors {
0078 top: parent.top
0079 left: parent.left
0080 right: parent.right
0081 }
0082
0083 //Shrink the listview if the content doesn't fill the full height, so the email appears on top instead of on the bottom.
0084 height: Math.min(contentHeight, parent.height)
0085
0086 Keys.onPressed: {
0087 //Not implemented as a shortcut because we want it only to apply if we have the focus
0088 if (event.text == "d" || event.key == Qt.Key_Delete) {
0089 Kube.Fabric.postMessage(Kube.Messages.moveToTrash, {"mail": listView.currentItem.currentData.mail})
0090 } else if (event.text == "r") {
0091 Kube.Fabric.postMessage(Kube.Messages.reply, {"mail": listView.currentItem.currentData.mail})
0092 }
0093 }
0094
0095
0096 delegate: FocusScope {
0097 id: delegateRoot
0098
0099 property var currentData: model
0100 property bool isCurrentItem: false
0101
0102 focus: true
0103 activeFocusOnTab: false
0104 onActiveFocusChanged: {
0105 if (activeFocus && index) {
0106 listView.currentIndex = index
0107 }
0108 }
0109
0110 height: sheet.height + Kube.Units.gridUnit
0111 width: listView.width
0112
0113 NumberAnimation on opacity {
0114 id: fadeIn
0115 from: 0
0116 to: 1
0117 duration: 100
0118 }
0119
0120 Component.onCompleted: fadeIn.start()
0121
0122 MouseArea {
0123 anchors.fill: parent
0124 acceptedButtons: Qt.NoButton
0125 hoverEnabled: true
0126 onEntered: {
0127 delegateRoot.forceActiveFocus(Qt.MouseFocusReason)
0128 }
0129 }
0130
0131 MailViewer {
0132 id: sheet
0133 anchors.centerIn: parent
0134 width: parent.width - Kube.Units.largeSpacing * 2
0135
0136 mail: model.mail
0137 message: model.mimeMessage
0138 subject: model.subject
0139 sender: model.sender
0140 senderName: model.senderName
0141 to: model.to
0142 cc: model.cc
0143 bcc: model.bcc
0144 date: model.date
0145 unread: model.unread
0146 trash: model.trash
0147 draft: model.draft
0148 sent: model.sent
0149 busy: model.incomplete
0150 current: delegateRoot.isCurrentItem
0151 searchString: root.searchString
0152 autoLoadImages: root.autoLoadImages
0153 // Collapse all but the latest sent message by default
0154 collapsed: (listView.count > 1) && (index < (listView.count - 1)) && (draft || sent)
0155
0156 states: [
0157 State {
0158 name: "inprogress"; when: model.status == Kube.MailListModel.InProgressStatus
0159 PropertyChanges { target: sheet; busyMessage: qsTr("Downloading message...") }
0160 },
0161 State {
0162 name: "error"; when: model.status == Kube.MailListModel.ErrorStatus
0163 PropertyChanges { target: sheet; busyMessage: qsTr("Failed to download message...") }
0164 }
0165 ]
0166 }
0167 }
0168
0169 }
0170 }
0171 }