X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FValidator.cpp;h=6d0ffc0175242391a297dbda0fdb84944774448c;hb=1f10969bb5c5f36017bf5ba8671381b09945cf57;hp=e8e393a689d90acb224241480bb3769359bc0637;hpb=e36fba33abc2e80599b164d91e90e1558225576d;p=lyx.git diff --git a/src/frontends/qt4/Validator.cpp b/src/frontends/qt4/Validator.cpp index e8e393a689..6d0ffc0175 100644 --- a/src/frontends/qt4/Validator.cpp +++ b/src/frontends/qt4/Validator.cpp @@ -15,45 +15,59 @@ #include "Validator.h" #include "qt_helpers.h" -#include "gettext.h" +#include "support/gettext.h" #include "LyXRC.h" #include "frontends/alert.h" -#include "frontends/controllers/Dialog.h" - #include "support/docstring.h" #include "support/lstrings.h" -#include "support/std_ostream.h" #include +#include #include -#include - -using lyx::support::isStrDbl; -using std::string; - +using namespace std; namespace lyx { +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 { - string const text = fromqstr(qtext); - if (text.empty() || isStrDbl(text)) + QLocale loc; + bool 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; - } + } Length l; bool const valid_length = isValidLength(text, &l); @@ -63,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; } @@ -87,49 +104,74 @@ 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) - : LengthValidator(parent) +LengthAutoValidator::LengthAutoValidator(QWidget * parent, QString const & autotext) + : LengthValidator(parent), + autotext_(autotext) {} QValidator::State LengthAutoValidator::validate(QString & qtext, int & dummy) const { - string const text = fromqstr(qtext); - if (text == "auto") + if (qtext == autotext_) return QValidator::Acceptable; return LengthValidator::validate(qtext, dummy); } -LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit * ed) +LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit * ed, QString const & autotext) { - LengthAutoValidator * v = new LengthAutoValidator(ed); + LengthAutoValidator * v = new LengthAutoValidator(ed, autotext); v->setBottom(Length()); + v->setUnsigned(true); return v; } -DoubleAutoValidator::DoubleAutoValidator(QWidget * parent) : - QDoubleValidator(parent) {} +DoubleAutoValidator::DoubleAutoValidator(QWidget * parent, QString const & autotext) + : QDoubleValidator(parent), + autotext_(autotext) +{} DoubleAutoValidator::DoubleAutoValidator(double bottom, - double top, int decimals, QObject * parent) : - QDoubleValidator(bottom, top, decimals, parent) {} + double top, int decimals, QObject * parent) + : QDoubleValidator(bottom, top, decimals, parent) +{} QValidator::State DoubleAutoValidator::validate(QString & input, int & pos) const { - string const text = fromqstr(input); - if (text == "auto") + if (input == autotext_) return QValidator::Acceptable; return QDoubleValidator::validate(input, pos); } +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), @@ -164,9 +206,9 @@ QValidator::State PathValidator::validate(QString & qtext, int &) const if (!latex_doc_) return QValidator::Acceptable; - docstring const text = lyx::support::trim(qstring_to_ucs4(qtext)); + docstring const text = support::trim(qstring_to_ucs4(qtext)); if (text.empty()) - return acceptable_if_empty_ ? + return acceptable_if_empty_ ? QValidator::Acceptable : QValidator::Intermediate; docstring invalid_chars = from_ascii("#$%{}()[]\"^"); @@ -177,7 +219,7 @@ QValidator::State PathValidator::validate(QString & qtext, int &) const static int counter = 0; if (counter == 0) { - lyx::frontend::Alert::error(_("Invalid filename"), + Alert::error(_("Invalid filename"), _("LyX does not provide LaTeX support for file names containing any of these characters:\n") + printable_list(invalid_chars)); } @@ -189,10 +231,9 @@ QValidator::State PathValidator::validate(QString & qtext, int &) const } -void PathValidator::setChecker(lyx::frontend::KernelDocType const & type, - LyXRC const & lyxrc) +void PathValidator::setChecker(KernelDocType const & type, LyXRC const & lyxrc) { - latex_doc_ = type == lyx::frontend::Kernel::LATEX; + latex_doc_ = type == LATEX; tex_allows_spaces_ = lyxrc.tex_allows_spaces; } @@ -207,7 +248,7 @@ PathValidator * getPathValidator(QLineEdit * ed) return dynamic_cast(validator); } +} // namespace frontend } // namespace lyx -#include "Validator_moc.cpp" - +#include "moc_Validator.cpp"