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()
{
- if (haveMultiParSelection()) {
- // FIXME: in case of multi-paragraph selection, it would be nice to
- // initialise the parameters that are common to all paragraphs.
- params_ = ParagraphParameters();
- } else {
- params_ = bufferview()->cursor().innerParagraph().params();
- }
+ params_ = params();
params_.align(getAlignmentFromDialog());
break;
case 4:
ls = Spacing::Other;
- other = fromqstr(linespacingValue->text());
+ other = widgetToDoubleStr(linespacingValue);
break;
}
// label width
params_.labelWidthString(qstring_to_ucs4(labelWidth->text()));
- // indendation
+ // 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());
if (haveMultiParSelection()) {
// FIXME: in case of multi-paragraph selection, it would be nice to
// initialise the parameters that are common to all paragraphs.
- params_ = ParagraphParameters();
- return params_;
+ static ParagraphParameters const empty;
+ return empty;
}
return bufferview()->cursor().innerParagraph().params();
}
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);
}
}
-void GuiParagraph::saveSession() const
+bool GuiParagraph::hasLabelwidth() const
{
- Dialog::saveSession();
- QSettings settings;
+ Layout layout = bufferview()->cursor().innerParagraph().layout();
+ return (layout.margintype == MARGIN_MANUAL
+ || layout.latextype == LATEX_BIB_ENVIRONMENT);
+}
+
+
+void GuiParagraph::saveSession(QSettings & settings) const
+{
+ Dialog::saveSession(settings);
settings.setValue(sessionKey() + "/autoapply", synchronizedViewCB->isChecked());
}
} // namespace frontend
} // namespace lyx
-#include "GuiParagraph_moc.cpp"
+#include "moc_GuiParagraph.cpp"