]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/Validator.cpp
Add missing initialization
[lyx.git] / src / frontends / qt4 / Validator.cpp
index 59655eb004485b2e3ebc5a833d09425aca538d6e..6d0ffc0175242391a297dbda0fdb84944774448c 100644 (file)
@@ -34,21 +34,37 @@ namespace frontend {
 
 LengthValidator::LengthValidator(QWidget * parent)
        : QValidator(parent),
-         no_bottom_(true), glue_length_(false)
+         no_bottom_(true), glue_length_(false), unsigned_(false)
 {}
 
 
 QValidator::State LengthValidator::validate(QString & qtext, int &) const
 {
+       QLocale loc;
        bool ok;
-       qtext.trimmed().toDouble(&ok);
-       if (qtext.isEmpty() || ok)
+       double d = loc.toDouble(qtext.trimmed(), &ok);
+       // QLocale::toDouble accepts something like "1."
+       // We don't.
+       bool dp = qtext.endsWith(loc.decimalPoint());
+       if (!ok) {
+               // Fall back to C
+               QLocale c(QLocale::C);
+               d = c.toDouble(qtext.trimmed(), &ok);
+               dp = qtext.endsWith(c.decimalPoint());
+       }
+
+       if (ok && unsigned_ && d < 0)
+               return QValidator::Invalid;
+
+       if (qtext.isEmpty() || (ok && !dp))
                return QValidator::Acceptable;
 
        string const text = fromqstr(qtext);
 
        if (glue_length_) {
                GlueLength gl;
+               if (unsigned_ && gl.len().value() < 0)
+                       return QValidator::Invalid;
                return (isValidGlueLength(text, &gl)) ?
                        QValidator::Acceptable : QValidator::Intermediate;
        }
@@ -61,6 +77,9 @@ QValidator::State LengthValidator::validate(QString & qtext, int &) const
        if (no_bottom_)
                return QValidator::Acceptable;
 
+       if (unsigned_ && l.value() < 0)
+               return QValidator::Invalid;
+
        return b_.inPixels(100) <= l.inPixels(100) ?
                QValidator::Acceptable : QValidator::Intermediate;
 }
@@ -85,11 +104,21 @@ LengthValidator * unsignedLengthValidator(QLineEdit * ed)
 {
        LengthValidator * v = new LengthValidator(ed);
        v->setBottom(Length());
+       v->setUnsigned(true);
+       return v;
+}
+
+
+LengthValidator * unsignedGlueLengthValidator(QLineEdit * ed)
+{
+       LengthValidator * v = new LengthValidator(ed);
+       v->setBottom(GlueLength());
+       v->setUnsigned(true);
        return v;
 }
 
 
-LengthAutoValidator::LengthAutoValidator(QWidget * parent, QString const autotext)
+LengthAutoValidator::LengthAutoValidator(QWidget * parent, QString const autotext)
        : LengthValidator(parent),
          autotext_(autotext)
 {}
@@ -103,15 +132,16 @@ QValidator::State LengthAutoValidator::validate(QString & qtext, int & dummy) co
 }
 
 
-LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit * ed, QString const autotext)
+LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit * ed, QString const autotext)
 {
        LengthAutoValidator * v = new LengthAutoValidator(ed, autotext);
        v->setBottom(Length());
+       v->setUnsigned(true);
        return v;
 }
 
 
-DoubleAutoValidator::DoubleAutoValidator(QWidget * parent, QString const autotext)
+DoubleAutoValidator::DoubleAutoValidator(QWidget * parent, QString const autotext)
        : QDoubleValidator(parent),
          autotext_(autotext)
 {}
@@ -130,6 +160,18 @@ QValidator::State DoubleAutoValidator::validate(QString & input, int & pos) cons
 }
 
 
+NoNewLineValidator::NoNewLineValidator(QWidget * parent)
+       : QValidator(parent)
+{}
+
+
+QValidator::State NoNewLineValidator::validate(QString & qtext, int &) const
+{
+       qtext.remove(QRegExp("[\\n\\r]"));
+       return QValidator::Acceptable;
+}
+
+
 PathValidator::PathValidator(bool acceptable_if_empty,
                             QWidget * parent)
        : QValidator(parent),