connect(labelWidth, SIGNAL(textChanged(QString)),
this, SLOT(changed()));
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MAC
// On Mac it's common to have tool windows which are always in the
// foreground and are hidden when the main window is not focused.
setWindowFlags(Qt::Tool);
#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"
}
-LyXAlignment GuiParagraph::getAlignmentFromDialog()
+LyXAlignment GuiParagraph::getAlignmentFromDialog() const
{
LyXAlignment alignment = LYX_ALIGN_NONE;
RadioMap::const_iterator it = radioMap_.begin();
void GuiParagraph::changed()
{
- if (synchronizedViewCB->isChecked())
+ QLocale loc;
+ // We apply immediately, except if we have custom line spacing
+ // with an intermediate result (trailing decimal separator) or
+ // an invalid value (which might as well be intermediate)
+ if (synchronizedViewCB->isChecked()
+ && (linespacing->currentIndex() != 4
+ || (!linespacingValue->text().endsWith(loc.decimalPoint())
+ && linespacingValue->hasAcceptableInput())))
on_applyPB_clicked();
}
void GuiParagraph::applyView()
{
- ParagraphParameters & pp = params();
+ params_ = params();
- pp.align(getAlignmentFromDialog());
+ params_.align(getAlignmentFromDialog());
// get spacing
Spacing::Space ls = Spacing::Default;
break;
case 4:
ls = Spacing::Other;
- other = fromqstr(linespacingValue->text());
+ other = widgetToDoubleStr(linespacingValue);
break;
}
Spacing const spacing(ls, other);
- pp.spacing(spacing);
+ params_.spacing(spacing);
// label width
- pp.labelWidthString(qstring_to_ucs4(labelWidth->text()));
- // indendation
- pp.noindent(!indentCB->isChecked());
+ params_.labelWidthString(qstring_to_ucs4(labelWidth->text()));
+ // indentation
+ params_.noindent(!indentCB->isChecked());
dispatchParams();
}
// label width
docstring const & labelwidth = pp.labelWidthString();
- // FIXME We should not compare translated strings
- if (labelwidth != _("Senseless with this layout!")) {
+ if (hasLabelwidth()) {
labelwidthGB->setEnabled(true);
labelWidth->setText(toqstr(labelwidth));
} else {
// linespacing
int ls;
+ bool pending_input = false;
Spacing const & space = pp.spacing();
- switch (space.getSpace()) {
- case Spacing::Single:
- ls = 1;
- break;
- case Spacing::Onehalf:
- ls = 2;
- break;
- case Spacing::Double:
- ls = 3;
- break;
- case Spacing::Other:
+ if (synchronizedViewCB->isChecked() && linespacingValue->hasFocus()) {
+ // The user is about to enter custom spacing.
+ // We thus stay in Custom mode.
+ // This prevents the combo from e.g. immediately
+ // switching to single if a user enters "1" in the
+ // linespacingValue widget while aiming at e.g. "1.3"
ls = 4;
- break;
- default:
- ls = 0;
- break;
+ pending_input = true;
+ } else {
+ switch (space.getSpace()) {
+ case Spacing::Single:
+ ls = 1;
+ break;
+ case Spacing::Onehalf:
+ ls = 2;
+ break;
+ case Spacing::Double:
+ ls = 3;
+ break;
+ case Spacing::Other:
+ ls = 4;
+ break;
+ default:
+ ls = 0;
+ break;
+ }
}
linespacing->setCurrentIndex(ls);
- if (space.getSpace() == Spacing::Other) {
- linespacingValue->setText(toqstr(space.getValueAsString()));
+ if (space.getSpace() == Spacing::Other || pending_input) {
+ doubleToWidget(linespacingValue, space.getValue());
linespacingValue->setEnabled(true);
} else {
linespacingValue->setText(QString());
}
-ParagraphParameters & GuiParagraph::params()
+ParagraphParameters const & GuiParagraph::params() const
{
if (haveMultiParSelection()) {
- multiparsel_ = ParagraphParameters();
- // FIXME: It would be nice to initialise the parameters that
- // are common to all paragraphs.
- return multiparsel_;
+ // FIXME: in case of multi-paragraph selection, it would be nice to
+ // initialise the parameters that are common to all paragraphs.
+ static ParagraphParameters const empty;
+ return empty;
}
-
- return bufferview()->cursor().innerParagraph().params();
-}
-
-
-ParagraphParameters const & GuiParagraph::params() const
-{
return bufferview()->cursor().innerParagraph().params();
}
void GuiParagraph::dispatchParams()
{
- if (haveMultiParSelection()) {
- ostringstream data;
- multiparsel_.write(data);
- FuncRequest const fr(getLfun(), data.str());
- dispatch(fr);
- return;
- }
-
- bufferview()->updateMetrics();
- bufferview()->buffer().changed();
- bufferview()->buffer().markDirty();
+ ostringstream data;
+ params_.write(data);
+ FuncRequest const fr(getLfun(), data.str());
+ dispatch(fr);
}
-bool GuiParagraph::haveMultiParSelection()
+bool GuiParagraph::haveMultiParSelection() const
{
- Cursor cur = bufferview()->cursor();
+ Cursor const & cur = bufferview()->cursor();
return cur.selection() && cur.selBegin().pit() != cur.selEnd().pit();
}
bool GuiParagraph::canIndent() const
{
- return buffer().params().paragraph_separation
- == BufferParams::ParagraphIndentSeparation;
+ Layout const lay = bufferview()->cursor().innerParagraph().layout();
+ if (buffer().params().paragraph_separation
+ == BufferParams::ParagraphIndentSeparation)
+ return (lay.toggle_indent != ITOGGLE_NEVER);
+ return (lay.toggle_indent == ITOGGLE_ALWAYS);
}
}
+bool GuiParagraph::hasLabelwidth() const
+{
+ Layout layout = bufferview()->cursor().innerParagraph().layout();
+ return (layout.margintype == MARGIN_MANUAL
+ || layout.latextype == LATEX_BIB_ENVIRONMENT);
+}
+
+
void GuiParagraph::saveSession() const
{
Dialog::saveSession();
} // namespace frontend
} // namespace lyx
-#include "GuiParagraph_moc.cpp"
+#include "moc_GuiParagraph.cpp"