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 2.15
0006 import QtQuick.Controls 2.15 as Controls
0007 import QtQuick.Templates 2.15 as T
0008 import org.kde.kirigami 2.19 as Kirigami
0009 import "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 
0087     up.indicator: Impl.SpinBoxIndicator {
0088         button: control.up
0089         alignment: Qt.AlignRight
0090         mirrored: control.mirrored
0091     }
0092 
0093     background:Impl.TextEditBackground {
0094         control: control
0095         implicitWidth: Impl.Units.mediumControlHeight * 3 - Impl.Units.smallBorder * 2
0096         implicitHeight: Impl.Units.mediumControlHeight
0097         // Work around SpinBox focus handling flaw
0098         visualFocus: control.visualFocus || (control.contentItem.activeFocus && (
0099             control.contentItem.focusReason == Qt.TabFocusReason ||
0100             control.contentItem.focusReason == Qt.BacktabFocusReason ||
0101             control.contentItem.focusReason == Qt.ShortcutFocusReason
0102         ))
0103     }
0104 }