aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols/ios/TreeViewDelegate.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickcontrols/ios/TreeViewDelegate.qml')
-rw-r--r--src/quickcontrols/ios/TreeViewDelegate.qml112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/quickcontrols/ios/TreeViewDelegate.qml b/src/quickcontrols/ios/TreeViewDelegate.qml
new file mode 100644
index 0000000000..5fc16bee07
--- /dev/null
+++ b/src/quickcontrols/ios/TreeViewDelegate.qml
@@ -0,0 +1,112 @@
+// 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.iOS.impl
+
+T.TreeViewDelegate {
+ id: control
+
+ implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
+ implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight)
+
+ indentation: indicator ? indicator.width : 12
+ leftMargin: 16
+ rightMargin: 16
+ spacing: 14
+
+ 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: background.height
+
+ property Image arrow : Image {
+ parent: control.indicator
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0)
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + "arrow-indicator"
+ ImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.colorScheme === Qt.Light},
+ {"dark": Qt.styleHints.colorScheme === Qt.Dark}
+ ]
+ }
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.colorScheme === Qt.Dark ? control.palette.dark : control.palette.base
+ NinePatchImage {
+ height: parent.height
+ width: parent.width
+ source: IOS.url + (control.highlighted ? "itemdelegate-background-pressed" : "itemdelegate-background")
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.colorScheme === Qt.Light},
+ {"dark": Qt.styleHints.colorScheme === Qt.Dark}
+ ]
+ }
+ }
+ }
+
+ contentItem: Label {
+ clip: false
+ 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-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-sanity
+}