From 0f01c1ea421eafc96630d1d9eded8bb044f3a88d Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 14 Jul 2017 23:29:31 +0200 Subject: Moved non-folder specific treeview to separate file --- framework/qml/FolderListView.qml | 103 ++------------------------------ framework/qml/TreeView.qml | 126 +++++++++++++++++++++++++++++++++++++++ framework/qmldir | 1 + 3 files changed, 133 insertions(+), 97 deletions(-) create mode 100644 framework/qml/TreeView.qml diff --git a/framework/qml/FolderListView.qml b/framework/qml/FolderListView.qml index e5ab018f..7800e98d 100644 --- a/framework/qml/FolderListView.qml +++ b/framework/qml/FolderListView.qml @@ -1,5 +1,6 @@ /* Copyright (C) 2016 Michael Bohlender, + Copyright (C) 2017 Christian Mollekopf, This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,11 +25,9 @@ import QtQml.Models 2.2 import org.kube.framework 1.0 as Kube -TreeView { +Kube.TreeView { id: treeView property variant accountId - visible: true - flickableItem.boundsBehavior: Flickable.StopAtBounds TableViewColumn { title: "Name" @@ -39,34 +38,6 @@ TreeView { id: folderListModel accountId: treeView.accountId } - selection: ItemSelectionModel { - model: treeView.model - //TODO once we don't loose focus to the next view - // onCurrentChanged: { - // treeView.activated(selection.currentIndex) - // } - } - - onActiveFocusChanged: { - //Set an initially focused item when the list view receives focus - if (activeFocus && !selection.hasSelection) { - treeView.selection.setCurrentIndex(model.index(0, 0), ItemSelectionModel.ClearAndSelect) - } - } - - Keys.onDownPressed: { - if (!selection.hasSelection) { - treeView.selection.setCurrentIndex(model.index(0, 0), ItemSelectionModel.ClearAndSelect) - } else { - treeView.selection.setCurrentIndex(model.sibling(selection.currentIndex.row + 1, 0, selection.currentIndex), ItemSelectionModel.ClearAndSelect) - } - } - Keys.onUpPressed: { - treeView.selection.setCurrentIndex(model.sibling(selection.currentIndex.row - 1, 0, selection.currentIndex), ItemSelectionModel.ClearAndSelect) - } - Keys.onReturnPressed: { - treeView.activated(selection.currentIndex) - } onActivated: { //TODO do some event compression in case of double clicks @@ -75,73 +46,11 @@ TreeView { "trash": model.data(index, Kube.FolderListModel.Trash)}); Kube.Fabric.postMessage(Kube.Messages.synchronize, {"folder": model.data(index, Kube.FolderListModel.DomainObject)}); } - //Forward the signal because on a desktopsystem activated is only triggerd by double clicks - onClicked: treeView.activated(index) - - alternatingRowColors: false - headerVisible: false - - style: TreeViewStyle { - - rowDelegate: Rectangle { - color: styleData.selected ? Kube.Colors.highlightColor : Kube.Colors.textColor - - height: Kube.Units.gridUnit * 1.5 - width: 20 - - } - - frame: Rectangle { - color: Kube.Colors.textColor - } - - branchDelegate: Item { - - width: 16; height: 16 - - Kube.Label { - anchors.centerIn: parent - - color: Kube.Colors.viewBackgroundColor - text: styleData.isExpanded ? "-" : "+" - } - - //radius: styleData.isExpanded ? 0 : 100 - } - - itemDelegate: Rectangle { - - color: styleData.selected ? Kube.Colors.highlightColor : Kube.Colors.textColor - - DropArea { - anchors.fill: parent - - Rectangle { - anchors.fill: parent - color: Kube.Colors.viewBackgroundColor - - opacity: 0.3 - - visible: parent.containsDrag - } - onDropped: { - Kube.Fabric.postMessage(Kube.Messages.moveToFolder, {"mail": drop.source.mail, "folder":model.domainObject}) - drop.accept(Qt.MoveAction) - drop.source.visible = false - } - } - Kube.Label { - anchors { - verticalCenter: parent.verticalCenter - left: parent.left - } - text: styleData.value - color: Kube.Colors.viewBackgroundColor - } - } - backgroundColor: Kube.Colors.textColor - highlightedTextColor: Kube.Colors.highlightedTextColor + onDropped: { + Kube.Fabric.postMessage(Kube.Messages.moveToFolder, {"mail": drop.source.mail, "folder": model.domainObject}) + drop.accept(Qt.MoveAction) + drop.source.visible = false } } diff --git a/framework/qml/TreeView.qml b/framework/qml/TreeView.qml new file mode 100644 index 00000000..aef0ee92 --- /dev/null +++ b/framework/qml/TreeView.qml @@ -0,0 +1,126 @@ +/* + Copyright (C) 2016 Michael Bohlender, + Copyright (C) 2017 Christian Mollekopf, + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import QtQuick 2.4 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.1 +import QtQml.Models 2.2 + +import org.kube.framework 1.0 as Kube + +TreeView { + id: root + + signal dropped(QtObject drop, QtObject model) + + flickableItem.boundsBehavior: Flickable.StopAtBounds + + selection: ItemSelectionModel { + model: root.model + //TODO once we don't loose focus to the next view + // onCurrentChanged: { + // treeView.activated(selection.currentIndex) + // } + } + + onActiveFocusChanged: { + //Set an initially focused item when the list view receives focus + if (activeFocus && !selection.hasSelection) { + root.selection.setCurrentIndex(model.index(0, 0), ItemSelectionModel.ClearAndSelect) + } + } + + Keys.onDownPressed: { + if (!selection.hasSelection) { + root.selection.setCurrentIndex(model.index(0, 0), ItemSelectionModel.ClearAndSelect) + } else { + root.selection.setCurrentIndex(model.sibling(selection.currentIndex.row + 1, 0, selection.currentIndex), ItemSelectionModel.ClearAndSelect) + } + } + + Keys.onUpPressed: { + root.selection.setCurrentIndex(model.sibling(selection.currentIndex.row - 1, 0, selection.currentIndex), ItemSelectionModel.ClearAndSelect) + } + + Keys.onReturnPressed: { + root.activated(selection.currentIndex) + } + + //Forward the signal because on a desktopsystem activated is only triggerd by double clicks + onClicked: treeView.activated(index) + + alternatingRowColors: false + headerVisible: false + + style: TreeViewStyle { + + rowDelegate: Rectangle { + color: styleData.selected ? Kube.Colors.highlightColor : Kube.Colors.textColor + height: Kube.Units.gridUnit * 1.5 + width: 20 + } + + frame: Rectangle { + color: Kube.Colors.textColor + } + + branchDelegate: Item { + width: 16 + height: 16 + + Kube.Label { + anchors.centerIn: parent + + color: Kube.Colors.viewBackgroundColor + text: styleData.isExpanded ? "-" : "+" + } + + //radius: styleData.isExpanded ? 0 : 100 + } + + itemDelegate: Rectangle { + color: styleData.selected ? Kube.Colors.highlightColor : Kube.Colors.textColor + + DropArea { + anchors.fill: parent + + Rectangle { + anchors.fill: parent + color: Kube.Colors.viewBackgroundColor + opacity: 0.3 + visible: parent.containsDrag + } + onDropped: root.dropped(drop, model) + } + + Kube.Label { + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + } + text: styleData.value + color: Kube.Colors.viewBackgroundColor + } + } + + backgroundColor: Kube.Colors.textColor + highlightedTextColor: Kube.Colors.highlightedTextColor + } +} diff --git a/framework/qmldir b/framework/qmldir index 04893ec9..874bdf78 100644 --- a/framework/qmldir +++ b/framework/qmldir @@ -30,6 +30,7 @@ View 1.0 View.qml AutocompleteLineEdit 1.0 AutocompleteLineEdit.qml AttachmentDelegate 1.0 AttachmentDelegate.qml ListView 1.0 ListView.qml +TreeView 1.0 TreeView.qml ScrollHelper 1.0 ScrollHelper.qml singleton Messages 1.0 Messages.qml singleton Colors 1.0 Colors.qml -- cgit v1.2.3