3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Angus Leeming
9 * Full author contact details are available in file CREDITS.
15 #include "Validator.h"
16 #include "qt_helpers.h"
18 #include "support/gettext.h"
21 #include "frontends/alert.h"
23 #include "support/docstring.h"
24 #include "support/lstrings.h"
35 LengthValidator::LengthValidator(QWidget * parent)
37 no_bottom_(true), glue_length_(false)
41 QValidator::State LengthValidator::validate(QString & qtext, int &) const
45 loc.toDouble(qtext.trimmed(), &ok);
48 QLocale c(QLocale::C);
49 c.toDouble(qtext.trimmed(), &ok);
52 if (qtext.isEmpty() || ok)
53 return QValidator::Acceptable;
55 string const text = fromqstr(qtext);
59 return (isValidGlueLength(text, &gl)) ?
60 QValidator::Acceptable : QValidator::Intermediate;
64 bool const valid_length = isValidLength(text, &l);
66 return QValidator::Intermediate;
69 return QValidator::Acceptable;
71 return b_.inPixels(100) <= l.inPixels(100) ?
72 QValidator::Acceptable : QValidator::Intermediate;
76 void LengthValidator::setBottom(Length const & b)
83 void LengthValidator::setBottom(GlueLength const & g)
91 LengthValidator * unsignedLengthValidator(QLineEdit * ed)
93 LengthValidator * v = new LengthValidator(ed);
94 v->setBottom(Length());
99 LengthValidator * unsignedGlueLengthValidator(QLineEdit * ed)
101 LengthValidator * v = new LengthValidator(ed);
102 v->setBottom(GlueLength());
107 LengthAutoValidator::LengthAutoValidator(QWidget * parent, QString const & autotext)
108 : LengthValidator(parent),
113 QValidator::State LengthAutoValidator::validate(QString & qtext, int & dummy) const
115 if (qtext == autotext_)
116 return QValidator::Acceptable;
117 return LengthValidator::validate(qtext, dummy);
121 LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit * ed, QString const & autotext)
123 LengthAutoValidator * v = new LengthAutoValidator(ed, autotext);
124 v->setBottom(Length());
129 DoubleAutoValidator::DoubleAutoValidator(QWidget * parent, QString const & autotext)
130 : QDoubleValidator(parent),
135 DoubleAutoValidator::DoubleAutoValidator(double bottom,
136 double top, int decimals, QObject * parent)
137 : QDoubleValidator(bottom, top, decimals, parent)
141 QValidator::State DoubleAutoValidator::validate(QString & input, int & pos) const {
142 if (input == autotext_)
143 return QValidator::Acceptable;
144 return QDoubleValidator::validate(input, pos);
148 NoNewLineValidator::NoNewLineValidator(QWidget * parent)
153 QValidator::State NoNewLineValidator::validate(QString & qtext, int &) const
155 qtext.remove(QRegExp("[\\n\\r]"));
156 return QValidator::Acceptable;
160 PathValidator::PathValidator(bool acceptable_if_empty,
162 : QValidator(parent),
163 acceptable_if_empty_(acceptable_if_empty),
165 tex_allows_spaces_(false)
169 static docstring const printable_list(docstring const & invalid_chars)
172 docstring::const_iterator const begin = invalid_chars.begin();
173 docstring::const_iterator const end = invalid_chars.end();
174 docstring::const_iterator it = begin;
176 for (; it != end; ++it) {
189 QValidator::State PathValidator::validate(QString & qtext, int &) const
192 return QValidator::Acceptable;
194 docstring const text = support::trim(qstring_to_ucs4(qtext));
196 return acceptable_if_empty_ ?
197 QValidator::Acceptable : QValidator::Intermediate;
199 docstring invalid_chars = from_ascii("#$%{}()[]\"^");
200 if (!tex_allows_spaces_)
201 invalid_chars += ' ';
203 if (text.find_first_of(invalid_chars) != docstring::npos) {
205 static int counter = 0;
207 Alert::error(_("Invalid filename"),
208 _("LyX does not provide LaTeX support for file names containing any of these characters:\n") +
209 printable_list(invalid_chars));
212 return QValidator::Intermediate;
215 return QValidator::Acceptable;
219 void PathValidator::setChecker(KernelDocType const & type, LyXRC const & lyxrc)
221 latex_doc_ = type == LATEX;
222 tex_allows_spaces_ = lyxrc.tex_allows_spaces;
226 PathValidator * getPathValidator(QLineEdit * ed)
230 QValidator * validator = const_cast<QValidator *>(ed->validator());
233 return dynamic_cast<PathValidator *>(validator);
236 } // namespace frontend
239 #include "moc_Validator.cpp"