Skip to content

Commit 84435f0

Browse files
committed
Set speed and velocity factors via text input
1 parent dd304f6 commit 84435f0

File tree

1 file changed

+170
-14
lines changed

1 file changed

+170
-14
lines changed

src/kirigami_ui/EditorToolbar.qml

Lines changed: 170 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,13 +1583,91 @@ ToolBar {
15831583
font.family: iconFont.name
15841584
font.pointSize: 13
15851585
}
1586-
Label {
1587-
text: qsTr("Step speed <pre>%1</pre>", "Step speed 1.00").arg((baseSpeedSlider.value/100).toFixed(2))
1588-
color: Kirigami.Theme.textColor
1589-
Layout.topMargin: 4
1590-
Layout.bottomMargin: -14
1591-
Layout.rightMargin: 3
1592-
Layout.leftMargin: showSliderIcons ? 1 : 8
1586+
MouseArea {
1587+
id: baseSpeedDirectInput
1588+
property bool editText: false
1589+
height: baseSpeedLabel.height
1590+
width: baseSpeedDirectInput.editText ? baseSpeedTextField.width : baseSpeedLabel.width
1591+
onDoubleClicked: {
1592+
if (Qt.platform.os !== "android")
1593+
enterEditMode()
1594+
}
1595+
onPressAndHold: {
1596+
if (Qt.platform.os === "android")
1597+
enterEditMode();
1598+
}
1599+
function enterEditMode() {
1600+
baseSpeedDirectInput.editText = true;
1601+
// baseSpeedTextField.selectAll(); // Uncomment to autoselect when entering edit mode.
1602+
}
1603+
TextField {
1604+
id: baseSpeedTextField
1605+
anchors.fill: parent
1606+
anchors.leftMargin: -2
1607+
anchors.rightMargin: -2
1608+
visible: baseSpeedDirectInput.editText
1609+
readOnly: !visible
1610+
text: ""
1611+
onVisibleChanged: {
1612+
if (visible) {
1613+
text = baseSpeedSlider.value / 100;
1614+
forceActiveFocus();
1615+
}
1616+
}
1617+
onAccepted: {
1618+
if (text !== "") {
1619+
const value = Number(text) * 100;
1620+
if (value < baseSpeedSlider.from)
1621+
baseSpeedSlider.value = baseSpeedSlider.from;
1622+
else if (value > baseSpeedSlider.to)
1623+
baseSpeedSlider.value = baseSpeedSlider.to;
1624+
else
1625+
baseSpeedSlider.value = Math.round(value / baseSpeedSlider.stepSize) * baseSpeedSlider.stepSize;
1626+
text = baseSpeedSlider.value;
1627+
baseSpeedSlider.update();
1628+
}
1629+
}
1630+
onEditingFinished: {
1631+
baseSpeedDirectInput.editText = false;
1632+
}
1633+
Material.theme: Material.Dark
1634+
Keys.onUpPressed: {
1635+
const value = Number(text) * 100 + baseSpeedSlider.stepSize
1636+
if (value > baseSpeedSlider.to)
1637+
baseSpeedSlider.value = baseSpeedSlider.to;
1638+
else {
1639+
if (value < baseSpeedSlider.from)
1640+
baseSpeedSlider.value = baseSpeedSlider.from;
1641+
else
1642+
baseSpeedSlider.value = Math.round(value / baseSpeedSlider.stepSize) * baseSpeedSlider.stepSize;
1643+
}
1644+
text = baseSpeedSlider.value / 100;
1645+
baseSpeedSlider.update();
1646+
}
1647+
Keys.onDownPressed: {
1648+
const value = Number(text) * 100 - baseSpeedSlider.stepSize;
1649+
if (value < baseSpeedSlider.from)
1650+
baseSpeedSlider.value = baseSpeedSlider.from;
1651+
else {
1652+
if (value > baseSpeedSlider.to)
1653+
baseSpeedSlider.value = baseSpeedSlider.to;
1654+
else
1655+
baseSpeedSlider.value = Math.round(value / baseSpeedSlider.stepSize) * baseSpeedSlider.stepSize;
1656+
}
1657+
text = baseSpeedSlider.value / 100;
1658+
baseSpeedSlider.update();
1659+
}
1660+
}
1661+
Label {
1662+
id: baseSpeedLabel
1663+
text: qsTr("Step speed <pre>%1</pre>", "Step speed 1.00").arg((baseSpeedSlider.value/100).toFixed(2))
1664+
visible: !baseSpeedDirectInput.editText
1665+
color: Kirigami.Theme.textColor
1666+
Layout.topMargin: 4
1667+
Layout.bottomMargin: -14
1668+
Layout.rightMargin: 3
1669+
Layout.leftMargin: showSliderIcons ? 1 : 8
1670+
}
15931671
}
15941672
Slider {
15951673
id: baseSpeedSlider
@@ -1624,13 +1702,91 @@ ToolBar {
16241702
font.family: iconFont.name
16251703
font.pointSize: 13
16261704
}
1627-
Label {
1628-
text: qsTr("Step acceleration <pre>%1</pre>", "Step acceleration 1.15").arg((baseAccelerationSlider.value/100).toFixed(2))
1629-
color: Kirigami.Theme.textColor
1630-
Layout.topMargin: 4
1631-
Layout.bottomMargin: -14
1632-
Layout.rightMargin: 3
1633-
Layout.leftMargin: showSliderIcons ? 1 : 8
1705+
MouseArea {
1706+
id: baseAccelerationDirectInput
1707+
property bool editText: false
1708+
height: baseAccelerationLabel.height
1709+
width: baseAccelerationDirectInput.editText ? baseAccelerationTextField.width : baseAccelerationLabel.width
1710+
onDoubleClicked: {
1711+
if (Qt.platform.os !== "android")
1712+
enterEditMode()
1713+
}
1714+
onPressAndHold: {
1715+
if (Qt.platform.os === "android")
1716+
enterEditMode();
1717+
}
1718+
function enterEditMode() {
1719+
baseAccelerationDirectInput.editText = true;
1720+
// baseAccelerationTextField.selectAll(); // Uncomment to autoselect when entering edit mode.
1721+
}
1722+
TextField {
1723+
id: baseAccelerationTextField
1724+
anchors.fill: parent
1725+
anchors.leftMargin: -2
1726+
anchors.rightMargin: -2
1727+
visible: baseAccelerationDirectInput.editText
1728+
readOnly: !visible
1729+
text: ""
1730+
onVisibleChanged: {
1731+
if (visible) {
1732+
text = baseAccelerationSlider.value / 100;
1733+
forceActiveFocus();
1734+
}
1735+
}
1736+
onAccepted: {
1737+
if (text !== "") {
1738+
const value = Number(text) * 100;
1739+
if (value < baseAccelerationSlider.from)
1740+
baseAccelerationSlider.value = baseAccelerationSlider.from;
1741+
else if (value > baseAccelerationSlider.to)
1742+
baseAccelerationSlider.value = baseAccelerationSlider.to;
1743+
else
1744+
baseAccelerationSlider.value = Math.round(value / baseAccelerationSlider.stepSize) * baseAccelerationSlider.stepSize;
1745+
text = baseAccelerationSlider.value;
1746+
baseAccelerationSlider.update();
1747+
}
1748+
}
1749+
onEditingFinished: {
1750+
baseAccelerationDirectInput.editText = false;
1751+
}
1752+
Material.theme: Material.Dark
1753+
Keys.onUpPressed: {
1754+
const value = Number(text) * 100 + baseAccelerationSlider.stepSize
1755+
if (value > baseAccelerationSlider.to)
1756+
baseAccelerationSlider.value = baseAccelerationSlider.to;
1757+
else {
1758+
if (value < baseAccelerationSlider.from)
1759+
baseAccelerationSlider.value = baseAccelerationSlider.from;
1760+
else
1761+
baseAccelerationSlider.value = Math.round(value / baseAccelerationSlider.stepSize) * baseAccelerationSlider.stepSize;
1762+
}
1763+
text = baseAccelerationSlider.value / 100;
1764+
baseAccelerationSlider.update();
1765+
}
1766+
Keys.onDownPressed: {
1767+
const value = Number(text) * 100 - baseAccelerationSlider.stepSize;
1768+
if (value < baseAccelerationSlider.from)
1769+
baseAccelerationSlider.value = baseAccelerationSlider.from;
1770+
else {
1771+
if (value > baseAccelerationSlider.to)
1772+
baseAccelerationSlider.value = baseAccelerationSlider.to;
1773+
else
1774+
baseAccelerationSlider.value = Math.round(value / baseAccelerationSlider.stepSize) * baseAccelerationSlider.stepSize;
1775+
}
1776+
text = baseAccelerationSlider.value / 100;
1777+
baseAccelerationSlider.update();
1778+
}
1779+
}
1780+
Label {
1781+
id: baseAccelerationLabel
1782+
text: qsTr("Step acceleration <pre>%1</pre>", "Step acceleration 1.15").arg((baseAccelerationSlider.value/100).toFixed(2))
1783+
visible: !baseAccelerationDirectInput.editText
1784+
color: Kirigami.Theme.textColor
1785+
Layout.topMargin: 4
1786+
Layout.bottomMargin: -14
1787+
Layout.rightMargin: 3
1788+
Layout.leftMargin: showSliderIcons ? 1 : 8
1789+
}
16341790
}
16351791
Slider {
16361792
id: baseAccelerationSlider

0 commit comments

Comments
 (0)