Improve frequency input validation

Allow group separators as well as decimal points in MHz input fields

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7462 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville
2017-01-08 23:58:00 +00:00
parent 59d1ee3d62
commit 92cd8d9959
5 changed files with 81 additions and 18 deletions
+30 -8
View File
@@ -1,6 +1,7 @@
#include "Radio.hpp"
#include <cmath>
#include <limits>
#include <QString>
#include <QChar>
@@ -19,32 +20,53 @@ namespace Radio
}
Frequency frequency (QVariant const& v, int scale, QLocale const& locale)
Frequency frequency (QVariant const& v, int scale, bool * ok, QLocale const& locale)
{
double value {0};
double value {0.};
if (QVariant::String == v.type ())
{
value = locale.toDouble (v.value<QString> ());
value = locale.toDouble (v.value<QString> (), ok);
}
else
{
value = v.toDouble ();
if (ok) *ok = true;
}
return std::llround (value * std::pow (10., scale));
value *= std::pow (10., scale);
if (ok)
{
if (value < 0. || value > std::numeric_limits<Frequency>::max ())
{
value = 0.;
*ok = false;
}
}
return std::llround (value);
}
FrequencyDelta frequency_delta (QVariant const& v, int scale, QLocale const& locale)
FrequencyDelta frequency_delta (QVariant const& v, int scale, bool * ok, QLocale const& locale)
{
double value {0};
double value {0.};
if (QVariant::String == v.type ())
{
value = locale.toDouble (v.value<QString> ());
value = locale.toDouble (v.value<QString> (), ok);
}
else
{
value = v.toDouble ();
if (ok) *ok = true;
}
return std::llround (value * std::pow (10., scale));
value *= std::pow (10., scale);
if (ok)
{
if (value < -std::numeric_limits<Frequency>::max ()
|| value > std::numeric_limits<Frequency>::max ())
{
value = 0.;
*ok = false;
}
}
return std::llround (value);
}