X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiParagraph.cpp;h=6cad13767308076f0881beec28e7ee244d43d5a6;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=713f5e084b71c80ed490b86b9c02025c389ffa31;hpb=42015a8ebd17092c9b55c9519015119d04f52218;p=lyx.git diff --git a/src/frontends/qt4/GuiParagraph.cpp b/src/frontends/qt4/GuiParagraph.cpp index 713f5e084b..6cad137673 100644 --- a/src/frontends/qt4/GuiParagraph.cpp +++ b/src/frontends/qt4/GuiParagraph.cpp @@ -15,49 +15,39 @@ #include "GuiParagraph.h" +#include "qt_helpers.h" + #include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" #include "Cursor.h" -#include "debug.h" -//#include "DialogView.h" -//#include "DockView.h" #include "FuncRequest.h" -#include "gettext.h" #include "GuiView.h" #include "Lexer.h" #include "Paragraph.h" #include "ParagraphParameters.h" -#include "qt_helpers.h" #include "Spacing.h" +#include "support/debug.h" +#include "support/gettext.h" + #include -#include #include #include - -#include +#include +#include #include -using std::istringstream; -using std::ostringstream; -using std::string; -using std::endl; +using namespace std; namespace lyx { namespace frontend { GuiParagraph::GuiParagraph(GuiView & lv) - : Dialog(lv) + : DialogView(lv, "paragraph", qt_("Paragraph Settings")) { setupUi(this); - setWindowTitle(qt_("Paragraph Settings")); - - //setModal(modal); - QGridLayout * gridLayout = new QGridLayout(this); - gridLayout->setMargin(0); - gridLayout->addWidget(this); connect(alignDefaultRB, SIGNAL(clicked()), this, SLOT(changed())); connect(alignJustRB, SIGNAL(clicked()), this, SLOT(changed())); @@ -71,12 +61,20 @@ GuiParagraph::GuiParagraph(GuiView & lv) connect(labelWidth, SIGNAL(textChanged(QString)), this, SLOT(changed())); - +#ifdef Q_WS_MACX + // 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); + synchronizedViewCB->setChecked(true); + closePB->setText(qt_("&Cancel")); +#else synchronizedViewCB->setChecked(false); +#endif + on_synchronizedViewCB_toggled(); linespacingValue->setValidator(new QDoubleValidator(linespacingValue)); - labelWidth->setWhatsThis( qt_( + labelWidth->setWhatsThis(qt_( "As described in the User Guide, the width of" " this text determines the width of the label part" " of each item in environments like List and" @@ -87,18 +85,13 @@ GuiParagraph::GuiParagraph(GuiView & lv) " items is used." )); - radioMap[LYX_ALIGN_LAYOUT] = alignDefaultRB; - radioMap[LYX_ALIGN_BLOCK] = alignJustRB; - radioMap[LYX_ALIGN_LEFT] = alignLeftRB; - radioMap[LYX_ALIGN_RIGHT] = alignRightRB; - radioMap[LYX_ALIGN_CENTER] = alignCenterRB; + radioMap_[LYX_ALIGN_LAYOUT] = alignDefaultRB; + radioMap_[LYX_ALIGN_BLOCK] = alignJustRB; + radioMap_[LYX_ALIGN_LEFT] = alignLeftRB; + radioMap_[LYX_ALIGN_RIGHT] = alignRightRB; + radioMap_[LYX_ALIGN_CENTER] = alignCenterRB; - labelMap[LYX_ALIGN_BLOCK] = _("Justified"); - labelMap[LYX_ALIGN_LEFT] = _("Left"); - labelMap[LYX_ALIGN_RIGHT] = _("Right"); - labelMap[LYX_ALIGN_CENTER] = _("Center"); - - const_cast(alignDefaultLabel) = alignDefaultRB->text(); + alignDefaultLabel_ = alignDefaultRB->text(); } @@ -110,25 +103,31 @@ void GuiParagraph::on_linespacing_activated(int index) void GuiParagraph::checkAlignmentRadioButtons() { - RadioMap::iterator it = radioMap.begin(); - for (; it != radioMap.end(); ++it) { + static std::map labelMap_; + if (labelMap_.empty()) { + labelMap_[LYX_ALIGN_BLOCK] = qt_("Justified"); + labelMap_[LYX_ALIGN_LEFT] = qt_("Left"); + labelMap_[LYX_ALIGN_RIGHT] = qt_("Right"); + labelMap_[LYX_ALIGN_CENTER] = qt_("Center"); + } + + RadioMap::iterator it = radioMap_.begin(); + for (; it != radioMap_.end(); ++it) { LyXAlignment const align = it->first; it->second->setEnabled(align & alignPossible()); } - if (haveMulitParSelection()) - alignDefaultRB->setText(alignDefaultLabel); + if (haveMultiParSelection()) + alignDefaultRB->setText(alignDefaultLabel_); else - alignDefaultRB->setText(alignDefaultLabel + " (" - + toqstr(labelMap[alignDefault()]) + ")"); + alignDefaultRB->setText(alignDefaultLabel_ + " (" + + labelMap_[alignDefault()] + ")"); } void GuiParagraph::alignmentToRadioButtons(LyXAlignment align) { - RadioMap::const_iterator it = radioMap.begin(); - for (;it != radioMap.end(); ++it) { - if (!it->second->isEnabled()) - continue; + RadioMap::const_iterator it = radioMap_.begin(); + for (;it != radioMap_.end(); ++it) { it->second->blockSignals(true); it->second->setChecked(align == it->first); it->second->blockSignals(false); @@ -136,11 +135,11 @@ void GuiParagraph::alignmentToRadioButtons(LyXAlignment align) } -LyXAlignment GuiParagraph::getAlignmentFromDialog() +LyXAlignment GuiParagraph::getAlignmentFromDialog() const { LyXAlignment alignment = LYX_ALIGN_NONE; - RadioMap::const_iterator it = radioMap.begin(); - for (; it != radioMap.end(); ++it) { + RadioMap::const_iterator it = radioMap_.begin(); + for (; it != radioMap_.end(); ++it) { if (it->second->isChecked()) { alignment = it->first; break; @@ -155,6 +154,11 @@ void GuiParagraph::on_synchronizedViewCB_toggled() bool in_sync = synchronizedViewCB->isChecked(); restorePB->setEnabled(!in_sync); applyPB->setEnabled(!in_sync); + okPB->setEnabled(!in_sync); + if (!in_sync) + closePB->setText(qt_("&Cancel")); + else + closePB->setText(qt_("&Close")); } @@ -167,9 +171,34 @@ void GuiParagraph::changed() void GuiParagraph::on_applyPB_clicked() { - ParagraphParameters & pp = params(); + applyView(); +} + + +void GuiParagraph::on_okPB_clicked() +{ + applyView(); + hide(); +} + + +void GuiParagraph::on_closePB_clicked() +{ + hide(); +} + + +void GuiParagraph::on_restorePB_clicked() +{ + updateView(); +} + + +void GuiParagraph::applyView() +{ + params_ = params(); - pp.align(getAlignmentFromDialog()); + params_.align(getAlignmentFromDialog()); // get spacing Spacing::Space ls = Spacing::Default; @@ -189,28 +218,22 @@ void GuiParagraph::on_applyPB_clicked() 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())); + params_.labelWidthString(qstring_to_ucs4(labelWidth->text())); // indendation - pp.noindent(!indentCB->isChecked()); + params_.noindent(!indentCB->isChecked()); dispatchParams(); } -void GuiParagraph::on_restorePB_clicked() -{ - updateView(); -} - - void GuiParagraph::updateView() { on_synchronizedViewCB_toggled(); @@ -219,13 +242,12 @@ void GuiParagraph::updateView() // 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 { labelwidthGB->setEnabled(false); - labelWidth->setText(""); + labelWidth->setText(QString()); } // alignment @@ -259,7 +281,7 @@ void GuiParagraph::updateView() } linespacing->setCurrentIndex(ls); if (space.getSpace() == Spacing::Other) { - linespacingValue->setText(toqstr(space.getValueAsString())); + doubleToWidget(linespacingValue, space.getValue()); linespacingValue->setEnabled(true); } else { linespacingValue->setText(QString()); @@ -268,78 +290,96 @@ void GuiParagraph::updateView() } -ParagraphParameters & GuiParagraph::params() +void GuiParagraph::enableView(bool enable) { - if (haveMulitParSelection()) { - multiparsel_ = ParagraphParameters(); - // FIXME: It would be nice to initialise the parameters that - // are common to all paragraphs. - return multiparsel_; - } - - return bufferview()->cursor().innerParagraph().params(); + indentCB->setEnabled(enable); + linespacing->setEnabled(enable); + labelWidth->setEnabled(enable); + synchronizedViewCB->setEnabled(enable); + applyPB->setEnabled(enable); + restorePB->setEnabled(enable); + if (!enable) + synchronizedViewCB->setChecked(true); + RadioMap::const_iterator it = radioMap_.begin(); + for (; it != radioMap_.end(); ++it) + it->second->setEnabled(enable); } ParagraphParameters const & GuiParagraph::params() const { + if (haveMultiParSelection()) { + // FIXME: in case of multi-paragraph selection, it would be nice to + // initialise the parameters that are common to all paragraphs. + static ParagraphParameters empty; + return empty; + } return bufferview()->cursor().innerParagraph().params(); } void GuiParagraph::dispatchParams() { - if (haveMulitParSelection()) { - ostringstream data; - multiparsel_.write(data); - FuncRequest const fr(LFUN_PARAGRAPH_PARAMS_APPLY, data.str()); - dispatch(fr); - return; - } - - bufferview()->updateMetrics(); - bufferview()->buffer().changed(); + ostringstream data; + params_.write(data); + FuncRequest const fr(getLfun(), data.str()); + dispatch(fr); } -bool GuiParagraph::haveMulitParSelection() +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::PARSEP_INDENT; + return buffer().params().paragraph_separation + == BufferParams::ParagraphIndentSeparation; } LyXAlignment GuiParagraph::alignPossible() const { - return bufferview()->cursor().innerParagraph().layout()->alignpossible; + return bufferview()->cursor().innerParagraph().layout().alignpossible; } LyXAlignment GuiParagraph::alignDefault() const { - return bufferview()->cursor().innerParagraph().layout()->align; + return bufferview()->cursor().innerParagraph().layout().align; } -Dialog * createGuiParagraph(GuiView & lv) +bool GuiParagraph::hasLabelwidth() const { -#if 0 - GuiView & guiview = static_cast(lv); -#ifdef USE_DOCK_WIDGET - return new DockView(guiview, "paragraph", - Qt::TopDockWidgetArea); -#else - return new DialogView(guiview, "paragraph"); -#endif -#endif + Layout layout = bufferview()->cursor().innerParagraph().layout(); + return (layout.margintype == MARGIN_MANUAL + || layout.latextype == LATEX_BIB_ENVIRONMENT); +} + + +void GuiParagraph::saveSession() const +{ + Dialog::saveSession(); + QSettings settings; + settings.setValue(sessionKey() + "/autoapply", synchronizedViewCB->isChecked()); +} + +void GuiParagraph::restoreSession() +{ + Dialog::restoreSession(); + QSettings settings; + synchronizedViewCB->setChecked( + settings.value(sessionKey() + "/autoapply").toBool()); +} + + +Dialog * createGuiParagraph(GuiView & lv) +{ return new GuiParagraph(lv); } @@ -347,4 +387,4 @@ Dialog * createGuiParagraph(GuiView & lv) } // namespace frontend } // namespace lyx -#include "GuiParagraph_moc.cpp" +#include "moc_GuiParagraph.cpp"