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<double>()) {
+ if (value.canConvert(QMetaType::Double)) {
utils::setScaleFactor(static_cast<float>(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,
|