QValidator::State LengthValidator::validate(QString & qtext, int &) const { bool ok; qtext.trimmed().toDouble(&ok); if (qtext.isEmpty() || ok) return QValidator::Acceptable; string const text = fromqstr(qtext); if (glue_length_) { GlueLength gl; return (isValidGlueLength(text, &gl)) ? QValidator::Acceptable : QValidator::Intermediate; } Length l; bool const valid_length = isValidLength(text, &l); if (!valid_length) return QValidator::Intermediate; if (no_bottom_) return QValidator::Acceptable; return b_.inPixels(100) <= l.inPixels(100) ? QValidator::Acceptable : QValidator::Intermediate; }
VSpace::VSpace(string const & data) : kind_(DEFSKIP), len_(), keep_(false) { if (data.empty()) return; string input = rtrim(data); size_t const length = input.length(); if (length > 1 && input[length - 1] == '*') { keep_ = true; input.erase(length - 1); } if (prefixIs(input, "defskip")) kind_ = DEFSKIP; else if (prefixIs(input, "smallskip")) kind_ = SMALLSKIP; else if (prefixIs(input, "medskip")) kind_ = MEDSKIP; else if (prefixIs(input, "bigskip")) kind_ = BIGSKIP; else if (prefixIs(input, "vfill")) kind_ = VFILL; else if (isValidGlueLength(input, &len_)) kind_ = LENGTH; else if (isStrDbl(input)) { // This last one is for reading old .lyx files // without units in added_space_top/bottom. // Let unit default to centimeters here. kind_ = LENGTH; len_ = GlueLength(Length(convert<double>(input), Length::CM)); } }
HSpace::HSpace(string const & data) : kind_(DEFAULT), len_() { if (data.empty()) return; string input = rtrim(data); if (prefixIs(input, "default")) kind_ = DEFAULT; else if (isValidGlueLength(input, &len_)) kind_ = LENGTH; }
string widgetsToLength(QLineEdit const * input, LengthCombo const * combo) { QString const length = input->text(); if (length.isEmpty()) return string(); // Don't return unit-from-choice if the input(field) contains a unit if (isValidGlueLength(fromqstr(length))) return fromqstr(length); Length::UNIT const unit = combo->currentLengthItem(); return Length(locstringToDouble(length.trimmed()), unit).asString(); }
QValidator::State LengthValidator::validate(QString & qtext, int &) const { 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); if (!valid_length) return QValidator::Intermediate; 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; }
Length widgetsToLength(QLineEdit const * input, QComboBox const * combo) { QString const length = input->text(); if (length.isEmpty()) return Length(); // don't return unit-from-choice if the input(field) contains a unit if (isValidGlueLength(fromqstr(length))) return Length(fromqstr(length)); Length::UNIT unit = Length::UNIT_NONE; QString const item = combo->currentText(); for (int i = 0; i < num_units; i++) { if (qt_(lyx::unit_name_gui[i]) == item) { unit = unitFromString(unit_name[i]); break; } } return Length(locstringToDouble(length.trimmed()), unit); }
GlueLength::GlueLength(string const & data) { isValidGlueLength(data, this); }