Warning, /pim/kube/framework/qml/TreeView.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
0021 import QtQuick.Controls 2
0022 import QtQuick.Layouts 1
0023
0024 import org.kube.framework 1.0 as Kube
0025
0026 FocusScope {
0027 id: root
0028 property var model: null
0029 property var currentIndex: null
0030 property alias count: listView.count
0031
0032 signal dropped(var index, var drop)
0033
0034 function clearSelection() {
0035 listView.currentIndex = -1
0036 }
0037
0038 function selectRootIndex() {
0039 if (listView.count >= 1) {
0040 listView.currentIndex = 0
0041 }
0042 }
0043
0044 function selectNext() {
0045 listView.incrementCurrentIndex()
0046 }
0047
0048 function selectPrevious() {
0049 listView.decrementCurrentIndex()
0050 }
0051
0052 Kube.ListView {
0053 id: listView
0054
0055 anchors.fill: parent
0056 focus: true
0057
0058 model: Kube.TreeModelAdaptor {
0059 id: modelAdaptor
0060 model: root.model
0061 }
0062
0063 onCurrentIndexChanged: {
0064 root.currentIndex = modelAdaptor.mapRowToModelIndex(listView.currentIndex)
0065 }
0066
0067 ScrollBar.vertical: Kube.ScrollBar { invertedColors: true }
0068
0069 delegate: Kube.ListDelegate {
0070 id: delegate
0071 width: listView.availableWidth
0072 height: Kube.Units.gridUnit * 1.5
0073 property bool isActive: listView.currentIndex === index
0074
0075 //FIXME The enabled property is specific to the folder model
0076 selectionEnabled: model.enabled
0077 hoverEnabled: selectionEnabled
0078
0079 DropArea {
0080 anchors.fill: parent
0081
0082 Rectangle {
0083 anchors.fill: parent
0084 color: Kube.Colors.viewBackgroundColor
0085 opacity: 0.3
0086 visible: parent.containsDrag
0087 }
0088
0089 onDropped: root.dropped(modelAdaptor.mapRowToModelIndex(index), drop)
0090 }
0091
0092 background: Kube.DelegateBackground {
0093 anchors.fill: parent
0094 color: Kube.Colors.textColor
0095 focused: delegate.activeFocus || delegate.hovered
0096 selected: isActive
0097 }
0098
0099 function toggleExpanded() {
0100 var idx = model._q_TreeView_ModelIndex
0101 if (modelAdaptor.isExpanded(idx)) {
0102 modelAdaptor.collapse(idx)
0103 } else {
0104 modelAdaptor.expand(idx)
0105 }
0106 }
0107
0108 Keys.onSpacePressed: toggleExpanded()
0109
0110 RowLayout {
0111 anchors {
0112 fill: parent
0113 leftMargin: Math.max(Kube.Units.smallSpacing, model._q_TreeView_ItemDepth * Kube.Units.largeSpacing)
0114 }
0115
0116 spacing: Kube.Units.smallSpacing
0117 Kube.Label {
0118 id: label
0119 Layout.fillWidth: true
0120 text: model.name
0121 color: delegate.selectionEnabled ? Kube.Colors.highlightedTextColor : Kube.Colors.disabledTextColor
0122 elide: Text.ElideLeft
0123 clip: false
0124 }
0125 Kube.IconButton {
0126 visible: model._q_TreeView_HasChildren
0127 iconName: model._q_TreeView_ItemExpanded ? Kube.Icons.goDown_inverted : Kube.Icons.goNext_inverted
0128 padding: 0
0129 width: Kube.Units.gridUnit
0130 height: Kube.Units.gridUnit
0131 onClicked: toggleExpanded()
0132 activeFocusOnTab: false
0133 hoverEnabled: false
0134 }
0135 }
0136 }
0137 }
0138 }