2 * \file GuiDocument.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "GuiDocument.h"
15 #include "FloatPlacement.h"
16 #include "LengthCombo.h"
17 #include "PanelStack.h"
18 #include "qt_helpers.h"
19 #include "Validator.h"
21 // For the Branches module
22 #include "GuiBranches.h"
24 #include "GuiViewSource.h" // For latexHighlighter use in the preamble.
26 #include "frontend_helpers.h"
27 #include "BufferParams.h"
31 #include "LyXRC.h" // defaultUnit
32 #include "TextClassList.h"
35 #include "insets/InsetListingsParams.h"
37 #include "support/lstrings.h"
39 #include <boost/bind.hpp>
41 #include <QCloseEvent>
43 #include <QTextCursor>
47 using lyx::support::token;
48 using lyx::support::bformat;
49 using lyx::support::findToken;
50 using lyx::support::getVectorFromString;
61 std::vector<typename Pair::second_type> const
62 getSecond(std::vector<Pair> const & pr)
64 std::vector<typename Pair::second_type> tmp(pr.size());
65 std::transform(pr.begin(), pr.end(), tmp.begin(),
66 boost::bind(&Pair::second, _1));
70 char const * const tex_graphics[] =
72 "default", "dvips", "dvitops", "emtex",
73 "ln", "oztex", "textures", "none", ""
77 char const * const tex_graphics_gui[] =
79 N_("Default"), "Dvips", "DVItoPS", "EmTeX",
80 "LN", "OzTeX", "Textures", N_("None"), ""
84 char const * const tex_fonts_roman[] =
86 "default", "cmr", "lmodern", "ae", "times", "palatino",
87 "charter", "newcent", "bookman", "utopia", "beraserif",
88 "ccfonts", "chancery", ""
92 char const * tex_fonts_roman_gui[] =
94 N_("Default"), N_("Computer Modern Roman"), N_("Latin Modern Roman"),
95 N_("AE (Almost European)"), N_("Times Roman"), N_("Palatino"),
96 N_("Bitstream Charter"), N_("New Century Schoolbook"), N_("Bookman"),
97 N_("Utopia"), N_("Bera Serif"), N_("Concrete Roman"), N_("Zapf Chancery"),
102 char const * const tex_fonts_sans[] =
104 "default", "cmss", "lmss", "helvet", "avant", "berasans", "cmbr", ""
108 char const * tex_fonts_sans_gui[] =
110 N_("Default"), N_("Computer Modern Sans"), N_("Latin Modern Sans"),
111 N_("Helvetica"), N_("Avant Garde"), N_("Bera Sans"), N_("CM Bright"), ""
115 char const * const tex_fonts_monospaced[] =
117 "default", "cmtt", "lmtt", "courier", "beramono", "luximono", "cmtl", ""
121 char const * tex_fonts_monospaced_gui[] =
123 N_("Default"), N_("Computer Modern Typewriter"),
124 N_("Latin Modern Typewriter"), N_("Courier"), N_("Bera Mono"),
125 N_("LuxiMono"), N_("CM Typewriter Light"), ""
129 vector<pair<string, lyx::docstring> > pagestyles;
135 /////////////////////////////////////////////////////////////////////
139 /////////////////////////////////////////////////////////////////////
141 PreambleModule::PreambleModule(): current_id_(0)
143 // This is not a memory leak. The object will be destroyed
145 (void) new LaTeXHighlighter(preambleTE->document());
146 setFocusProxy(preambleTE);
147 connect(preambleTE, SIGNAL(textChanged()), this, SIGNAL(changed()));
151 void PreambleModule::update(BufferParams const & params, BufferId id)
153 QString preamble = toqstr(params.preamble);
154 // Nothing to do if the params and preamble are unchanged.
155 if (id == current_id_
156 && preamble == preambleTE->document()->toPlainText())
159 QTextCursor cur = preambleTE->textCursor();
160 // Save the coords before switching to the new one.
161 preamble_coords_[current_id_] =
162 make_pair(cur.position(), preambleTE->verticalScrollBar()->value());
164 // Save the params address for further use.
166 preambleTE->document()->setPlainText(preamble);
167 Coords::const_iterator it = preamble_coords_.find(current_id_);
168 if (it == preamble_coords_.end())
169 // First time we open this one.
170 preamble_coords_[current_id_] = make_pair(0,0);
172 // Restore saved coords.
173 QTextCursor cur = preambleTE->textCursor();
174 cur.setPosition(it->second.first);
175 preambleTE->setTextCursor(cur);
176 preambleTE->verticalScrollBar()->setValue(it->second.second);
181 void PreambleModule::apply(BufferParams & params)
183 params.preamble = fromqstr(preambleTE->document()->toPlainText());
187 void PreambleModule::closeEvent(QCloseEvent * e)
189 // Save the coords before closing.
190 QTextCursor cur = preambleTE->textCursor();
191 preamble_coords_[current_id_] =
192 make_pair(cur.position(), preambleTE->verticalScrollBar()->value());
197 /////////////////////////////////////////////////////////////////////
201 /////////////////////////////////////////////////////////////////////
205 GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
206 : GuiDialog(lv, "document")
209 setController(new ControlDocument(*this));
210 setViewTitle(_("Document Settings"));
212 lang_ = getSecond(getLanguageData(false));
214 connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
215 connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
216 connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
217 connect(restorePB, SIGNAL(clicked()), this, SLOT(slotRestore()));
219 connect(savePB, SIGNAL(clicked()), this, SLOT(saveDefaultClicked()));
220 connect(defaultPB, SIGNAL(clicked()), this, SLOT(useDefaultsClicked()));
222 // Manage the restore, ok, apply, restore and cancel/close buttons
223 bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
225 bc().setApply(applyPB);
226 bc().setCancel(closePB);
227 bc().setRestore(restorePB);
229 textLayoutModule = new UiWidget<Ui::TextLayoutUi>;
231 connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)),
232 this, SLOT(change_adaptor()));
233 connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)),
234 this, SLOT(setLSpacing(int)));
235 connect(textLayoutModule->lspacingLE, SIGNAL(textChanged(const QString&)),
236 this, SLOT(change_adaptor()));
237 connect(textLayoutModule->skipRB, SIGNAL(clicked()),
238 this, SLOT(change_adaptor()));
239 connect(textLayoutModule->indentRB, SIGNAL(clicked()),
240 this, SLOT(change_adaptor()));
241 connect(textLayoutModule->skipCO, SIGNAL(activated(int)),
242 this, SLOT(change_adaptor()));
243 connect(textLayoutModule->skipLE, SIGNAL(textChanged(const QString &)),
244 this, SLOT(change_adaptor()));
245 connect(textLayoutModule->skipLengthCO, SIGNAL(activated(int)),
246 this, SLOT(change_adaptor()));
247 connect(textLayoutModule->skipCO, SIGNAL(activated(int)),
248 this, SLOT(setSkip(int)));
249 connect(textLayoutModule->skipRB, SIGNAL(toggled(bool)),
250 this, SLOT(enableSkip(bool)));
251 connect(textLayoutModule->twoColumnCB, SIGNAL(clicked()),
252 this, SLOT(change_adaptor()));
253 connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
254 this, SLOT(change_adaptor()));
255 connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
256 this, SLOT(change_adaptor()));
257 connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
258 this, SLOT(set_listings_msg()));
259 connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
260 this, SLOT(set_listings_msg()));
261 textLayoutModule->listingsTB->setPlainText(
262 qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
263 textLayoutModule->lspacingLE->setValidator(new QDoubleValidator(
264 textLayoutModule->lspacingLE));
265 textLayoutModule->skipLE->setValidator(unsignedLengthValidator(
266 textLayoutModule->skipLE));
268 textLayoutModule->skipCO->addItem(qt_("SmallSkip"));
269 textLayoutModule->skipCO->addItem(qt_("MedSkip"));
270 textLayoutModule->skipCO->addItem(qt_("BigSkip"));
271 textLayoutModule->skipCO->addItem(qt_("Length"));
272 // remove the %-items from the unit choice
273 textLayoutModule->skipLengthCO->noPercents();
274 textLayoutModule->lspacingCO->insertItem(
275 Spacing::Single, qt_("Single"));
276 textLayoutModule->lspacingCO->insertItem(
277 Spacing::Onehalf, qt_("OneHalf"));
278 textLayoutModule->lspacingCO->insertItem(
279 Spacing::Double, qt_("Double"));
280 textLayoutModule->lspacingCO->insertItem(
281 Spacing::Other, qt_("Custom"));
283 // initialize the length validator
284 bc().addCheckedLineEdit(textLayoutModule->skipLE);
286 fontModule = new UiWidget<Ui::FontUi>;
288 connect(fontModule->fontsRomanCO, SIGNAL(activated(int)),
289 this, SLOT(change_adaptor()));
290 connect(fontModule->fontsRomanCO, SIGNAL(activated(int)),
291 this, SLOT(romanChanged(int)));
292 connect(fontModule->fontsSansCO, SIGNAL(activated(int)),
293 this, SLOT(change_adaptor()));
294 connect(fontModule->fontsSansCO, SIGNAL(activated(int)),
295 this, SLOT(sansChanged(int)));
296 connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)),
297 this, SLOT(change_adaptor()));
298 connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)),
299 this, SLOT(ttChanged(int)));
300 connect(fontModule->fontsDefaultCO, SIGNAL(activated(int)),
301 this, SLOT(change_adaptor()));
302 connect(fontModule->fontsizeCO, SIGNAL(activated(int)),
303 this, SLOT(change_adaptor()));
304 connect(fontModule->scaleSansSB, SIGNAL(valueChanged(int)),
305 this, SLOT(change_adaptor()));
306 connect(fontModule->scaleTypewriterSB, SIGNAL(valueChanged(int)),
307 this, SLOT(change_adaptor()));
308 connect(fontModule->fontScCB, SIGNAL(clicked()),
309 this, SLOT(change_adaptor()));
310 connect(fontModule->fontOsfCB, SIGNAL(clicked()),
311 this, SLOT(change_adaptor()));
313 for (int n = 0; tex_fonts_roman[n][0]; ++n) {
314 QString font = qt_(tex_fonts_roman_gui[n]);
315 if (!controller().isFontAvailable(tex_fonts_roman[n]))
316 font += qt_(" (not installed)");
317 fontModule->fontsRomanCO->addItem(font);
319 for (int n = 0; tex_fonts_sans[n][0]; ++n) {
320 QString font = qt_(tex_fonts_sans_gui[n]);
321 if (!controller().isFontAvailable(tex_fonts_sans[n]))
322 font += qt_(" (not installed)");
323 fontModule->fontsSansCO->addItem(font);
325 for (int n = 0; tex_fonts_monospaced[n][0]; ++n) {
326 QString font = qt_(tex_fonts_monospaced_gui[n]);
327 if (!controller().isFontAvailable(tex_fonts_monospaced[n]))
328 font += qt_(" (not installed)");
329 fontModule->fontsTypewriterCO->addItem(font);
332 fontModule->fontsizeCO->addItem(qt_("Default"));
333 fontModule->fontsizeCO->addItem(qt_("10"));
334 fontModule->fontsizeCO->addItem(qt_("11"));
335 fontModule->fontsizeCO->addItem(qt_("12"));
337 for (int n = 0; ControlDocument::fontfamilies_gui[n][0]; ++n)
338 fontModule->fontsDefaultCO->addItem(
339 qt_(ControlDocument::fontfamilies_gui[n]));
342 pageLayoutModule = new UiWidget<Ui::PageLayoutUi>;
344 connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
345 this, SLOT(setCustomPapersize(int)));
346 connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
347 this, SLOT(setCustomPapersize(int)));
348 connect(pageLayoutModule->portraitRB, SIGNAL(clicked()),
349 this, SLOT(portraitChanged()));
350 connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
351 this, SLOT(change_adaptor()));
352 connect(pageLayoutModule->paperheightLE, SIGNAL(textChanged(const QString &)),
353 this, SLOT(change_adaptor()));
354 connect(pageLayoutModule->paperwidthLE, SIGNAL(textChanged(const QString &)),
355 this, SLOT(change_adaptor()));
356 connect(pageLayoutModule->paperwidthUnitCO, SIGNAL(activated(int)),
357 this, SLOT(change_adaptor()));
358 connect(pageLayoutModule->paperheightUnitCO, SIGNAL(activated(int)),
359 this, SLOT(change_adaptor()));
360 connect(pageLayoutModule->portraitRB, SIGNAL(clicked()),
361 this, SLOT(change_adaptor()));
362 connect(pageLayoutModule->landscapeRB, SIGNAL(clicked()),
363 this, SLOT(change_adaptor()));
364 connect(pageLayoutModule->facingPagesCB, SIGNAL(clicked()),
365 this, SLOT(change_adaptor()));
366 connect(pageLayoutModule->pagestyleCO, SIGNAL(activated(int)),
367 this, SLOT(change_adaptor()));
369 pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
370 pageLayoutModule->pagestyleCO->addItem(qt_("empty"));
371 pageLayoutModule->pagestyleCO->addItem(qt_("plain"));
372 pageLayoutModule->pagestyleCO->addItem(qt_("headings"));
373 pageLayoutModule->pagestyleCO->addItem(qt_("fancy"));
374 bc().addCheckedLineEdit(pageLayoutModule->paperheightLE,
375 pageLayoutModule->paperheightL);
376 bc().addCheckedLineEdit(pageLayoutModule->paperwidthLE,
377 pageLayoutModule->paperwidthL);
380 QComboBox * cb = pageLayoutModule->papersizeCO;
381 cb->addItem(qt_("Default"));
382 cb->addItem(qt_("Custom"));
383 cb->addItem(qt_("US letter"));
384 cb->addItem(qt_("US legal"));
385 cb->addItem(qt_("US executive"));
386 cb->addItem(qt_("A3"));
387 cb->addItem(qt_("A4"));
388 cb->addItem(qt_("A5"));
389 cb->addItem(qt_("B3"));
390 cb->addItem(qt_("B4"));
391 cb->addItem(qt_("B5"));
392 // remove the %-items from the unit choice
393 pageLayoutModule->paperwidthUnitCO->noPercents();
394 pageLayoutModule->paperheightUnitCO->noPercents();
395 pageLayoutModule->paperheightLE->setValidator(unsignedLengthValidator(
396 pageLayoutModule->paperheightLE));
397 pageLayoutModule->paperwidthLE->setValidator(unsignedLengthValidator(
398 pageLayoutModule->paperwidthLE));
401 marginsModule = new UiWidget<Ui::MarginsUi>;
403 connect(marginsModule->marginCB, SIGNAL(toggled(bool)),
404 this, SLOT(setCustomMargins(bool)));
405 connect(marginsModule->marginCB, SIGNAL(clicked()),
406 this, SLOT(change_adaptor()));
407 connect(marginsModule->topLE, SIGNAL(textChanged(const QString &)),
408 this, SLOT(change_adaptor()));
409 connect(marginsModule->topUnit, SIGNAL(activated(int)),
410 this, SLOT(change_adaptor()));
411 connect(marginsModule->bottomLE, SIGNAL(textChanged(const QString &)),
412 this, SLOT(change_adaptor()));
413 connect(marginsModule->bottomUnit, SIGNAL(activated(int)),
414 this, SLOT(change_adaptor()));
415 connect(marginsModule->innerLE, SIGNAL(textChanged(const QString &)),
416 this, SLOT(change_adaptor()));
417 connect(marginsModule->innerUnit, SIGNAL(activated(int)),
418 this, SLOT(change_adaptor()));
419 connect(marginsModule->outerLE, SIGNAL(textChanged(const QString &)),
420 this, SLOT(change_adaptor()));
421 connect(marginsModule->outerUnit, SIGNAL(activated(int)),
422 this, SLOT(change_adaptor()));
423 connect(marginsModule->headheightLE, SIGNAL(textChanged(const QString &)),
424 this, SLOT(change_adaptor()));
425 connect(marginsModule->headheightUnit, SIGNAL(activated(int)),
426 this, SLOT(change_adaptor()));
427 connect(marginsModule->headsepLE, SIGNAL(textChanged(const QString &)),
428 this, SLOT(change_adaptor()));
429 connect(marginsModule->headsepUnit, SIGNAL(activated(int)),
430 this, SLOT(change_adaptor()));
431 connect(marginsModule->footskipLE, SIGNAL(textChanged(const QString&)),
432 this, SLOT(change_adaptor()));
433 connect(marginsModule->footskipUnit, SIGNAL(activated(int)),
434 this, SLOT(change_adaptor()));
435 marginsModule->topLE->setValidator(unsignedLengthValidator(
436 marginsModule->topLE));
437 marginsModule->bottomLE->setValidator(unsignedLengthValidator(
438 marginsModule->bottomLE));
439 marginsModule->innerLE->setValidator(unsignedLengthValidator(
440 marginsModule->innerLE));
441 marginsModule->outerLE->setValidator(unsignedLengthValidator(
442 marginsModule->outerLE));
443 marginsModule->headsepLE->setValidator(unsignedLengthValidator(
444 marginsModule->headsepLE));
445 marginsModule->headheightLE->setValidator(unsignedLengthValidator(
446 marginsModule->headheightLE));
447 marginsModule->footskipLE->setValidator(unsignedLengthValidator(
448 marginsModule->footskipLE));
450 bc().addCheckedLineEdit(marginsModule->topLE,
451 marginsModule->topL);
452 bc().addCheckedLineEdit(marginsModule->bottomLE,
453 marginsModule->bottomL);
454 bc().addCheckedLineEdit(marginsModule->innerLE,
455 marginsModule->innerL);
456 bc().addCheckedLineEdit(marginsModule->outerLE,
457 marginsModule->outerL);
458 bc().addCheckedLineEdit(marginsModule->headsepLE,
459 marginsModule->headsepL);
460 bc().addCheckedLineEdit(marginsModule->headheightLE,
461 marginsModule->headheightL);
462 bc().addCheckedLineEdit(marginsModule->footskipLE,
463 marginsModule->footskipL);
466 langModule = new UiWidget<Ui::LanguageUi>;
467 connect(langModule->defaultencodingCB, SIGNAL(toggled(bool)),
468 langModule->encodingL, SLOT(setDisabled(bool)));
469 connect(langModule->defaultencodingCB, SIGNAL(toggled(bool)),
470 langModule->encodingCO, SLOT(setDisabled(bool)));
472 connect(langModule->languageCO, SIGNAL(activated(int)),
473 this, SLOT(change_adaptor()));
474 connect(langModule->defaultencodingCB, SIGNAL(clicked()),
475 this, SLOT(change_adaptor()));
476 connect(langModule->encodingCO, SIGNAL(activated(int)),
477 this, SLOT(change_adaptor()));
478 connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
479 this, SLOT(change_adaptor()));
481 vector<LanguagePair> const langs = getLanguageData(false);
482 vector<LanguagePair>::const_iterator lit = langs.begin();
483 vector<LanguagePair>::const_iterator lend = langs.end();
484 for (; lit != lend; ++lit) {
485 langModule->languageCO->addItem(toqstr(lit->first));
488 // Always put the default encoding in the first position.
489 // It is special because the displayed text is translated.
490 langModule->encodingCO->addItem(qt_("LaTeX default"));
491 Encodings::const_iterator it = encodings.begin();
492 Encodings::const_iterator const end = encodings.end();
493 for (; it != end; ++it)
494 langModule->encodingCO->addItem(toqstr(it->latexName()));
496 langModule->quoteStyleCO->addItem(qt_("``text''"));
497 langModule->quoteStyleCO->addItem(qt_("''text''"));
498 langModule->quoteStyleCO->addItem(qt_(",,text``"));
499 langModule->quoteStyleCO->addItem(qt_(",,text''"));
500 langModule->quoteStyleCO->addItem(qt_("<<text>>"));
501 langModule->quoteStyleCO->addItem(qt_(">>text<<"));
505 numberingModule = new UiWidget<Ui::NumberingUi>;
507 connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
508 this, SLOT(change_adaptor()));
509 connect(numberingModule->tocSL, SIGNAL(valueChanged(int)),
510 this, SLOT(change_adaptor()));
511 connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
512 this, SLOT(updateNumbering()));
513 connect(numberingModule->tocSL, SIGNAL(valueChanged(int)),
514 this, SLOT(updateNumbering()));
515 numberingModule->tocTW->setColumnCount(3);
516 numberingModule->tocTW->headerItem()->setText(0, qt_("Example"));
517 numberingModule->tocTW->headerItem()->setText(1, qt_("Numbered"));
518 numberingModule->tocTW->headerItem()->setText(2, qt_("Appears in TOC"));
521 biblioModule = new UiWidget<Ui::BiblioUi>;
522 connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)),
523 biblioModule->citationStyleL, SLOT(setEnabled(bool)));
524 connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)),
525 biblioModule->citeStyleCO, SLOT(setEnabled(bool)));
527 connect(biblioModule->citeDefaultRB, SIGNAL(clicked()),
528 this, SLOT(change_adaptor()));
529 connect(biblioModule->citeNatbibRB, SIGNAL(clicked()),
530 this, SLOT(change_adaptor()));
531 connect(biblioModule->citeStyleCO, SIGNAL(activated(int)),
532 this, SLOT(change_adaptor()));
533 connect(biblioModule->citeJurabibRB, SIGNAL(clicked()),
534 this, SLOT(change_adaptor()));
535 connect(biblioModule->bibtopicCB, SIGNAL(clicked()),
536 this, SLOT(change_adaptor()));
538 biblioModule->citeStyleCO->addItem(qt_("Author-year"));
539 biblioModule->citeStyleCO->addItem(qt_("Numerical"));
540 biblioModule->citeStyleCO->setCurrentIndex(0);
543 mathsModule = new UiWidget<Ui::MathsUi>;
544 connect(mathsModule->amsautoCB, SIGNAL(toggled(bool)),
545 mathsModule->amsCB, SLOT(setDisabled(bool)));
546 connect(mathsModule->esintautoCB, SIGNAL(toggled(bool)),
547 mathsModule->esintCB, SLOT(setDisabled(bool)));
549 connect(mathsModule->amsCB, SIGNAL(clicked()),
550 this, SLOT(change_adaptor()));
551 connect(mathsModule->amsautoCB, SIGNAL(clicked()),
552 this, SLOT(change_adaptor()));
553 connect(mathsModule->esintCB, SIGNAL(clicked()),
554 this, SLOT(change_adaptor()));
555 connect(mathsModule->esintautoCB, SIGNAL(clicked()),
556 this, SLOT(change_adaptor()));
558 latexModule = new UiWidget<Ui::LaTeXUi>;
560 connect(latexModule->classCO, SIGNAL(activated(int)),
561 this, SLOT(change_adaptor()));
562 connect(latexModule->optionsLE, SIGNAL(textChanged(const QString &)),
563 this, SLOT(change_adaptor()));
564 connect(latexModule->psdriverCO, SIGNAL(activated(int)),
565 this, SLOT(change_adaptor()));
566 connect(latexModule->classCO, SIGNAL(activated(int)),
567 this, SLOT(classChanged()));
569 for (int n = 0; tex_graphics[n][0]; ++n) {
570 QString enc = qt_(tex_graphics_gui[n]);
571 latexModule->psdriverCO->addItem(enc);
574 for (TextClassList::const_iterator cit = textclasslist.begin();
575 cit != textclasslist.end(); ++cit) {
576 if (cit->isTeXClassAvailable()) {
577 latexModule->classCO->addItem(toqstr(cit->description()));
580 bformat(_("Unavailable: %1$s"), from_utf8(cit->description()));
581 latexModule->classCO->addItem(toqstr(item));
586 branchesModule = new GuiBranches;
587 connect(branchesModule, SIGNAL(changed()),
588 this, SLOT(change_adaptor()));
591 preambleModule = new PreambleModule;
592 connect(preambleModule, SIGNAL(changed()),
593 this, SLOT(change_adaptor()));
596 bulletsModule = new BulletsModule;
597 connect(bulletsModule, SIGNAL(changed()),
598 this, SLOT(change_adaptor()));
602 floatModule = new FloatPlacement;
603 connect(floatModule, SIGNAL(changed()),
604 this, SLOT(change_adaptor()));
606 docPS->addPanel(latexModule, _("Document Class"));
607 docPS->addPanel(fontModule, _("Fonts"));
608 docPS->addPanel(textLayoutModule, _("Text Layout"));
609 docPS->addPanel(pageLayoutModule, _("Page Layout"));
610 docPS->addPanel(marginsModule, _("Page Margins"));
611 docPS->addPanel(langModule, _("Language"));
612 docPS->addPanel(numberingModule, _("Numbering & TOC"));
613 docPS->addPanel(biblioModule, _("Bibliography"));
614 docPS->addPanel(mathsModule, _("Math Options"));
615 docPS->addPanel(floatModule, _("Float Placement"));
616 docPS->addPanel(bulletsModule, _("Bullets"));
617 docPS->addPanel(branchesModule, _("Branches"));
618 docPS->addPanel(preambleModule, _("LaTeX Preamble"));
619 docPS->setCurrentPanel(_("Document Class"));
620 // FIXME: hack to work around resizing bug in Qt >= 4.2
621 // bug verified with Qt 4.2.{0-3} (JSpitzm)
622 #if QT_VERSION >= 0x040200
623 docPS->updateGeometry();
628 ControlDocument & GuiDocumentDialog::controller()
630 return static_cast<ControlDocument &>(GuiDialog::controller());
634 void GuiDocumentDialog::showPreamble()
636 docPS->setCurrentPanel(_("LaTeX Preamble"));
640 void GuiDocumentDialog::saveDefaultClicked()
646 void GuiDocumentDialog::useDefaultsClicked()
652 void GuiDocumentDialog::change_adaptor()
658 docstring GuiDocumentDialog::validate_listings_params()
660 // use a cache here to avoid repeated validation
661 // of the same parameters
662 static string param_cache = string();
663 static docstring msg_cache = docstring();
665 if (textLayoutModule->bypassCB->isChecked())
668 string params = fromqstr(textLayoutModule->listingsED->toPlainText());
669 if (params != param_cache) {
670 param_cache = params;
671 msg_cache = InsetListingsParams(params).validate();
677 void GuiDocumentDialog::set_listings_msg()
679 static bool isOK = true;
680 docstring msg = validate_listings_params();
685 // listingsTB->setTextColor("black");
686 textLayoutModule->listingsTB->setPlainText(
687 qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
690 // listingsTB->setTextColor("red");
691 textLayoutModule->listingsTB->setPlainText(toqstr(msg));
696 void GuiDocumentDialog::closeEvent(QCloseEvent * e)
703 void GuiDocumentDialog::setLSpacing(int item)
705 textLayoutModule->lspacingLE->setEnabled(item == 3);
709 void GuiDocumentDialog::setSkip(int item)
711 bool const enable = (item == 3);
712 textLayoutModule->skipLE->setEnabled(enable);
713 textLayoutModule->skipLengthCO->setEnabled(enable);
717 void GuiDocumentDialog::enableSkip(bool skip)
719 textLayoutModule->skipCO->setEnabled(skip);
720 textLayoutModule->skipLE->setEnabled(skip);
721 textLayoutModule->skipLengthCO->setEnabled(skip);
723 setSkip(textLayoutModule->skipCO->currentIndex());
726 void GuiDocumentDialog::portraitChanged()
728 setMargins(pageLayoutModule->papersizeCO->currentIndex());
731 void GuiDocumentDialog::setMargins(bool custom)
733 marginsModule->marginCB->setChecked(custom);
734 setCustomMargins(custom);
738 void GuiDocumentDialog::setCustomPapersize(int papersize)
740 bool const custom = (papersize == 1);
742 pageLayoutModule->paperwidthL->setEnabled(custom);
743 pageLayoutModule->paperwidthLE->setEnabled(custom);
744 pageLayoutModule->paperwidthUnitCO->setEnabled(custom);
745 pageLayoutModule->paperheightL->setEnabled(custom);
746 pageLayoutModule->paperheightLE->setEnabled(custom);
747 pageLayoutModule->paperheightLE->setFocus();
748 pageLayoutModule->paperheightUnitCO->setEnabled(custom);
752 void GuiDocumentDialog::setCustomMargins(bool custom)
754 marginsModule->topL->setEnabled(!custom);
755 marginsModule->topLE->setEnabled(!custom);
756 marginsModule->topUnit->setEnabled(!custom);
758 marginsModule->bottomL->setEnabled(!custom);
759 marginsModule->bottomLE->setEnabled(!custom);
760 marginsModule->bottomUnit->setEnabled(!custom);
762 marginsModule->innerL->setEnabled(!custom);
763 marginsModule->innerLE->setEnabled(!custom);
764 marginsModule->innerUnit->setEnabled(!custom);
766 marginsModule->outerL->setEnabled(!custom);
767 marginsModule->outerLE->setEnabled(!custom);
768 marginsModule->outerUnit->setEnabled(!custom);
770 marginsModule->headheightL->setEnabled(!custom);
771 marginsModule->headheightLE->setEnabled(!custom);
772 marginsModule->headheightUnit->setEnabled(!custom);
774 marginsModule->headsepL->setEnabled(!custom);
775 marginsModule->headsepLE->setEnabled(!custom);
776 marginsModule->headsepUnit->setEnabled(!custom);
778 marginsModule->footskipL->setEnabled(!custom);
779 marginsModule->footskipLE->setEnabled(!custom);
780 marginsModule->footskipUnit->setEnabled(!custom);
784 void GuiDocumentDialog::updateFontsize(string const & items, string const & sel)
786 fontModule->fontsizeCO->clear();
787 fontModule->fontsizeCO->addItem(qt_("Default"));
789 for (int n = 0; !token(items,'|',n).empty(); ++n)
790 fontModule->fontsizeCO->
791 addItem(toqstr(token(items,'|',n)));
793 for (int n = 0; n < fontModule->fontsizeCO->count(); ++n) {
794 if (fromqstr(fontModule->fontsizeCO->itemText(n)) == sel) {
795 fontModule->fontsizeCO->setCurrentIndex(n);
802 void GuiDocumentDialog::romanChanged(int item)
804 string const font = tex_fonts_roman[item];
805 fontModule->fontScCB->setEnabled(controller().providesSC(font));
806 fontModule->fontOsfCB->setEnabled(controller().providesOSF(font));
810 void GuiDocumentDialog::sansChanged(int item)
812 string const font = tex_fonts_sans[item];
813 bool scaleable = controller().providesScale(font);
814 fontModule->scaleSansSB->setEnabled(scaleable);
815 fontModule->scaleSansLA->setEnabled(scaleable);
819 void GuiDocumentDialog::ttChanged(int item)
821 string const font = tex_fonts_monospaced[item];
822 bool scaleable = controller().providesScale(font);
823 fontModule->scaleTypewriterSB->setEnabled(scaleable);
824 fontModule->scaleTypewriterLA->setEnabled(scaleable);
828 void GuiDocumentDialog::updatePagestyle(string const & items, string const & sel)
831 pageLayoutModule->pagestyleCO->clear();
832 pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
834 for (int n = 0; !token(items,'|',n).empty(); ++n) {
835 string style = token(items, '|', n);
836 docstring style_gui = _(style);
837 pagestyles.push_back(pair<string, docstring>(style, style_gui));
838 pageLayoutModule->pagestyleCO->addItem(toqstr(style_gui));
841 if (sel == "default") {
842 pageLayoutModule->pagestyleCO->setCurrentIndex(0);
848 for (size_t i = 0; i < pagestyles.size(); ++i)
849 if (pagestyles[i].first == sel)
850 nn = pageLayoutModule->pagestyleCO->findText(
851 toqstr(pagestyles[i].second));
854 pageLayoutModule->pagestyleCO->setCurrentIndex(nn);
858 void GuiDocumentDialog::classChanged()
860 BufferParams & params = controller().params();
861 textclass_type const tc = latexModule->classCO->currentIndex();
862 params.setJustBaseClass(tc);
863 if (lyxrc.auto_reset_options)
864 params.useClassDefaults();
869 void GuiDocumentDialog::updateNumbering()
871 TextClass const & tclass = controller().params().getTextClass();
873 numberingModule->tocTW->setUpdatesEnabled(false);
874 numberingModule->tocTW->clear();
876 int const depth = numberingModule->depthSL->value();
877 int const toc = numberingModule->tocSL->value();
878 QString const no = qt_("No");
879 QString const yes = qt_("Yes");
880 TextClass::const_iterator end = tclass.end();
881 TextClass::const_iterator cit = tclass.begin();
882 QTreeWidgetItem * item = 0;
883 for ( ; cit != end ; ++cit) {
884 int const toclevel = (*cit)->toclevel;
885 if (toclevel != Layout::NOT_IN_TOC
886 && (*cit)->labeltype == LABEL_COUNTER) {
887 item = new QTreeWidgetItem(numberingModule->tocTW);
888 item->setText(0, toqstr(translateIfPossible((*cit)->name())));
889 item->setText(1, (toclevel <= depth) ? yes : no);
890 item->setText(2, (toclevel <= toc) ? yes : no);
894 numberingModule->tocTW->setUpdatesEnabled(true);
895 numberingModule->tocTW->update();
898 void GuiDocumentDialog::apply(BufferParams & params)
901 preambleModule->apply(params);
904 params.setCiteEngine(biblio::ENGINE_BASIC);
906 if (biblioModule->citeNatbibRB->isChecked()) {
907 bool const use_numerical_citations =
908 biblioModule->citeStyleCO->currentIndex();
909 if (use_numerical_citations)
910 params.setCiteEngine(biblio::ENGINE_NATBIB_NUMERICAL);
912 params.setCiteEngine(biblio::ENGINE_NATBIB_AUTHORYEAR);
914 } else if (biblioModule->citeJurabibRB->isChecked())
915 params.setCiteEngine(biblio::ENGINE_JURABIB);
917 params.use_bibtopic =
918 biblioModule->bibtopicCB->isChecked();
921 if (langModule->defaultencodingCB->isChecked()) {
922 params.inputenc = "auto";
924 int i = langModule->encodingCO->currentIndex();
926 params.inputenc = "default";
929 fromqstr(langModule->encodingCO->currentText());
932 InsetQuotes::quote_language lga = InsetQuotes::EnglishQ;
933 switch (langModule->quoteStyleCO->currentIndex()) {
935 lga = InsetQuotes::EnglishQ;
938 lga = InsetQuotes::SwedishQ;
941 lga = InsetQuotes::GermanQ;
944 lga = InsetQuotes::PolishQ;
947 lga = InsetQuotes::FrenchQ;
950 lga = InsetQuotes::DanishQ;
953 params.quotes_language = lga;
955 int const pos = langModule->languageCO->currentIndex();
956 params.language = lyx::languages.getLanguage(lang_[pos]);
959 if (params.getTextClass().hasTocLevels()) {
960 params.tocdepth = numberingModule->tocSL->value();
961 params.secnumdepth = numberingModule->depthSL->value();
965 params.user_defined_bullet(0) = bulletsModule->getBullet(0);
966 params.user_defined_bullet(1) = bulletsModule->getBullet(1);
967 params.user_defined_bullet(2) = bulletsModule->getBullet(2);
968 params.user_defined_bullet(3) = bulletsModule->getBullet(3);
971 params.graphicsDriver =
972 tex_graphics[latexModule->psdriverCO->currentIndex()];
974 if (mathsModule->amsautoCB->isChecked()) {
975 params.use_amsmath = BufferParams::package_auto;
977 if (mathsModule->amsCB->isChecked())
978 params.use_amsmath = BufferParams::package_on;
980 params.use_amsmath = BufferParams::package_off;
983 if (mathsModule->esintautoCB->isChecked())
984 params.use_esint = BufferParams::package_auto;
986 if (mathsModule->esintCB->isChecked())
987 params.use_esint = BufferParams::package_on;
989 params.use_esint = BufferParams::package_off;
993 params.setJustBaseClass(latexModule->classCO->currentIndex());
995 if (pageLayoutModule->pagestyleCO->currentIndex() == 0)
996 params.pagestyle = "default";
998 docstring style_gui =
999 qstring_to_ucs4(pageLayoutModule->pagestyleCO->currentText());
1000 for (size_t i = 0; i < pagestyles.size(); ++i)
1001 if (pagestyles[i].second == style_gui)
1002 params.pagestyle = pagestyles[i].first;
1005 switch (textLayoutModule->lspacingCO->currentIndex()) {
1007 params.spacing().set(Spacing::Single);
1010 params.spacing().set(Spacing::Onehalf);
1013 params.spacing().set(Spacing::Double);
1016 params.spacing().set(Spacing::Other,
1017 fromqstr(textLayoutModule->lspacingLE->text()));
1021 if (textLayoutModule->twoColumnCB->isChecked())
1026 // text should have passed validation
1027 params.listings_params =
1028 InsetListingsParams(fromqstr(textLayoutModule->listingsED->toPlainText())).params();
1030 if (textLayoutModule->indentRB->isChecked())
1031 params.paragraph_separation = BufferParams::PARSEP_INDENT;
1033 params.paragraph_separation = BufferParams::PARSEP_SKIP;
1035 switch (textLayoutModule->skipCO->currentIndex()) {
1037 params.setDefSkip(VSpace(VSpace::SMALLSKIP));
1040 params.setDefSkip(VSpace(VSpace::MEDSKIP));
1043 params.setDefSkip(VSpace(VSpace::BIGSKIP));
1048 widgetsToLength(textLayoutModule->skipLE,
1049 textLayoutModule->skipLengthCO)
1051 params.setDefSkip(vs);
1055 // DocumentDefskipCB assures that this never happens
1056 // so Assert then !!! - jbl
1057 params.setDefSkip(VSpace(VSpace::MEDSKIP));
1062 fromqstr(latexModule->optionsLE->text());
1064 params.float_placement = floatModule->get();
1068 tex_fonts_roman[fontModule->fontsRomanCO->currentIndex()];
1071 tex_fonts_sans[fontModule->fontsSansCO->currentIndex()];
1073 params.fontsTypewriter =
1074 tex_fonts_monospaced[fontModule->fontsTypewriterCO->currentIndex()];
1076 params.fontsSansScale = fontModule->scaleSansSB->value();
1078 params.fontsTypewriterScale = fontModule->scaleTypewriterSB->value();
1080 params.fontsSC = fontModule->fontScCB->isChecked();
1082 params.fontsOSF = fontModule->fontOsfCB->isChecked();
1084 params.fontsDefaultFamily = ControlDocument::fontfamilies[
1085 fontModule->fontsDefaultCO->currentIndex()];
1087 if (fontModule->fontsizeCO->currentIndex() == 0)
1088 params.fontsize = "default";
1091 fromqstr(fontModule->fontsizeCO->currentText());
1094 params.papersize = PAPER_SIZE(
1095 pageLayoutModule->papersizeCO->currentIndex());
1097 // custom, A3, B3 and B4 paper sizes need geometry
1098 int psize = pageLayoutModule->papersizeCO->currentIndex();
1099 bool geom_papersize = (psize == 1 || psize == 5 || psize == 8 || psize == 9);
1101 params.paperwidth = widgetsToLength(pageLayoutModule->paperwidthLE,
1102 pageLayoutModule->paperwidthUnitCO);
1104 params.paperheight = widgetsToLength(pageLayoutModule->paperheightLE,
1105 pageLayoutModule->paperheightUnitCO);
1107 if (pageLayoutModule->facingPagesCB->isChecked())
1108 params.sides = TextClass::TwoSides;
1110 params.sides = TextClass::OneSide;
1112 if (pageLayoutModule->landscapeRB->isChecked())
1113 params.orientation = ORIENTATION_LANDSCAPE;
1115 params.orientation = ORIENTATION_PORTRAIT;
1118 params.use_geometry =
1119 (!marginsModule->marginCB->isChecked()
1122 Ui::MarginsUi const * m(marginsModule);
1124 params.leftmargin = widgetsToLength(m->innerLE, m->innerUnit);
1126 params.topmargin = widgetsToLength(m->topLE, m->topUnit);
1128 params.rightmargin = widgetsToLength(m->outerLE, m->outerUnit);
1130 params.bottommargin = widgetsToLength(m->bottomLE, m->bottomUnit);
1132 params.headheight = widgetsToLength(m->headheightLE, m->headheightUnit);
1134 params.headsep = widgetsToLength(m->headsepLE, m->headsepUnit);
1136 params.footskip = widgetsToLength(m->footskipLE, m->footskipUnit);
1138 branchesModule->apply(params);
1142 /** Return the position of val in the vector if found.
1143 If not found, return 0.
1146 static size_t findPos(std::vector<A> const & vec, A const & val)
1148 typename std::vector<A>::const_iterator it =
1149 std::find(vec.begin(), vec.end(), val);
1150 if (it == vec.end())
1152 return distance(vec.begin(), it);
1156 void GuiDocumentDialog::updateParams(BufferParams const & params)
1158 // set the default unit
1159 // FIXME: move to controller
1160 Length::UNIT defaultUnit = Length::CM;
1161 switch (lyxrc.default_papersize) {
1162 case PAPER_DEFAULT: break;
1164 case PAPER_USLETTER:
1166 case PAPER_USEXECUTIVE:
1167 defaultUnit = Length::IN;
1176 defaultUnit = Length::CM;
1183 preambleModule->update(params, controller().id());
1186 biblioModule->citeDefaultRB->setChecked(
1187 params.getEngine() == biblio::ENGINE_BASIC);
1189 biblioModule->citeNatbibRB->setChecked(
1190 params.getEngine() == biblio::ENGINE_NATBIB_NUMERICAL ||
1191 params.getEngine() == biblio::ENGINE_NATBIB_AUTHORYEAR);
1193 biblioModule->citeStyleCO->setCurrentIndex(
1194 params.getEngine() == biblio::ENGINE_NATBIB_NUMERICAL);
1196 biblioModule->citeJurabibRB->setChecked(
1197 params.getEngine() == biblio::ENGINE_JURABIB);
1199 biblioModule->bibtopicCB->setChecked(
1200 params.use_bibtopic);
1202 // language & quotes
1203 int const pos = int(findPos(lang_,
1204 params.language->lang()));
1205 langModule->languageCO->setCurrentIndex(pos);
1207 langModule->quoteStyleCO->setCurrentIndex(
1208 params.quotes_language);
1210 langModule->defaultencodingCB->setChecked(true);
1212 if (params.inputenc != "auto") {
1213 langModule->defaultencodingCB->setChecked(false);
1214 if (params.inputenc == "default") {
1215 langModule->encodingCO->setCurrentIndex(0);
1217 int const i = langModule->encodingCO->findText(
1218 toqstr(params.inputenc));
1220 langModule->encodingCO->setCurrentIndex(i);
1222 // unknown encoding. Set to default.
1223 langModule->defaultencodingCB->setChecked(true);
1228 int const min_toclevel = controller().textClass().min_toclevel();
1229 int const max_toclevel = controller().textClass().max_toclevel();
1230 if (controller().textClass().hasTocLevels()) {
1231 numberingModule->setEnabled(true);
1232 numberingModule->depthSL->setMinimum(min_toclevel - 1);
1233 numberingModule->depthSL->setMaximum(max_toclevel);
1234 numberingModule->depthSL->setValue(params.secnumdepth);
1235 numberingModule->tocSL->setMaximum(min_toclevel - 1);
1236 numberingModule->tocSL->setMaximum(max_toclevel);
1237 numberingModule->tocSL->setValue(params.tocdepth);
1240 numberingModule->setEnabled(false);
1241 numberingModule->tocTW->clear();
1245 bulletsModule->setBullet(0, params.user_defined_bullet(0));
1246 bulletsModule->setBullet(1, params.user_defined_bullet(1));
1247 bulletsModule->setBullet(2, params.user_defined_bullet(2));
1248 bulletsModule->setBullet(3, params.user_defined_bullet(3));
1249 bulletsModule->init();
1252 int nitem = findToken(tex_graphics, params.graphicsDriver);
1254 latexModule->psdriverCO->setCurrentIndex(nitem);
1256 mathsModule->amsCB->setChecked(
1257 params.use_amsmath == BufferParams::package_on);
1258 mathsModule->amsautoCB->setChecked(
1259 params.use_amsmath == BufferParams::package_auto);
1261 mathsModule->esintCB->setChecked(
1262 params.use_esint == BufferParams::package_on);
1263 mathsModule->esintautoCB->setChecked(
1264 params.use_esint == BufferParams::package_auto);
1266 switch (params.spacing().getSpace()) {
1267 case Spacing::Other: nitem = 3; break;
1268 case Spacing::Double: nitem = 2; break;
1269 case Spacing::Onehalf: nitem = 1; break;
1270 case Spacing::Default: case Spacing::Single: nitem = 0; break;
1274 latexModule->classCO->setCurrentIndex(params.getBaseClass());
1276 updatePagestyle(controller().textClass().opt_pagestyle(),
1279 textLayoutModule->lspacingCO->setCurrentIndex(nitem);
1280 if (params.spacing().getSpace() == Spacing::Other) {
1281 textLayoutModule->lspacingLE->setText(
1282 toqstr(params.spacing().getValueAsString()));
1286 if (params.paragraph_separation
1287 == BufferParams::PARSEP_INDENT) {
1288 textLayoutModule->indentRB->setChecked(true);
1290 textLayoutModule->skipRB->setChecked(true);
1294 switch (params.getDefSkip().kind()) {
1295 case VSpace::SMALLSKIP:
1298 case VSpace::MEDSKIP:
1301 case VSpace::BIGSKIP:
1304 case VSpace::LENGTH:
1307 string const length = params.getDefSkip().asLyXCommand();
1308 lengthToWidgets(textLayoutModule->skipLE,
1309 textLayoutModule->skipLengthCO,
1310 length, defaultUnit);
1317 textLayoutModule->skipCO->setCurrentIndex(skip);
1320 textLayoutModule->twoColumnCB->setChecked(
1321 params.columns == 2);
1323 // break listings_params to multiple lines
1325 InsetListingsParams(params.listings_params).separatedParams();
1326 textLayoutModule->listingsED->setPlainText(toqstr(lstparams));
1328 if (!params.options.empty()) {
1329 latexModule->optionsLE->setText(
1330 toqstr(params.options));
1332 latexModule->optionsLE->setText(QString());
1335 floatModule->set(params.float_placement);
1338 updateFontsize(controller().textClass().opt_fontsize(),
1341 int n = findToken(tex_fonts_roman, params.fontsRoman);
1343 fontModule->fontsRomanCO->setCurrentIndex(n);
1347 n = findToken(tex_fonts_sans, params.fontsSans);
1349 fontModule->fontsSansCO->setCurrentIndex(n);
1353 n = findToken(tex_fonts_monospaced, params.fontsTypewriter);
1355 fontModule->fontsTypewriterCO->setCurrentIndex(n);
1359 fontModule->fontScCB->setChecked(params.fontsSC);
1360 fontModule->fontOsfCB->setChecked(params.fontsOSF);
1361 fontModule->scaleSansSB->setValue(params.fontsSansScale);
1362 fontModule->scaleTypewriterSB->setValue(params.fontsTypewriterScale);
1363 n = findToken(ControlDocument::fontfamilies, params.fontsDefaultFamily);
1365 fontModule->fontsDefaultCO->setCurrentIndex(n);
1368 int const psize = params.papersize;
1369 pageLayoutModule->papersizeCO->setCurrentIndex(psize);
1370 setCustomPapersize(psize);
1372 bool const landscape =
1373 params.orientation == ORIENTATION_LANDSCAPE;
1374 pageLayoutModule->landscapeRB->setChecked(landscape);
1375 pageLayoutModule->portraitRB->setChecked(!landscape);
1377 pageLayoutModule->facingPagesCB->setChecked(
1378 params.sides == TextClass::TwoSides);
1381 lengthToWidgets(pageLayoutModule->paperwidthLE,
1382 pageLayoutModule->paperwidthUnitCO, params.paperwidth, defaultUnit);
1384 lengthToWidgets(pageLayoutModule->paperheightLE,
1385 pageLayoutModule->paperheightUnitCO, params.paperheight, defaultUnit);
1388 Ui::MarginsUi * m = marginsModule;
1390 setMargins(!params.use_geometry);
1392 lengthToWidgets(m->topLE, m->topUnit,
1393 params.topmargin, defaultUnit);
1395 lengthToWidgets(m->bottomLE, m->bottomUnit,
1396 params.bottommargin, defaultUnit);
1398 lengthToWidgets(m->innerLE, m->innerUnit,
1399 params.leftmargin, defaultUnit);
1401 lengthToWidgets(m->outerLE, m->outerUnit,
1402 params.rightmargin, defaultUnit);
1404 lengthToWidgets(m->headheightLE, m->headheightUnit,
1405 params.headheight, defaultUnit);
1407 lengthToWidgets(m->headsepLE, m->headsepUnit,
1408 params.headsep, defaultUnit);
1410 lengthToWidgets(m->footskipLE, m->footskipUnit,
1411 params.footskip, defaultUnit);
1413 branchesModule->update(params);
1417 void GuiDocumentDialog::applyView()
1419 apply(controller().params());
1423 void GuiDocumentDialog::updateContents()
1425 updateParams(controller().params());
1429 void GuiDocumentDialog::saveDocDefault()
1431 // we have to apply the params first
1433 controller().saveAsDefault();
1437 void GuiDocumentDialog::useClassDefaults()
1439 BufferParams & params = controller().params();
1441 params.setJustBaseClass(latexModule->classCO->currentIndex());
1443 params.useClassDefaults();
1448 bool GuiDocumentDialog::isValid()
1450 return validate_listings_params().empty();
1454 } // namespace frontend
1457 #include "GuiDocument_moc.cpp"