Fix spinbox glitch on min/max numbers
This commit is contained in:
parent
41bc082044
commit
768a343412
|
@ -3,7 +3,6 @@
|
||||||
- sfx selection
|
- sfx selection
|
||||||
- custom action
|
- custom action
|
||||||
|
|
||||||
- fix spinbox buttons
|
|
||||||
- combo box custom item
|
- combo box custom item
|
||||||
- fix flickable popups can't be flicked by keyboard
|
- fix flickable popups can't be flicked by keyboard
|
||||||
- seen tooltips can't be shown on image hover
|
- seen tooltips can't be shown on image hover
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick 2.12
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls 2.12
|
||||||
|
import QtQuick.Layouts 1.12
|
||||||
|
|
||||||
SpinBox {
|
SpinBox {
|
||||||
id: box
|
id: box
|
||||||
|
@ -11,53 +12,63 @@ SpinBox {
|
||||||
|
|
||||||
function reset() { value = Qt.binding(() => defaultValue || 0) }
|
function reset() { value = Qt.binding(() => defaultValue || 0) }
|
||||||
|
|
||||||
|
|
||||||
// XXX TODO: default binding break
|
|
||||||
value: defaultValue || 0
|
value: defaultValue || 0
|
||||||
implicitHeight: theme.baseElementsHeight
|
implicitHeight: theme.baseElementsHeight
|
||||||
padding: 0
|
padding: 0
|
||||||
editable: true
|
editable: true
|
||||||
|
to: 2147483647
|
||||||
|
|
||||||
background: null
|
background: null
|
||||||
|
|
||||||
contentItem: HTextField {
|
contentItem: HRowLayout {
|
||||||
id: textField
|
HButton {
|
||||||
height: parent.height
|
text: qsTr("-")
|
||||||
implicitWidth: 90 * theme.uiScale
|
font.pixelSize: theme.fontSize.biggest
|
||||||
radius: 0
|
autoRepeat: true
|
||||||
horizontalAlignment: Qt.AlignHCenter
|
autoRepeatInterval: 50
|
||||||
verticalAlignment: Qt.AlignVCenter
|
// Don't set enabled to false or it glitches, use opacity instead
|
||||||
// FIXME
|
opacity: box.value > box.from ? 1 : theme.disabledElementsOpacity
|
||||||
text: box.textFromValue(box.value, box.locale)
|
onPressed: if (box.value > box.from) box.decrease()
|
||||||
|
Layout.fillHeight: true
|
||||||
|
|
||||||
readOnly: ! box.editable
|
Behavior on opacity { HNumberAnimation {} }
|
||||||
validator: box.validator
|
}
|
||||||
inputMethodHints: Qt.ImhFormattedNumbersOnly
|
|
||||||
|
|
||||||
onTextChanged: if (text && text !== "-") box.value = text
|
HTextField {
|
||||||
|
id: textField
|
||||||
|
height: parent.height
|
||||||
|
implicitWidth: 90 * theme.uiScale
|
||||||
|
radius: 0
|
||||||
|
horizontalAlignment: Qt.AlignHCenter
|
||||||
|
verticalAlignment: Qt.AlignVCenter
|
||||||
|
text: box.value
|
||||||
|
|
||||||
|
readOnly: ! box.editable
|
||||||
|
validator: box.validator
|
||||||
|
inputMethodHints: Qt.ImhFormattedNumbersOnly
|
||||||
|
|
||||||
|
onTextEdited: {
|
||||||
|
if (! text || text === "-") return
|
||||||
|
const input = parseInt(text, 10)
|
||||||
|
box.value = Math.max(box.from, Math.min(box.to, input))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HButton {
|
||||||
|
text: qsTr("+")
|
||||||
|
font.pixelSize: theme.fontSize.biggest
|
||||||
|
autoRepeat: true
|
||||||
|
autoRepeatInterval: 50
|
||||||
|
opacity: box.value < box.to ? 1 : theme.disabledElementsOpacity
|
||||||
|
onPressed: if (box.value < box.to) box.increase()
|
||||||
|
Layout.fillHeight: true
|
||||||
|
|
||||||
|
Behavior on opacity { HNumberAnimation {} }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
down.indicator: HButton {
|
down.indicator: null
|
||||||
x: box.mirrored ? parent.width - width : 0
|
up.indicator: null
|
||||||
height: parent.height
|
|
||||||
font.pixelSize: theme.fontSize.biggest
|
|
||||||
text: qsTr("-")
|
|
||||||
autoRepeat: true
|
|
||||||
autoRepeatInterval: 50
|
|
||||||
|
|
||||||
onPressed: box.decrease()
|
|
||||||
}
|
|
||||||
|
|
||||||
up.indicator: HButton {
|
|
||||||
x: box.mirrored ? 0 : parent.width - width
|
|
||||||
height: parent.height
|
|
||||||
font.pixelSize: theme.fontSize.biggest
|
|
||||||
text: qsTr("+")
|
|
||||||
autoRepeat: true
|
|
||||||
autoRepeatInterval: 50
|
|
||||||
|
|
||||||
onPressed: box.increase()
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@ -65,7 +76,7 @@ SpinBox {
|
||||||
cursorShape: textField.hovered ? Qt.IBeamCursor : Qt.ArrowCursor
|
cursorShape: textField.hovered ? Qt.IBeamCursor : Qt.ArrowCursor
|
||||||
onWheel: wheel => {
|
onWheel: wheel => {
|
||||||
wheel.angleDelta.y < 0 ? box.decrease() : box.increase()
|
wheel.angleDelta.y < 0 ? box.decrease() : box.increase()
|
||||||
wheel.accepted()
|
wheel.accepted = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user