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; }
Length::Length(string const & data) : val_(0), unit_(Length::PT) { Length tmp; if (!isValidLength(data, &tmp)) return; // should raise an exception val_ = tmp.val_; unit_ = tmp.unit_; }
void lengthToWidgets(QLineEdit * input, LengthCombo * combo, string const & len, Length::UNIT defaultUnit) { if (len.empty()) { // no length (UNIT_NONE) combo->setCurrentItem(defaultUnit); input->setText(""); } else if (!isValidLength(len) && !isStrDbl(len)) { // use input field only for gluelengths combo->setCurrentItem(defaultUnit); input->setText(toqstr(len)); } else { lengthToWidgets(input, combo, Length(len), defaultUnit); } }
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; }