Skip to content
Snippets Groups Projects
Unverified Commit 125c1ccd authored by Lars Bilke's avatar Lars Bilke Committed by GitHub
Browse files

Merge pull request #2461 from rinkk/doublevalfix

[DE] Re-implementing strict double validation
parents 775186f4 e992d8ce
No related branches found
No related tags found
No related merge requests found
......@@ -17,7 +17,7 @@
/**
* \brief A validator for an input field which only accepts decimals.
* Source code adapted from [Qt developer fac](http://developer.qt.nokia.com/faq/answer/i_can_still_insert_numbers_outside_the_range_specified_with_a_qdoublevalida)
* Source code adapted from [StackOverflow](https://stackoverflow.com/questions/19571033/allow-entry-in-qlineedit-only-within-range-of-qdoublevalidator)
*/
class StrictDoubleValidator : public QDoubleValidator
{
......@@ -34,8 +34,20 @@ public:
{
if (input.isEmpty() || input == "." || input == "-") return Intermediate;
if (QDoubleValidator::validate(input, pos) != Acceptable)
return Invalid;
return Acceptable;
QChar const decimalPoint('.');
if (input.indexOf(decimalPoint) != -1)
{
int const charsAfterPoint = input.length() - input.indexOf(decimalPoint) - 1;
if (charsAfterPoint > decimals())
return QValidator::Invalid;
}
bool ok;
double const d = input.toDouble(&ok);
if (ok && d >= bottom() && d <= top())
return QValidator::Acceptable;
else
return QValidator::Invalid;
}
};
......@@ -391,6 +391,9 @@
<property name="text">
<string/>
</property>
<property name="maxLength">
<number>10</number>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
......@@ -401,6 +404,9 @@
<property name="text">
<string/>
</property>
<property name="maxLength">
<number>10</number>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
......
......@@ -43,11 +43,11 @@ GMSHPrefsDialog::GMSHPrefsDialog(GeoLib::GEOObjects const& geoObjects, QDialog*
param1->setValidator (max_number_of_points_in_quadtree_leaf_validator);
// object will be deleted by Qt
auto* mesh_density_scaling_pnts_validator(
new StrictDoubleValidator(1e-10, 1.0, 5, this->param2));
new StrictDoubleValidator(0, 1, 5, this->param2));
param2->setValidator (mesh_density_scaling_pnts_validator);
// object will be deleted by Qt#
auto* mesh_density_scaling_stations_validator(
new StrictDoubleValidator(1e-10, 1.0, 5, this->param3));
new StrictDoubleValidator(0, 1, 5, this->param3));
param3->setValidator (mesh_density_scaling_stations_validator);
std::vector<std::string> geoNames;
......@@ -147,16 +147,17 @@ void GMSHPrefsDialog::accept()
if (this->radioAdaptive->isChecked())
{
double const min_scaling_factor (1e-10);
max_number_of_points_in_quadtree_leaf = BaseLib::str2number<unsigned> (
param1->text().toStdString().c_str());
if (max_number_of_points_in_quadtree_leaf == 0)
max_number_of_points_in_quadtree_leaf = 10;
mesh_density_scaling_pnts = fabs (param2->text().toDouble());
if (mesh_density_scaling_pnts < sqrt(std::numeric_limits<double>::epsilon()))
mesh_density_scaling_pnts = 0.5;
if (mesh_density_scaling_pnts < min_scaling_factor)
mesh_density_scaling_pnts = min_scaling_factor;
mesh_density_scaling_stations = param3->text().toDouble();
if (mesh_density_scaling_stations < sqrt(std::numeric_limits<double>::epsilon()))
mesh_density_scaling_stations = 0.05;
if (mesh_density_scaling_stations < min_scaling_factor)
mesh_density_scaling_stations = min_scaling_factor;
}
else
val4 = param4->text().toDouble();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment