From c59bb67569bfe997f33410a6dafd2ef31749cd73 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 13 Jan 2022 05:51:57 +0100 Subject: [PATCH] Fix setting double values in setting spinboxes --- resources/qml/pages/UserSettingsPage.qml | 38 +++++++++++++++++++++++- src/UserSettingsPage.cpp | 13 ++++---- src/UserSettingsPage.h | 3 +- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/resources/qml/pages/UserSettingsPage.qml b/resources/qml/pages/UserSettingsPage.qml index 3701784d..71a90a27 100644 --- a/resources/qml/pages/UserSettingsPage.qml +++ b/resources/qml/pages/UserSettingsPage.qml @@ -118,7 +118,7 @@ Rectangle { } } DelegateChoice { - roleValue: UserSettingsModel.Number + roleValue: UserSettingsModel.Integer SpinBox { anchors.right: parent.right @@ -129,6 +129,42 @@ Rectangle { stepSize: model.valueStep value: model.value onValueChanged: model.value = value + editable: true + } + } + DelegateChoice { + roleValue: UserSettingsModel.Double + + SpinBox { + id: spinbox + + readonly property double div: 100 + readonly property int decimals: 2 + + anchors.right: parent.right + width: Math.min(parent.width, implicitWidth) + enabled: !deadTimer.running && model.enabled + from: model.valueLowerBound * div + to: model.valueUpperBound * div + stepSize: model.valueStep * div + value: model.value * div + onValueChanged: model.value = value/div + editable: true + + property real realValue: value / div + + validator: DoubleValidator { + bottom: Math.min(spinbox.from/spinbox.div, spinbox.to/spinbox.div) + top: Math.max(spinbox.from/spinbox.div, spinbox.to/spinbox.div) + } + + textFromValue: function(value, locale) { + return Number(value / spinbox.div).toLocaleString(locale, 'f', spinbox.decimals) + } + + valueFromText: function(text, locale) { + return Number.fromLocaleString(locale, text) * spinbox.div + } } } DelegateChoice { diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index c43727a2..c43733fb 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -1160,9 +1160,10 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return Options; case TimelineMaxWidth: case PrivacyScreenTimeout: + return Integer; case FontSize: case ScaleFactor: - return Number; + return Double; case MessageHoverHighlight: case EnlargeEmojiOnlyMessages: case Tray: @@ -1345,7 +1346,7 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int return false; } case ScaleFactor: { - if (value.canConvert()) { + if (value.canConvert(QMetaType::Double)) { utils::setScaleFactor(static_cast(value.toDouble())); return true; } else @@ -1415,7 +1416,7 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int return false; } case TimelineMaxWidth: { - if (value.userType() == QMetaType::Int) { + if (value.canConvert(QMetaType::Int)) { i->setTimelineMaxWidth(value.toInt()); return true; } else @@ -1472,7 +1473,7 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int return false; } case PrivacyScreenTimeout: { - if (value.userType() == QMetaType::Int) { + if (value.canConvert(QMetaType::Int)) { i->setPrivacyScreenTimeout(value.toInt()); return true; } else @@ -1486,8 +1487,8 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int return false; } case FontSize: { - if (value.userType() == QMetaType::Double) { - i->setFontSize(value.toBool()); + if (value.canConvert(QMetaType::Double)) { + i->setFontSize(value.toDouble()); return true; } else return false; diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index bcf34655..a44e0030 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -438,7 +438,8 @@ public: Toggle, ReadOnlyText, Options, - Number, + Integer, + Double, SectionTitle, SectionBar, KeyStatus,