/*SPDX-FileCopyrightText: 2018 Roman Gilg <subdiff@gmail.com>SPDX-FileCopyrightText: 2018 Furkan Tokac <furkantokac34@gmail.com>SPDX-License-Identifier: GPL-2.0-or-later*/import QtQuick 2.7import QtQuick.Controls 2.0 as QQC2import QtQuick.Layouts 1.3 as Layoutsimport org.kde.kcm 1.1 as KCMimport org.kde.kirigami 2.4 as Kirigamiimport "components"// TODO: Change ScrollablePage as KCM.SimpleKCM// after rewrite the KCM in KConfigModule.Kirigami.ScrollablePage {id: rootspacing: Kirigami.Units.smallSpacingproperty size sizeHint: Qt.size(formLayout.width, Math.round(1.3 * formLayout.height))property size minimumSizeHint: Qt.size(formLayout.width, Math.round(1.3 * formLayout.height))signal changeSignal()property QtObject device: deviceModel[0]property bool loading: falsefunction resetModel(index) {// not implemented}function syncValuesFromBackend() {loading = trueleftHanded.load()middleEmulation.load()accelSpeed.load()accelProfile.load()naturalScroll.load()loading = false}Kirigami.FormLayout {id: formLayout// GeneralQQC2.CheckBox {Kirigami.FormData.label: i18nd("kcmmouse", "General:")id: leftHandedtext: i18nd("kcmmouse", "Left handed mode")function load() {if (!formLayout.enabled) {checked = falsereturn}enabled = device.supportsLeftHandedchecked = enabled && device.leftHanded}onCheckedChanged: {if (enabled && !root.loading) {device.leftHanded = checkedroot.changeSignal()}}ToolTip {text: i18nd("kcmmouse", "Swap left and right buttons.")}}QQC2.CheckBox {id: middleEmulationtext: i18nd("kcmmouse", "Press left and right buttons for middle-click")function load() {if (!formLayout.enabled) {checked = falsereturn}enabled = device.supportsMiddleEmulationchecked = enabled && device.middleEmulation}onCheckedChanged: {if (enabled && !root.loading) {device.middleEmulation = checkedroot.changeSignal()}}ToolTip {text: i18nd("kcmmouse", "Clicking left and right button simultaneously sends middle button click.")}}Item {Kirigami.FormData.isSection: false}// AccelerationQQC2.Slider {Kirigami.FormData.label: i18nd("kcmmouse", "Pointer speed:")id: accelSpeedfrom: 1to: 11stepSize: 1function load() {enabled = device.supportsPointerAccelerationif (!enabled) {value = 0.2return}// transform libinput's pointer acceleration range [-1, 1] to slider range [1, 11]//value = 4.5 * device.pointerAcceleration + 5.5value = 6 + device.pointerAcceleration / 0.2}onValueChanged: {if (device != undefined && enabled && !root.loading) {// transform slider range [1, 10] to libinput's pointer acceleration range [-1, 1]// by *10 and /10, we ignore the floating points after 1 digit. This prevents from// having a libinput value like 0.60000001device.pointerAcceleration = Math.round(((value-6) * 0.2) * 10) / 10root.changeSignal()}}}Layouts.ColumnLayout {id: accelProfilespacing: Kirigami.Units.smallSpacingKirigami.FormData.label: i18nd("kcmmouse", "Acceleration profile:")Kirigami.FormData.buddyFor: accelProfileFlatfunction load() {enabled = device.supportsPointerAccelerationProfileAdaptiveif (!enabled) {accelProfileAdaptive.checked = falseaccelProfileFlat.checked = falsereturn}if(device.pointerAccelerationProfileAdaptive) {accelProfileAdaptive.checked = trueaccelProfileFlat.checked = false} else {accelProfileAdaptive.checked = falseaccelProfileFlat.checked = true}}function syncCurrent() {if (enabled && !root.loading) {device.pointerAccelerationProfileFlat = accelProfileFlat.checkeddevice.pointerAccelerationProfileAdaptive = accelProfileAdaptive.checkedroot.changeSignal()}}QQC2.RadioButton {id: accelProfileFlattext: i18nd("kcmmouse", "Flat")ToolTip {text: i18nd("kcmmouse", "Cursor moves the same distance as the mouse movement.")}onCheckedChanged: accelProfile.syncCurrent()}QQC2.RadioButton {id: accelProfileAdaptivetext: i18nd("kcmmouse", "Adaptive")ToolTip {text: i18nd("kcmmouse", "Cursor travel distance depends on the mouse movement speed.")}onCheckedChanged: accelProfile.syncCurrent()}}Item {Kirigami.FormData.isSection: false}// ScrollingQQC2.CheckBox {Kirigami.FormData.label: i18nd("kcmmouse", "Scrolling:")id: naturalScrolltext: i18nd("kcmmouse", "Invert scroll direction")function load() {enabled = device.supportsNaturalScrollchecked = enabled && device.naturalScroll}onCheckedChanged: {if (enabled && !root.loading) {device.naturalScroll = checkedroot.changeSignal()}}ToolTip {text: i18nd("kcmmouse", "Touchscreen like scrolling.")}}}}