Warning, /multimedia/elisa/src/qml/AccessibleSlider.qml is written in an unsupported language. File is not indexed.

0001 /*
0002    SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003    SPDX-FileCopyrightText: 2021 (c) Devin Lin <espidev@gmail.com>
0004    SPDX-FileCopyrightText: 2024 (c) Jack Hill <jackhill3103@gmail.com>
0005 
0006    SPDX-License-Identifier: LGPL-3.0-or-later
0007  */
0008 
0009 import QtQuick
0010 import QtQuick.Controls as QQC2
0011 
0012 /**
0013  * A slider that allows setting different step sizes for arrow keys and mouse wheels.
0014  *
0015  * Setting `stepSize` gives the slider tickmarks, which look unappealing for lots of steps.
0016  * If `stepSize` is not set then the Slider's built-in increase() and decrease() functions
0017  * use increments of 0.1, which is much too small for our usage. Hence we have our own
0018  * implementation here. This also means we can define separate step sizes for the arrow keys
0019  * and mouse wheel.
0020  *
0021  * NOTE: The Accessible attached property reads `stepSize` to the user, which may not be used
0022  * when incrementing/decrementing.
0023  */
0024 QQC2.Slider {
0025     id: root
0026 
0027     /**
0028      * The step size for arrow keys
0029      */
0030     property real keyStepSize: stepSize
0031 
0032     /**
0033      * The step size for the mouse wheel
0034      */
0035     property real wheelStepSize: stepSize
0036 
0037     readonly property real __keyStepSize: keyStepSize === null ? 0 : keyStepSize
0038     readonly property real __wheelStepSize: wheelStepSize === null ? 0 : wheelStepSize
0039 
0040     function __move(step: real) {
0041         value = Math.max(from, Math.min(value + step, to))
0042         moved()
0043     }
0044 
0045     Accessible.onDecreaseAction: __move(-__keyStepSize)
0046     Accessible.onIncreaseAction: __move(__keyStepSize)
0047     Keys.onLeftPressed: __move(-__keyStepSize)
0048     Keys.onRightPressed: __move(__keyStepSize)
0049 
0050     MouseArea {
0051         anchors.fill: parent
0052         acceptedButtons: Qt.NoButton
0053         onWheel: wheel => root.__move(root.__wheelStepSize * (wheel.angleDelta.y > 0 ? 1 : -1))
0054     }
0055 }