Bugfix: prevent crash on empty input
This commit is contained in:
parent
3055564a27
commit
4deaddf5d3
@ -81,12 +81,8 @@ bool SIUnitEdit::eventFilter(QObject *, QEvent *event)
|
||||
}
|
||||
}
|
||||
} else if(event->type() == QEvent::FocusOut) {
|
||||
if(!text().isEmpty()) {
|
||||
parseNewValue(1.0);
|
||||
} else {
|
||||
setValueQuiet(_value);
|
||||
emit editingAborted();
|
||||
}
|
||||
parseNewValue(1.0);
|
||||
emit focusLost();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -101,25 +97,29 @@ void SIUnitEdit::setValueQuiet(double value)
|
||||
void SIUnitEdit::parseNewValue(double factor)
|
||||
{
|
||||
QString input = text();
|
||||
// remove optional unit
|
||||
if(input.endsWith(unit)) {
|
||||
input.chop(unit.size());
|
||||
}
|
||||
auto lastChar = input.at(input.size()-1).toLatin1();
|
||||
if(prefixes.indexOf(lastChar) >= 0) {
|
||||
factor = Unit::SIPrefixToFactor(lastChar);
|
||||
input.chop(1);
|
||||
}
|
||||
// remaining input should only contain numbers
|
||||
bool conversion_ok;
|
||||
auto v = input.toDouble(&conversion_ok);
|
||||
if(conversion_ok) {
|
||||
qDebug() << v;
|
||||
setValue(v * factor);
|
||||
if(input.isEmpty()) {
|
||||
setValueQuiet(_value);
|
||||
emit editingAborted();
|
||||
} else {
|
||||
qWarning() << "SIUnit conversion failure:" << input;
|
||||
// remove optional unit
|
||||
if(input.endsWith(unit)) {
|
||||
input.chop(unit.size());
|
||||
}
|
||||
auto lastChar = input.at(input.size()-1).toLatin1();
|
||||
if(prefixes.indexOf(lastChar) >= 0) {
|
||||
factor = Unit::SIPrefixToFactor(lastChar);
|
||||
input.chop(1);
|
||||
}
|
||||
// remaining input should only contain numbers
|
||||
bool conversion_ok;
|
||||
auto v = input.toDouble(&conversion_ok);
|
||||
if(conversion_ok) {
|
||||
setValue(v * factor);
|
||||
} else {
|
||||
qWarning() << "SIUnit conversion failure:" << input;
|
||||
}
|
||||
clear();
|
||||
}
|
||||
clear();
|
||||
}
|
||||
|
||||
void SIUnitEdit::continueEditing()
|
||||
|
@ -21,6 +21,7 @@ signals:
|
||||
void valueChanged(double newvalue);
|
||||
void valueUpdated(QWidget *w);
|
||||
void editingAborted();
|
||||
void focusLost();
|
||||
protected:
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
private:
|
||||
|
@ -499,11 +499,11 @@ SIUnitEdit *TraceMarker::getSettingsEditor()
|
||||
case Type::Noise:
|
||||
case Type::PhaseNoise:
|
||||
default:
|
||||
return new SIUnitEdit("Hz", " kMG");
|
||||
return new SIUnitEdit("Hz", " kMG", 6);
|
||||
case Type::Lowpass:
|
||||
case Type::Highpass:
|
||||
case Type::PeakTable:
|
||||
return new SIUnitEdit("db", " ");
|
||||
return new SIUnitEdit("db", " ", 3);
|
||||
case Type::TOI:
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -316,7 +316,7 @@ QWidget *MarkerSettingsDelegate::createEditor(QWidget *parent, const QStyleOptio
|
||||
e->setMaximumHeight(rowHeight);
|
||||
e->setParent(parent);
|
||||
connect(e, &SIUnitEdit::valueUpdated, this, &MarkerSettingsDelegate::commitData);
|
||||
connect(e, &SIUnitEdit::editingAborted, [=](){
|
||||
connect(e, &SIUnitEdit::focusLost, [=](){
|
||||
marker->editingFrequeny = false;
|
||||
});
|
||||
}
|
||||
@ -327,7 +327,6 @@ void MarkerSettingsDelegate::setModelData(QWidget *editor, QAbstractItemModel *m
|
||||
{
|
||||
auto markerModel = (TraceMarkerModel*) model;
|
||||
auto marker = markerModel->markerFromIndex(index);
|
||||
marker->editingFrequeny = false;
|
||||
auto si = (SIUnitEdit*) editor;
|
||||
markerModel->setData(index, si->value());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user