Warning, /plasma/qqc2-breeze-style/style/qtquickcontrols/SpinBox.qml is written in an unsupported language. File is not indexed.

0001 /* SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com>
0002  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003  */
0004 
0005 import QtQuick
0006 import QtQuick.Controls as Controls
0007 import QtQuick.Templates as T
0008 import org.kde.kirigami as Kirigami
0009 import org.kde.breeze.impl as Impl
0010 
0011 T.SpinBox {
0012     id: control
0013     property real __downIndicatorWidth: down.indicator ? down.indicator.width : 0
0014     property real __upIndicatorWidth: up.indicator ? up.indicator.width : 0
0015     property real __leftIndicatorWidth: control.mirrored ? __upIndicatorWidth : __downIndicatorWidth
0016     property real __rightIndicatorWidth: control.mirrored ? __downIndicatorWidth : __upIndicatorWidth
0017 
0018     implicitWidth: Math.max(
0019         implicitBackgroundWidth + leftInset + rightInset,
0020         implicitContentWidth + leftPadding + rightPadding,
0021         up.implicitIndicatorWidth + down.implicitIndicatorWidth
0022     )
0023     implicitHeight: Math.max(
0024         implicitBackgroundHeight + topInset + bottomInset,
0025         implicitContentHeight + topPadding + bottomPadding,
0026         up.implicitIndicatorHeight,
0027         down.implicitIndicatorHeight
0028     )
0029 
0030     hoverEnabled: Qt.styleHints.useHoverEffects
0031 
0032     Kirigami.Theme.colorSet: control.editable ? Kirigami.Theme.View : Kirigami.Theme.Button
0033     Kirigami.Theme.inherit: !Boolean(background)
0034 
0035     editable: true
0036     inputMethodHints: Qt.ImhDigitsOnly
0037     wheelEnabled: true
0038 
0039     padding: Kirigami.Units.mediumSpacing
0040     leftPadding: __leftIndicatorWidth
0041     rightPadding: __rightIndicatorWidth
0042     spacing: Kirigami.Units.mediumSpacing
0043 
0044     validator: IntValidator {
0045         locale: control.locale.name
0046         bottom: Math.min(control.from, control.to)
0047         top: Math.max(control.from, control.to)
0048     }
0049 
0050     down.indicator: Impl.SpinBoxIndicator {
0051         button: control.down
0052         alignment: Qt.AlignLeft
0053         mirrored: control.mirrored
0054     }
0055 
0056     /* NOTE: There is a flaw in QQC2 SpinBox with how focus is handled.
0057      * Unless you make the TextInput unfocusable (not what you want),
0058      * you can't detect whether or not a spinbox has activeFocus or visualFocus.
0059      * This is because the TextInput takes the focus.
0060      * In order to detect if a SpinBox is focused, you must trust that the
0061      * contentItem will be the part that takes the focus.
0062      */
0063 
0064     contentItem: Controls.TextField {
0065         palette: control.palette
0066         leftPadding: control.spacing
0067         rightPadding: control.spacing
0068         topPadding: 0
0069         bottomPadding: 0
0070         // Intentionally using anchors so that left/right
0071         // control padding can be used like it normally would
0072         text: control.displayText
0073         font: control.font
0074         color: Kirigami.Theme.textColor
0075         selectionColor: Kirigami.Theme.highlightColor
0076         selectedTextColor: Kirigami.Theme.highlightedTextColor
0077         horizontalAlignment: Qt.AlignHCenter
0078         verticalAlignment: Qt.AlignVCenter
0079 
0080         readOnly: !control.editable
0081         validator: control.validator
0082         inputMethodHints: control.inputMethodHints
0083         selectByMouse: true // Should this be disabled for mobile?
0084         background: null
0085 
0086         // Since the contentItem receives focus (we make them editable by default),
0087         // the screen reader reads its Accessible properties instead of the SpinBox's
0088         Accessible.name: control.Accessible.name
0089         Accessible.description: control.Accessible.description
0090     }
0091 
0092     up.indicator: Impl.SpinBoxIndicator {
0093         button: control.up
0094         alignment: Qt.AlignRight
0095         mirrored: control.mirrored
0096     }
0097 
0098     background:Impl.TextEditBackground {
0099         control: control
0100         implicitWidth: Impl.Units.mediumControlHeight * 3 - Impl.Units.smallBorder * 2
0101         implicitHeight: Impl.Units.mediumControlHeight
0102         // Work around SpinBox focus handling flaw
0103         visualFocus: control.visualFocus || (control.contentItem.activeFocus && (
0104             control.contentItem.focusReason == Qt.TabFocusReason ||
0105             control.contentItem.focusReason == Qt.BacktabFocusReason ||
0106             control.contentItem.focusReason == Qt.ShortcutFocusReason
0107         ))
0108     }
0109 }