Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/TreeViewDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: Copyright (C) 2022 The Qt Company Ltd.
0003 SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0004 SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0005 SPDX-FileCopyrightText: 2023 David Redondo <kde@david-redondo.de>
0006 SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later
0007 */
0008
0009 import QtQuick
0010 import QtQuick.Layouts
0011 import QtQuick.Templates as T
0012 import org.kde.kirigami as Kirigami
0013 import org.kde.qqc2desktopstyle.private as StylePrivate
0014 import org.kde.desktop.private as Private
0015
0016 T.TreeViewDelegate {
0017 id: controlRoot
0018
0019 implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightMargin + (mirrored ? leftPadding : rightPadding)
0020 implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight) + topPadding + bottomPadding
0021
0022 // This is the default size of the indicator when using Breeze aka pixelMetric("treeviewindentation")
0023 indentation: indicator ? indicator.width : 20
0024
0025 leftMargin: Kirigami.Units.smallSpacing
0026 rightMargin: Kirigami.Units.smallSpacing
0027 spacing: Kirigami.Units.smallSpacing
0028
0029 topPadding: Kirigami.Units.smallSpacing
0030 bottomPadding: Kirigami.Units.smallSpacing
0031
0032 Kirigami.Theme.colorSet: highlighted ? Kirigami.Theme.Selection : Kirigami.Theme.View
0033 Kirigami.Theme.inherit: false
0034
0035 leftPadding: !mirrored ? leftMargin + __contentIndent : 0
0036 rightPadding: mirrored ? leftMargin + __contentIndent : 0
0037
0038 highlighted: controlRoot.selected || controlRoot.current
0039 || ((controlRoot.treeView.selectionBehavior === TableView.SelectRows
0040 || controlRoot.treeView.selectionBehavior === TableView.SelectionDisabled)
0041 && controlRoot.row === controlRoot.treeView.currentRow)
0042
0043
0044 icon.width: Kirigami.Units.iconSizes.smallMedium
0045 icon.height: Kirigami.Units.iconSizes.smallMedium
0046
0047 T.ToolTip.visible: (Kirigami.Settings.tabletMode ? down : hovered) && (contentItem.truncated ?? false)
0048 T.ToolTip.text: controlRoot.model.display
0049 T.ToolTip.delay: Kirigami.Units.toolTipDelay
0050
0051 required property int row
0052 required property int column
0053 required property var model
0054 readonly property var modelIndex: treeView.index(row, column)
0055 readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
0056
0057 // The indicator is only visible when the item has children, so this is only the closest branch indicator (+arrow) - the rest of the branch indicator lines are below
0058 indicator: StylePrivate.StyleItem {
0059 readonly property real __indicatorIndent: controlRoot.leftMargin + (controlRoot.depth * controlRoot.indentation)
0060 x: !controlRoot.mirrored ? __indicatorIndent : controlRoot.width - __indicatorIndent - width
0061 height: parent.height
0062 width: pixelMetric("treeviewindentation")
0063 hover: hover.hovered
0064 elementType: "itembranchindicator"
0065 on: controlRoot.expanded
0066 selected: controlRoot.highlighted || controlRoot.checked || (controlRoot.pressed && !controlRoot.checked)
0067 properties: {
0068 "isItem": true,
0069 "hasChildren": true,
0070 "hasSibling": controlRoot.treeView.model.rowCount(controlRoot.modelIndex.parent) > controlRoot.modelIndex.row + 1
0071 }
0072 HoverHandler {
0073 id: hover
0074 }
0075 }
0076
0077 // The rest of the branch indicators, this is outside of the background so consumers can freely
0078 // modify it without losing it
0079 StylePrivate.ItemBranchIndicators {
0080 visible: controlRoot.isTreeNode
0081 height: parent.height
0082 x: controlRoot.mirrored ? controlRoot.width - controlRoot.leftMargin - width : controlRoot.leftMargin
0083 modelIndex: controlRoot.modelIndex
0084 selected: controlRoot.highlighted || controlRoot.checked || (controlRoot.pressed && !controlRoot.checked)
0085 rootIndex: controlRoot.treeView.rootIndex
0086 }
0087
0088 background: Private.DefaultListItemBackground {
0089 Kirigami.Theme.colorSet: Kirigami.Theme.View
0090 Kirigami.Theme.inherit: false
0091 control: controlRoot
0092 }
0093
0094 contentItem: RowLayout {
0095 property alias truncated: textLabel.truncated
0096 spacing: Kirigami.Units.smallSpacing
0097 Kirigami.Icon {
0098 Layout.alignment: Qt.AlignVCenter
0099 visible: controlRoot.icon.name !== "" || controlRoot.icon.source.toString() !== "" || controlRoot.model.decoration !== undefined
0100 source: controlRoot.icon.name !== "" ? controlRoot.icon.name : controlRoot.icon.source.toString() !== "" ? controlRoot.icon.source : controlRoot.model.decoration
0101 Layout.preferredHeight: controlRoot.icon.height
0102 Layout.preferredWidth: controlRoot.icon.width
0103 selected: controlRoot.highlighted || controlRoot.checked || (controlRoot.pressed && !controlRoot.checked)
0104 }
0105 Label {
0106 id: textLabel
0107 text: controlRoot.model.display
0108 font: controlRoot.font
0109 color: controlRoot.highlighted || controlRoot.checked || (controlRoot.pressed && !controlRoot.checked)
0110 ? Kirigami.Theme.highlightedTextColor
0111 : (controlRoot.enabled ? Kirigami.Theme.textColor : Kirigami.Theme.disabledTextColor)
0112 elide: Text.ElideRight
0113 visible: text !== ""
0114 horizontalAlignment: Text.AlignLeft
0115 verticalAlignment: Text.AlignVCenter
0116 Layout.alignment: Qt.AlignLeft
0117 Layout.fillWidth: true
0118 }
0119 }
0120 }