aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols/fusion/TreeViewDelegate.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickcontrols/fusion/TreeViewDelegate.qml')
-rw-r--r--src/quickcontrols/fusion/TreeViewDelegate.qml99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/quickcontrols/fusion/TreeViewDelegate.qml b/src/quickcontrols/fusion/TreeViewDelegate.qml
new file mode 100644
index 0000000000..195693614b
--- /dev/null
+++ b/src/quickcontrols/fusion/TreeViewDelegate.qml
@@ -0,0 +1,99 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+
+T.TreeViewDelegate {
+ id: control
+
+ implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
+ implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight)
+
+ indentation: indicator ? indicator.width : 12
+ leftMargin: 5
+ rightMargin: 5
+ spacing: 5
+
+ topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0
+ leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth
+
+ highlighted: control.selected || control.current
+ || ((control.treeView.selectionBehavior === TableView.SelectRows
+ || control.treeView.selectionBehavior === TableView.SelectionDisabled)
+ && control.row === control.treeView.currentRow)
+
+ required property int row
+ required property var model
+ readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
+
+ indicator: Item {
+ readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation)
+ x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width
+ y: (control.height - height) / 2
+ implicitWidth: Math.max(arrow.implicitWidth, 20)
+ implicitHeight: 24 // same as Button.qml
+
+ property ColorImage arrow : ColorImage {
+ parent: control.indicator
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.expanded ? 0 : (control.mirrored ? 90 : -90)
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png"
+ color: control.palette.windowText
+ defaultColor: "#353637"
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 24 // same as Button.qml
+ color: control.highlighted
+ ? control.palette.highlight
+ : (control.treeView.alternatingRows && control.row % 2 !== 0
+ ? control.palette.alternateBase : control.palette.base)
+ }
+
+ contentItem: Label {
+ text: control.model.display
+ elide: Text.ElideRight
+ visible: !control.editing
+ }
+
+ // The edit delegate is a separate component, and doesn't need
+ // to follow the same strict rules that are applied to a control.
+ // qmllint disable attached-property-reuse
+ // qmllint disable controls-attached-property-reuse
+ // qmllint disable controls-sanity
+ TableView.editDelegate: FocusScope {
+ width: parent.width
+ height: parent.height
+
+ readonly property int __role: {
+ let model = control.treeView.model
+ let index = control.treeView.index(row, column)
+ let editText = model.data(index, Qt.EditRole)
+ return editText !== undefined ? Qt.EditRole : Qt.DisplayRole
+ }
+
+ TextField {
+ id: textField
+ x: control.contentItem.x
+ y: (parent.height - height) / 2
+ width: control.contentItem.width
+ text: control.treeView.model.data(control.treeView.index(row, column), __role)
+ focus: true
+ }
+
+ TableView.onCommit: {
+ let index = TableView.view.index(row, column)
+ TableView.view.model.setData(index, textField.text, __role)
+ }
+
+ Component.onCompleted: textField.selectAll()
+ }
+ // qmllint enable attached-property-reuse
+ // qmllint enable controls-attached-property-reuse
+ // qmllint enable controls-sanity
+}