mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
Fix problems with immediate apply and length validators
Fixes bugs #7022 and #7599.
This commit is contained in:
parent
7b0ecf1f38
commit
9e16608867
@ -72,7 +72,9 @@ GuiParagraph::GuiParagraph(GuiView & lv)
|
||||
#endif
|
||||
|
||||
on_synchronizedViewCB_toggled();
|
||||
linespacingValue->setValidator(new QDoubleValidator(linespacingValue));
|
||||
QDoubleValidator * val = new QDoubleValidator(linespacingValue);
|
||||
val->setNotation(QDoubleValidator::StandardNotation);
|
||||
linespacingValue->setValidator(val);
|
||||
|
||||
labelWidth->setWhatsThis(qt_(
|
||||
"As described in the User Guide, the width of"
|
||||
@ -164,7 +166,10 @@ void GuiParagraph::on_synchronizedViewCB_toggled()
|
||||
|
||||
void GuiParagraph::changed()
|
||||
{
|
||||
if (synchronizedViewCB->isChecked())
|
||||
QLocale loc;
|
||||
if (synchronizedViewCB->isChecked()
|
||||
&& !linespacingValue->text().endsWith(loc.decimalPoint())
|
||||
&& linespacingValue->hasAcceptableInput())
|
||||
on_applyPB_clicked();
|
||||
}
|
||||
|
||||
|
@ -751,7 +751,8 @@ void GuiTabular::paramsToDialog(Inset const * inset)
|
||||
// Set width and alignment
|
||||
|
||||
Length const tabwidth = tabular.tabularWidth();
|
||||
if (tabwidth.zero())
|
||||
if (tabwidth.zero()
|
||||
&& !(tabularWidthED->hasFocus() && tabularWidthED->text() == "0"))
|
||||
tabularWidthED->clear();
|
||||
else
|
||||
lengthToWidgets(tabularWidthED, tabularWidthUnitLC,
|
||||
@ -769,7 +770,8 @@ void GuiTabular::paramsToDialog(Inset const * inset)
|
||||
pwidth = getColumnPWidth(tabular, cell);
|
||||
}
|
||||
string colwidth;
|
||||
if (pwidth.zero())
|
||||
if (pwidth.zero()
|
||||
&& !(columnWidthED->hasFocus() && columnWidthED->text() == "0"))
|
||||
columnWidthED->clear();
|
||||
else {
|
||||
colwidth = pwidth.asString();
|
||||
@ -780,7 +782,8 @@ void GuiTabular::paramsToDialog(Inset const * inset)
|
||||
if (multirow)
|
||||
mroffset = getMROffset(tabular, cell);
|
||||
string offset;
|
||||
if (mroffset.zero())
|
||||
if (mroffset.zero()
|
||||
&& !(multirowOffsetED->hasFocus() && multirowOffsetED->text() == "0"))
|
||||
multirowOffsetED->clear();
|
||||
else {
|
||||
offset = mroffset.asString();
|
||||
|
@ -192,7 +192,8 @@ void InsetParamsDialog::onWidget_changed()
|
||||
{
|
||||
d->changed_ = true;
|
||||
docstring const argument = checkWidgets(immediateApplyCB->isChecked());
|
||||
if (immediateApplyCB->isChecked())
|
||||
if (immediateApplyCB->isChecked()
|
||||
&& d->widget_->checkWidgets(buffer().isReadonly()))
|
||||
dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ namespace frontend {
|
||||
|
||||
LengthValidator::LengthValidator(QWidget * parent)
|
||||
: QValidator(parent),
|
||||
no_bottom_(true), glue_length_(false)
|
||||
no_bottom_(true), glue_length_(false), unsigned_(false)
|
||||
{}
|
||||
|
||||
|
||||
@ -42,20 +42,29 @@ QValidator::State LengthValidator::validate(QString & qtext, int &) const
|
||||
{
|
||||
QLocale loc;
|
||||
bool ok;
|
||||
loc.toDouble(qtext.trimmed(), &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);
|
||||
c.toDouble(qtext.trimmed(), &ok);
|
||||
d = c.toDouble(qtext.trimmed(), &ok);
|
||||
dp = qtext.endsWith(c.decimalPoint());
|
||||
}
|
||||
|
||||
if (qtext.isEmpty() || ok)
|
||||
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;
|
||||
}
|
||||
@ -68,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;
|
||||
}
|
||||
@ -92,6 +104,7 @@ LengthValidator * unsignedLengthValidator(QLineEdit * ed)
|
||||
{
|
||||
LengthValidator * v = new LengthValidator(ed);
|
||||
v->setBottom(Length());
|
||||
v->setUnsigned(true);
|
||||
return v;
|
||||
}
|
||||
|
||||
@ -100,6 +113,7 @@ LengthValidator * unsignedGlueLengthValidator(QLineEdit * ed)
|
||||
{
|
||||
LengthValidator * v = new LengthValidator(ed);
|
||||
v->setBottom(GlueLength());
|
||||
v->setUnsigned(true);
|
||||
return v;
|
||||
}
|
||||
|
||||
@ -122,6 +136,7 @@ LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit * ed, QString const
|
||||
{
|
||||
LengthAutoValidator * v = new LengthAutoValidator(ed, autotext);
|
||||
v->setBottom(Length());
|
||||
v->setUnsigned(true);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -62,6 +62,7 @@ public:
|
||||
void setBottom(Length const &);
|
||||
void setBottom(GlueLength const &);
|
||||
Length bottom() const { return b_; }
|
||||
void setUnsigned(bool const u) { unsigned_ = u; }
|
||||
//@}
|
||||
|
||||
private:
|
||||
@ -69,6 +70,7 @@ private:
|
||||
GlueLength g_;
|
||||
bool no_bottom_;
|
||||
bool glue_length_;
|
||||
bool unsigned_;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user