/*SPDX-FileCopyrightText: 2024 Joshua Goins <joshua.goins@kdab.com>SPDX-License-Identifier: GPL-2.0-or-later*/import QtQuickimport QtQuick.Layoutsimport QtQuick.Controls as QQC2import org.kde.kirigami as Kirigamiimport org.kde.plasma.tablet.kcmimport org.kde.kcmutilsimport org.kde.kquickcontrolsKirigami.Dialog {id: actionDialogproperty inputSequence inputSequenceproperty string namesignal gotInputSequence(sequence: inputSequence)title: i18ndc("kcm_tablet", "@title Select the action for the tablet button", "Select Button Action")modal: truemaximumWidth: Kirigami.Units.gridUnit * 20maximumHeight: Kirigami.Units.gridUnit * 18topPadding: 0leftPadding: Kirigami.Units.largeSpacingrightPadding: Kirigami.Units.largeSpacingbottomPadding: 0standardButtons: QQC2.Dialog.Ok | QQC2.Dialog.CancelshowCloseButton: falseonAccepted: gotInputSequence(inputSequence)function refreshDialogData(): void {switch (inputSequence.type) {case InputSequence.Disabled:disabledRadio.checked = true;break;case InputSequence.Keyboard:keyboardRadio.checked = true;seq.keySequence = inputSequence.keySequence();break;case InputSequence.Mouse:mouseRadio.checked = true;clickCombo.currentIndex = clickCombo.indexOfValue(inputSequence.mouseButton());const modifiers = actionDialog.inputSequence.keyboardModifiers();const checkFlag = (flag) => (modifiers & flag) === flag;ctrlCheckbox.checked = checkFlag(Qt.ControlModifier);altCheckbox.checked = checkFlag(Qt.AltModifier);metaCheckbox.checked = checkFlag(Qt.MetaModifier);shiftCheckbox.checked = checkFlag(Qt.ShiftModifier);break;case InputSequence.ApplicationDefined:applicationRadio.checked = true;break;}}ColumnLayout {spacing: Kirigami.Units.smallSpacingQQC2.Label {text: i18ndc("kcm_tablet", "@info %1 is the 'pad button %1' or 'pen button 1/2/3' strings", "Choose what action will be taken when pressing %1:", actionDialog.name)wrapMode: Text.WordWrapLayout.fillWidth: true}QQC2.ButtonGroup { id: radioGroup }QQC2.RadioButton {id: applicationRadioreadonly property int index: 0icon.name: "applications-all-symbolic"text: i18ndc("kcm_tablet", "@option:radio Set this action to an application-defined type", "Defer to application")QQC2.ButtonGroup.group: radioGrouponToggled: {inputSequence.type = InputSequence.ApplicationDefined;refreshDialogData();}}QQC2.RadioButton {id: keyboardRadioreadonly property int index: 1icon.name: "input-keyboard-symbolic"text: i18ndc("kcm_tablet", "@option:radio Set this action to a keyboard type", "Send keyboard key")QQC2.ButtonGroup.group: radioGrouponToggled: {inputSequence.type = InputSequence.Keyboard;refreshDialogData();}}QQC2.RadioButton {id: mouseRadioreadonly property int index: 2text: i18ndc("kcm_tablet", "@option:radio Set this action to a mouse type", "Send mouse button click")icon.name: "input-mouse-symbolic"QQC2.ButtonGroup.group: radioGrouponToggled: {inputSequence.type = InputSequence.Mouse;refreshDialogData();}}QQC2.RadioButton {id: disabledRadioreadonly property int index: 3icon.name: "action-unavailable-symbolic"text: i18ndc("kcm_tablet", "@option:radio Disable this action", "Do nothing")QQC2.ButtonGroup.group: radioGrouponToggled: {inputSequence.type = InputSequence.Disabled;refreshDialogData();}}QQC2.MenuSeparator {Layout.fillWidth: true}StackLayout {currentIndex: radioGroup.checkedButton.indexQQC2.Label {id: applicationViewtext: i18ndc("kcm_tablet", "@info", "This tablet button is forwarded to the focused application, which can decide how to handle it." )wrapMode: Text.WordWrapLayout.fillWidth: true}KeySequenceItem {id: seqshowCancelButton: truemodifierlessAllowed: truemodifierOnlyAllowed: truemultiKeyShortcutsAllowed: falsecheckForConflictsAgainst: ShortcutType.NoneonCaptureFinished: actionDialog.inputSequence.setKeySequence(keySequence)}ColumnLayout {id: mouseViewspacing: Kirigami.Units.smallSpacingQQC2.ComboBox {id: clickCombotextRole: "text"valueRole: "value"model: [{ value: Qt.LeftButton, text: i18ndc("kcm_tablet", "@action:inmenu Left mouse click", "Left-click") },{ value: Qt.MiddleButton, text: i18ndc("kcm_tablet", "@action:inmenu Middle mouse click", "Middle-click") },{ value: Qt.RightButton, text: i18ndc("kcm_tablet", "@action:inmenu Right mouse click", "Right-click") }]onActivated: actionDialog.inputSequence.setMouseButton(currentValue)}RowLayout {spacing: Kirigami.Units.largeSpacingcomponent ModifierCheckBox: QQC2.CheckBox {required property /*Qt::KeyboardModifier*/ int modifieronToggled: {let modifiers = actionDialog.inputSequence.keyboardModifiers();if (checked) {modifiers |= modifier;} else {modifiers &= ~modifier;}actionDialog.inputSequence.setKeyboardModifiers(modifiers);}}ModifierCheckBox {id: ctrlCheckboxtext: i18ndc("kcm_tablet", "@option:check The ctrl modifier on the keyboard", "Ctrl")modifier: Qt.ControlModifier}ModifierCheckBox {id: altCheckboxtext: i18ndc("kcm_tablet", "@option:check The alt modifier on the keyboard", "Alt")modifier: Qt.AltModifier}ModifierCheckBox {id: metaCheckboxtext: i18ndc("kcm_tablet", "@option:check The meta modifier on the keyboard", "Meta")modifier: Qt.MetaModifier}ModifierCheckBox {id: shiftCheckboxtext: i18ndc("kcm_tablet", "@option:check The shift modifier on the keyboard", "Shift")modifier: Qt.ShiftModifier}}}QQC2.Label {id: disabledViewtext: i18ndc("kcm_tablet", "@info", "This button is disabled and will not do anything.")wrapMode: Text.WordWrapLayout.fillWidth: true}}}}