Fix setting double values in setting spinboxes

This commit is contained in:
Nicolas Werner 2022-01-13 05:51:57 +01:00
parent 34abae0c42
commit c59bb67569
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
3 changed files with 46 additions and 8 deletions

View file

@ -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 {

View file

@ -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;

View file

@ -438,7 +438,8 @@ public:
Toggle,
ReadOnlyText,
Options,
Number,
Integer,
Double,
SectionTitle,
SectionBar,
KeyStatus,