/*SPDX-FileCopyrightText: 2024 Evgeny Chesnokov <echesnokov@astralinux.ru>SPDX-License-Identifier: GPL-2.0-or-later*/import QtQuickimport QtQuick.Layoutsimport QtQuick.Controls as QQC2import org.kde.kirigami as Kirigamiimport org.kde.kitemmodels as KItemModelsimport org.kde.kcmutils as KCMKCM.ScrollViewKCM {title: i18nc("@title", "Key Bindings")Connections {target: kcm.xkbOptionsModelfunction onNavigateTo(index): void {let modelIndex = xkbOptionsProxy.mapFromSource(index)treeView.expand(modelIndex.row)treeView.positionViewAtIndex(modelIndex, Qt.AlignCenter)treeView.forceActiveFocus()}}KItemModels.KSortFilterProxyModel {id: xkbOptionsProxysourceModel: kcm?.xkbOptionsModel ?? undefinedsortRoleName: "display"sortOrder: Qt.AscendingOrder}header: QQC2.CheckBox {text: i18nc("@label:checkbox", "Configure keyboard options")checked: kcm.keyboardSettings.resetOldXkbOptionsonToggled: kcm.keyboardSettings.resetOldXkbOptions = checkedKCM.SettingStateBinding {configObject: kcm.keyboardSettingssettingName: "resetOldXkbOptions"}}view: TreeView {id: treeViewboundsBehavior: Flickable.StopAtBoundsalternatingRows: falseclip: trueenabled: kcm.keyboardSettings.resetOldXkbOptionsonEnabledChanged: {if (!enabled) {for (let i in rows) {collapse(i)}}}columnWidthProvider: column => {switch (column) {case 0:return width;default:return 0;}}model: xkbOptionsProxydelegate: QQC2.TreeViewDelegate {id: delegate// you can't use a CheckDelegate as a TreeViewDelegate. This nests the buttons and is pretty bad for accessiblecontentItem: RowLayout {spacing: Kirigami.Units.smallSpacingQQC2.CheckBox {id: checkboxtristate: delegate.isTreeNode && delegate.hasChildrencheckState: model.checkStateonToggled: model.checkState = checkStateKCM.SettingHighlighter {highlight: model.checkState !== Qt.Unchecked}}QQC2.Label {Layout.fillWidth: truetext: model.display}}onClicked: {if (delegate.isTreeNode && delegate.hasChildren) {treeView.toggleExpanded(row)} else {model.checkState = checkbox.checkState === Qt.Checked ? Qt.Unchecked : Qt.Checked}}}}}