/*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.kquickcontrols as KQuickControlsimport org.kde.kitemmodels as KItemModelsimport org.kde.kirigami as Kirigamiimport org.kde.plasma.private.kcm_keyboard as KCMKeyboardKirigami.Dialog {id: dialogproperty bool isMobile: falsetitle: isMobile ? i18nc("@title:window", "Set Layout") : i18nc("@title:window", "Add Layout")implicitWidth: Kirigami.Units.gridUnit * 34implicitHeight: Kirigami.Units.gridUnit * 26padding: Kirigami.Units.largeSpacingstandardButtons: QQC2.Dialog.Ok | QQC2.Dialog.CancelComponent.onCompleted: {let button = standardButton(QQC2.Dialog.Ok);button.enabled = Qt.binding(() => variantView.currentIndex >= 0);searchField.forceActiveFocus();}onAccepted: {const layout = variantView.currentItem.shortNameconst variant = variantView.currentItem.variantNameconst shortcut = sequenceItem.keySequence;const displayName = layout === displayNameField.text ? "" : displayNameField.textif (!isMobile) {kcm.userLayoutModel.addLayout(layout, variant, shortcut, displayName)} else {kcm.userLayoutModel.setSingleLayout(layout, variant, shortcut, displayName)}}KCMKeyboard.LayoutModel {id: layoutModel}KCMKeyboard.VariantsModel {id: variantProxysearchString: searchField.textshortName: layoutsView.currentItem?.shortName ?? ""sourceModel: layoutModel}contentItem: ColumnLayout {spacing: Kirigami.Units.smallSpacingKirigami.SearchField {id: searchFieldLayout.fillWidth: trueonTextChanged: {layoutsView.currentIndex = 0;variantView.currentIndex = 0;}}RowLayout {QQC2.ScrollView {clip: trueimplicitWidth: Math.round(dialog.width / 2)Layout.fillWidth: trueLayout.fillHeight: trueKirigami.StyleHints.showFramedBackground: truecontentItem: ListView {id: layoutsViewcurrentIndex: 0model: KCMKeyboard.LayoutSearchModel {sourceModel: layoutModelsearchString: searchField.text}delegate: LayoutDelegate {}keyNavigationEnabled: trueactiveFocusOnTab: true}}QQC2.ScrollView {clip: trueimplicitWidth: Math.round(dialog.width / 2)Layout.fillWidth: trueLayout.fillHeight: trueKirigami.StyleHints.showFramedBackground: truecontentItem: ListView {id: variantViewmodel: layoutsView.currentItem ? variantProxy : []delegate: LayoutDelegate {}keyNavigationEnabled: trueactiveFocusOnTab: true}}}RowLayout {spacing: Kirigami.Units.smallSpacingvisible: !isMobileQQC2.TextField {id: displayNameFieldmaximumLength: 3placeholderText: i18nc("@label:textbox", "Short layout name")Binding {target: displayNameFieldproperty: "text"value: variantView.currentItem?.shortName ?? ""}}Kirigami.ContextualHelpButton {toolTipText: i18nc("@info", "The abbreviated name of the selected layout, which will be displayed in the system tray. You can change this setting yourself.")}Item {Layout.fillWidth: true}QQC2.Label {text: i18nc("@option:textbox", "Shortcut:")}KQuickControls.KeySequenceItem {id: sequenceItem}}}footerLeadingComponent: QQC2.Button {icon.name: "input-keyboard-virtual-symbolic"text: i18nc("@action:button", "Preview")enabled: variantView.currentIndex >= 0onClicked: kcm.requestPreview(kcm.keyboardModel, variantView.currentItem.shortName, variantView.currentItem.variantName)}component LayoutDelegate: QQC2.ItemDelegate {id: delegatewidth: ListView.view.widthhighlighted: ListView.isCurrentItemrequired property string shortNamerequired property string descriptionrequired property string variantNamerequired property int indexonClicked: ListView.view.currentIndex = indexAccessible.name: delegate.descriptioncontentItem: Kirigami.IconTitleSubtitle {icon.source: KCMKeyboard.Flags.getIcon(delegate.shortName)title: delegate.descriptionQQC2.ToolTip.text: titleQQC2.ToolTip.visible: delegate.hovered && truncated}}}