Warning, /pim/kube/views/composer/qml/AddresseeListEditor.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  *  Copyright (C) 2017 Michael Bohlender, <michael.bohlender@kdemail.net>
0003  *  Copyright (C) 2017 Christian Mollekopf, <mollekopf@kolabsys.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 
0021 import QtQuick 2.7
0022 import QtQuick.Layouts 1.1
0023 import QtQuick.Controls 2.2
0024 
0025 import org.kube.framework 1.0 as Kube
0026 
0027 FocusScope {
0028     id: root
0029     property var controller
0030     property var completer
0031     property bool encrypt: false
0032     property alias label: heading.text
0033 
0034     implicitHeight: heading.height + listView.contentHeight + lineEdit.height + 2 * Kube.Units.smallSpacing
0035 
0036     DropArea {
0037         anchors.fill: parent
0038 
0039         Rectangle {
0040             anchors.fill: parent
0041             color: Kube.Colors.highlightColor
0042             opacity: 0.3
0043             visible: parent.containsDrag
0044         }
0045 
0046         onDropped: {
0047             drop.accept(Qt.MoveAction)
0048             root.controller.add({name: drop.source.name})
0049         }
0050     }
0051 
0052     ColumnLayout {
0053         anchors.fill: parent
0054 
0055         spacing: Kube.Units.smallSpacing
0056 
0057         Kube.Label {
0058             id: heading
0059         }
0060 
0061         Kube.ListView {
0062             id: listView
0063             Layout.fillHeight: true
0064             Layout.fillWidth: true
0065 
0066             contentHeight: contentItem.childrenRect.height
0067             spacing: Kube.Units.smallSpacing
0068             model: controller.model
0069             delegate: Rectangle {
0070                 id: delegateRoot
0071                 property var recipientId: model.id
0072                 property var name: model.name
0073                 height: Kube.Units.gridUnit + Kube.Units.smallSpacing * 2 //smallSpacing for padding
0074                 width: ListView.view.availableWidth
0075                 color: Kube.Colors.buttonColor
0076 
0077                 MouseArea {
0078                     id: mouseArea
0079                     anchors.fill: parent
0080                     hoverEnabled: true
0081                     drag.target: parent
0082                     drag.filterChildren: true
0083                     drag.axis: "YAxis"
0084                     onReleased: {
0085                         if (parent.Drag.drop() == Qt.MoveAction) {
0086                             root.controller.remove(recipientId)
0087                         }
0088                     }
0089                 }
0090 
0091                 states: [
0092                     State {
0093                         name: "dnd"
0094                         when: mouseArea.drag.active
0095 
0096                         PropertyChanges {target: mouseArea; cursorShape: Qt.ClosedHandCursor}
0097                         PropertyChanges {target: delegateRoot; opacity: 0.5}
0098                         ParentChange {target: delegateRoot; parent: recipients; x: x; y: y}
0099                     }
0100                 ]
0101 
0102                 Drag.active: mouseArea.drag.active
0103                 Drag.hotSpot.x: mouseArea.mouseX
0104                 Drag.hotSpot.y: mouseArea.mouseY
0105                 Drag.source: delegateRoot
0106 
0107                 Kube.Label {
0108                     id: label
0109                     anchors {
0110                         verticalCenter: parent.verticalCenter
0111                         left: parent.left
0112                         right: keyIcon.left
0113                         margins: Kube.Units.smallSpacing
0114                     }
0115                     text: model.name
0116                     elide: Text.ElideRight
0117                     ToolTip.visible: mouseArea.containsMouse && !mouseArea.drag.active
0118                     ToolTip.text: text
0119                 }
0120                 Kube.IconButton {
0121                     id: keyIcon
0122                     anchors {
0123                         verticalCenter: parent.verticalCenter
0124                         right: removeButton.left
0125                     }
0126                     height: Kube.Units.gridUnit
0127                     width: visible ? height : 0
0128                     padding: 0
0129                     visible: root.encrypt && !model.fetching
0130                     iconName: model.keyFound ? Kube.Icons.secure: (hovered ? Kube.Icons.save : Kube.Icons.insecure)
0131                     enabled: !model.keyFound
0132                     tooltip: qsTr("Fetch key from keyserver")
0133                     onClicked: root.controller.fetchKeys(model.id, model.name)
0134                 }
0135                 Kube.Icon {
0136                     visible: model.fetching
0137                     anchors {
0138                         verticalCenter: parent.verticalCenter
0139                         right: removeButton.left
0140                     }
0141                     height: Kube.Units.gridUnit
0142                     iconName: Kube.Icons.busy
0143                 }
0144                 Kube.IconButton {
0145                     id: removeButton
0146                     anchors {
0147                         right: parent.right
0148                         verticalCenter: parent.verticalCenter
0149                         margins: Kube.Units.smallSpacing
0150                     }
0151                     height: Kube.Units.gridUnit
0152                     width: height
0153                     onClicked: root.controller.remove(model.id)
0154                     padding: 0
0155                     iconName: Kube.Icons.remove
0156                 }
0157 
0158             }
0159         }
0160 
0161         FocusScope {
0162             Layout.fillWidth: true
0163             height: Kube.Units.gridUnit +  Kube.Units.smallSpacing * 2
0164             focus: true
0165 
0166             Kube.TextButton {
0167                 id: button
0168                 text: "+ " + qsTr("Add recipient")
0169                 textColor: Kube.Colors.highlightColor
0170                 focus: true
0171                 onClicked: {
0172                     lineEdit.visible = true
0173                     lineEdit.forceActiveFocus()
0174                 }
0175             }
0176 
0177             Kube.AutocompleteLineEdit {
0178                 id: lineEdit
0179                 anchors {
0180                     left: parent.left
0181                     right: parent.right
0182                 }
0183                 visible: false
0184 
0185                 placeholderText: "+ " + qsTr("Add recipient")
0186                 model: root.completer.model
0187                 onSearchTermChanged: root.completer.searchString = searchTerm
0188                 onAccepted: {
0189                     root.controller.add({name: text});
0190                     clear()
0191                     visible = false
0192                     button.forceActiveFocus(Qt.TabFocusReason)
0193                 }
0194                 onAborted: {
0195                     clear()
0196                     visible = false
0197                     button.forceActiveFocus(Qt.TabFocusReason)
0198                 }
0199             }
0200         }
0201     }
0202 }