blob: ade2e48c1f5d3fea7fbb3ac011c7b94ac2fea7c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Basic
import FileSystemModule
// This is the file system view which gets populated by the C++ model.
Rectangle {
id: root
signal fileClicked(string filePath)
TreeView {
id: fileSystemTreeView
anchors.fill: parent
model: FileSystemModel
boundsBehavior: Flickable.StopAtBounds
boundsMovement: Flickable.StopAtBounds
clip: true
property int lastIndex: -1
Component.onCompleted: fileSystemTreeView.toggleExpanded(0)
// The delegate represents a single entry in the filesystem.
delegate: TreeViewDelegate {
id: treeDelegate
indentation: 8
implicitWidth: fileSystemTreeView.width > 0 ? fileSystemTreeView.width : 250
implicitHeight: 25
required property int index
required property url filePath
indicator: null
contentItem: Item {
anchors.fill: parent
Icon {
id: directoryIcon
x: leftMargin + (depth * indentation)
anchors.verticalCenter: parent.verticalCenter
path: treeDelegate.hasChildren
? (treeDelegate.expanded ? "../icons/folder_open.svg" : "../icons/folder_closed.svg")
: "../icons/generic_file.svg"
iconColor: (treeDelegate.expanded && treeDelegate.hasChildren) ? Colors.color2 : Colors.folder
}
Text {
anchors.left: directoryIcon.right
anchors.verticalCenter: parent.verticalCenter
width: parent.width
text: model.fileName
color: Colors.text
}
}
background: Rectangle {
color: treeDelegate.index === fileSystemTreeView.lastIndex
? Colors.selection
: (hoverHandler.hovered ? Colors.active : "transparent")
}
TapHandler {
onSingleTapped: {
fileSystemTreeView.toggleExpanded(row)
fileSystemTreeView.lastIndex = index
// If this model item doesn't have children, it means it's representing a file.
if (!treeDelegate.hasChildren)
root.fileClicked(filePath)
}
}
HoverHandler {
id: hoverHandler
}
}
// Provide our own custom ScrollIndicator for the TreeView.
ScrollIndicator.vertical: ScrollIndicator {
active: true
implicitWidth: 15
contentItem: Rectangle {
implicitWidth: 6
implicitHeight: 6
color: Colors.color1
opacity: fileSystemTreeView.movingVertically ? 0.5 : 0.0
Behavior on opacity {
OpacityAnimator {
duration: 500
}
}
}
}
}
}
|