diff options
Diffstat (limited to 'src/quickcontrols/ios/TreeViewDelegate.qml')
-rw-r--r-- | src/quickcontrols/ios/TreeViewDelegate.qml | 112 |
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 +} |