commit 1487b198033c74d976b110a3a024c66fd027a20c
Author: Juergen Spitzmueller <[email protected]>
Date:   Mon Aug 8 18:34:34 2022 +0200

    Allow entering localized lengths with unit (#11852)
---
 src/frontends/qt/Validator.cpp  |    8 ++++++--
 src/frontends/qt/qt_helpers.cpp |   14 ++++++++++++++
 src/frontends/qt/qt_helpers.h   |    3 +++
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/frontends/qt/Validator.cpp b/src/frontends/qt/Validator.cpp
index ad1c4f6..baf1011 100644
--- a/src/frontends/qt/Validator.cpp
+++ b/src/frontends/qt/Validator.cpp
@@ -72,8 +72,12 @@ QValidator::State LengthValidator::validate(QString & qtext, 
int &) const
                GlueLength gl;
                if (unsigned_ && gl.len().value() < 0)
                        return QValidator::Invalid;
-               return (isValidGlueLength(text, &gl)) ?
-                       QValidator::Acceptable : QValidator::Intermediate;
+               if (isValidGlueLength(text, &gl))
+                       return QValidator::Acceptable;
+               // Also check for localized variant
+               if (isValidGlueLength(fromqstr(unlocString(qtext)), &gl))
+                       return QValidator::Acceptable;
+               return QValidator::Intermediate;
        }
 
        Length l;
diff --git a/src/frontends/qt/qt_helpers.cpp b/src/frontends/qt/qt_helpers.cpp
index 8372fd9..0cf9c9a 100644
--- a/src/frontends/qt/qt_helpers.cpp
+++ b/src/frontends/qt/qt_helpers.cpp
@@ -99,6 +99,9 @@ string widgetsToLength(QLineEdit const * input, LengthCombo 
const * combo)
        // Don't return unit-from-choice if the input(field) contains a unit
        if (isValidGlueLength(fromqstr(length)))
                return fromqstr(length);
+       // Also try with localized version
+       if (isValidGlueLength(fromqstr(unlocString(length))))
+               return fromqstr(unlocString(length));
 
        Length::UNIT const unit = combo->currentLengthItem();
 
@@ -115,6 +118,9 @@ Length widgetsToLength(QLineEdit const * input, QComboBox 
const * combo)
        // don't return unit-from-choice if the input(field) contains a unit
        if (isValidGlueLength(fromqstr(length)))
                return Length(fromqstr(length));
+       // Also try with localized version
+       if (isValidGlueLength(fromqstr(unlocString(length))))
+               return Length(fromqstr(unlocString(length)));
 
        Length::UNIT unit = Length::UNIT_NONE;
        QString const item = combo->currentText();
@@ -208,6 +214,14 @@ QString formatLocFPNumber(double d)
 }
 
 
+QString unlocString(QString const & str)
+{
+       QLocale loc;
+       QString res = str;
+       return res.replace(loc.decimalPoint(), QString("."));
+}
+
+
 bool SortLocaleAware(QString const & lhs, QString const & rhs)
 {
        return QString::localeAwareCompare(lhs, rhs) < 0;
diff --git a/src/frontends/qt/qt_helpers.h b/src/frontends/qt/qt_helpers.h
index 08d50fa..8248de8 100644
--- a/src/frontends/qt/qt_helpers.h
+++ b/src/frontends/qt/qt_helpers.h
@@ -72,6 +72,9 @@ void doubleToWidget(QLineEdit * input, std::string const & 
value,
  */
 QString formatLocFPNumber(double d);
 
+// Method to replace localized decimal separator by dot
+QString unlocString(QString const & str);
+
 /// Method to sort QStrings locale-aware (e.g. in combo widgets)
 bool SortLocaleAware(QString const & lhs, QString const & rhs);
 
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to