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 "BufferParams.h"
29 #include "frontend_helpers.h" // getSecond()
31 #include "LyXRC.h" // defaultUnit
32 #include "TextClassList.h"
35 #include "insets/InsetListingsParams.h"
37 #include "support/lstrings.h"
39 #include <QCloseEvent>
41 #include <QTextCursor>
45 using lyx::support::token;
46 using lyx::support::bformat;
47 using lyx::support::findToken;
48 using lyx::support::getVectorFromString;
57 char const * const tex_graphics[] =
59 "default", "dvips", "dvitops", "emtex",
60 "ln", "oztex", "textures", "none", ""
64 char const * const tex_graphics_gui[] =
66 N_("Default"), "Dvips", "DVItoPS", "EmTeX",
67 "LN", "OzTeX", "Textures", N_("None"), ""
71 char const * const tex_fonts_roman[] =
73 "default", "cmr", "lmodern", "ae", "times", "palatino",
74 "charter", "newcent", "bookman", "utopia", "beraserif",
75 "ccfonts", "chancery", ""
79 char const * tex_fonts_roman_gui[] =
81 N_("Default"), N_("Computer Modern Roman"), N_("Latin Modern Roman"),
82 N_("AE (Almost European)"), N_("Times Roman"), N_("Palatino"),
83 N_("Bitstream Charter"), N_("New Century Schoolbook"), N_("Bookman"),
84 N_("Utopia"), N_("Bera Serif"), N_("Concrete Roman"), N_("Zapf Chancery"),
89 char const * const tex_fonts_sans[] =
91 "default", "cmss", "lmss", "helvet", "avant", "berasans", "cmbr", ""
95 char const * tex_fonts_sans_gui[] =
97 N_("Default"), N_("Computer Modern Sans"), N_("Latin Modern Sans"),
98 N_("Helvetica"), N_("Avant Garde"), N_("Bera Sans"), N_("CM Bright"), ""
102 char const * const tex_fonts_monospaced[] =
104 "default", "cmtt", "lmtt", "courier", "beramono", "luximono", "cmtl", ""
108 char const * tex_fonts_monospaced_gui[] =
110 N_("Default"), N_("Computer Modern Typewriter"),
111 N_("Latin Modern Typewriter"), N_("Courier"), N_("Bera Mono"),
112 N_("LuxiMono"), N_("CM Typewriter Light"), ""
116 vector<pair<string, lyx::docstring> > pagestyles;
122 /////////////////////////////////////////////////////////////////////
126 /////////////////////////////////////////////////////////////////////
128 PreambleModule::PreambleModule(): current_id_(0)
130 // This is not a memory leak. The object will be destroyed
132 (void) new LaTeXHighlighter(preambleTE->document());
133 setFocusProxy(preambleTE);
134 connect(preambleTE, SIGNAL(textChanged()), this, SIGNAL(changed()));
138 void PreambleModule::update(BufferParams const & params, BufferId id)
140 QString preamble = toqstr(params.preamble);
141 // Nothing to do if the params and preamble are unchanged.
142 if (id == current_id_
143 && preamble == preambleTE->document()->toPlainText())
146 QTextCursor cur = preambleTE->textCursor();
147 // Save the coords before switching to the new one.
148 preamble_coords_[current_id_] =
149 make_pair(cur.position(), preambleTE->verticalScrollBar()->value());
151 // Save the params address for further use.
153 preambleTE->document()->setPlainText(preamble);
154 Coords::const_iterator it = preamble_coords_.find(current_id_);
155 if (it == preamble_coords_.end())
156 // First time we open this one.
157 preamble_coords_[current_id_] = make_pair(0,0);
159 // Restore saved coords.
160 QTextCursor cur = preambleTE->textCursor();
161 cur.setPosition(it->second.first);
162 preambleTE->setTextCursor(cur);
163 preambleTE->verticalScrollBar()->setValue(it->second.second);
168 void PreambleModule::apply(BufferParams & params)
170 params.preamble = fromqstr(preambleTE->document()->toPlainText());
174 void PreambleModule::closeEvent(QCloseEvent * e)
176 // Save the coords before closing.
177 QTextCursor cur = preambleTE->textCursor();
178 preamble_coords_[current_id_] =
179 make_pair(cur.position(), preambleTE->verticalScrollBar()->value());
184 /////////////////////////////////////////////////////////////////////
188 /////////////////////////////////////////////////////////////////////
192 GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
193 : GuiDialog(lv, "document")
196 setController(new ControlDocument(*this));
197 setViewTitle(_("Document Settings"));
199 lang_ = getSecond(getLanguageData(false));
201 connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
202 connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
203 connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
204 connect(restorePB, SIGNAL(clicked()), this, SLOT(slotRestore()));
206 connect(savePB, SIGNAL(clicked()), this, SLOT(saveDefaultClicked()));
207 connect(defaultPB, SIGNAL(clicked()), this, SLOT(useDefaultsClicked()));
209 // Manage the restore, ok, apply, restore and cancel/close buttons
210 bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
212 bc().setApply(applyPB);
213 bc().setCancel(closePB);
214 bc().setRestore(restorePB);
216 textLayoutModule = new UiWidget<Ui::TextLayoutUi>;
218 connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)),
219 this, SLOT(change_adaptor()));
220 connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)),
221 this, SLOT(setLSpacing(int)));
222 connect(textLayoutModule->lspacingLE, SIGNAL(textChanged(const QString&)),
223 this, SLOT(change_adaptor()));
224 connect(textLayoutModule->skipRB, SIGNAL(clicked()),
225 this, SLOT(change_adaptor()));
226 connect(textLayoutModule->indentRB, SIGNAL(clicked()),
227 this, SLOT(change_adaptor()));
228 connect(textLayoutModule->skipCO, SIGNAL(activated(int)),
229 this, SLOT(change_adaptor()));
230 connect(textLayoutModule->skipLE, SIGNAL(textChanged(const QString &)),
231 this, SLOT(change_adaptor()));
232 connect(textLayoutModule->skipLengthCO, SIGNAL(activated(int)),
233 this, SLOT(change_adaptor()));
234 connect(textLayoutModule->skipCO, SIGNAL(activated(int)),
235 this, SLOT(setSkip(int)));
236 connect(textLayoutModule->skipRB, SIGNAL(toggled(bool)),
237 this, SLOT(enableSkip(bool)));
238 connect(textLayoutModule->twoColumnCB, SIGNAL(clicked()),
239 this, SLOT(change_adaptor()));
240 connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
241 this, SLOT(change_adaptor()));
242 connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
243 this, SLOT(change_adaptor()));
244 connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
245 this, SLOT(set_listings_msg()));
246 connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
247 this, SLOT(set_listings_msg()));
248 textLayoutModule->listingsTB->setPlainText(
249 qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
250 textLayoutModule->lspacingLE->setValidator(new QDoubleValidator(
251 textLayoutModule->lspacingLE));
252 textLayoutModule->skipLE->setValidator(unsignedLengthValidator(
253 textLayoutModule->skipLE));
255 textLayoutModule->skipCO->addItem(qt_("SmallSkip"));
256 textLayoutModule->skipCO->addItem(qt_("MedSkip"));
257 textLayoutModule->skipCO->addItem(qt_("BigSkip"));
258 textLayoutModule->skipCO->addItem(qt_("Length"));
259 // remove the %-items from the unit choice
260 textLayoutModule->skipLengthCO->noPercents();
261 textLayoutModule->lspacingCO->insertItem(
262 Spacing::Single, qt_("Single"));
263 textLayoutModule->lspacingCO->insertItem(
264 Spacing::Onehalf, qt_("OneHalf"));
265 textLayoutModule->lspacingCO->insertItem(
266 Spacing::Double, qt_("Double"));
267 textLayoutModule->lspacingCO->insertItem(
268 Spacing::Other, qt_("Custom"));
270 // initialize the length validator
271 bc().addCheckedLineEdit(textLayoutModule->skipLE);
273 fontModule = new UiWidget<Ui::FontUi>;
275 connect(fontModule->fontsRomanCO, SIGNAL(activated(int)),
276 this, SLOT(change_adaptor()));
277 connect(fontModule->fontsRomanCO, SIGNAL(activated(int)),
278 this, SLOT(romanChanged(int)));
279 connect(fontModule->fontsSansCO, SIGNAL(activated(int)),
280 this, SLOT(change_adaptor()));
281 connect(fontModule->fontsSansCO, SIGNAL(activated(int)),
282 this, SLOT(sansChanged(int)));
283 connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)),
284 this, SLOT(change_adaptor()));
285 connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)),
286 this, SLOT(ttChanged(int)));
287 connect(fontModule->fontsDefaultCO, SIGNAL(activated(int)),
288 this, SLOT(change_adaptor()));
289 connect(fontModule->fontsizeCO, SIGNAL(activated(int)),
290 this, SLOT(change_adaptor()));
291 connect(fontModule->scaleSansSB, SIGNAL(valueChanged(int)),
292 this, SLOT(change_adaptor()));
293 connect(fontModule->scaleTypewriterSB, SIGNAL(valueChanged(int)),
294 this, SLOT(change_adaptor()));
295 connect(fontModule->fontScCB, SIGNAL(clicked()),
296 this, SLOT(change_adaptor()));
297 connect(fontModule->fontOsfCB, SIGNAL(clicked()),
298 this, SLOT(change_adaptor()));
300 for (int n = 0; tex_fonts_roman[n][0]; ++n) {
301 QString font = qt_(tex_fonts_roman_gui[n]);
302 if (!controller().isFontAvailable(tex_fonts_roman[n]))
303 font += qt_(" (not installed)");
304 fontModule->fontsRomanCO->addItem(font);
306 for (int n = 0; tex_fonts_sans[n][0]; ++n) {
307 QString font = qt_(tex_fonts_sans_gui[n]);
308 if (!controller().isFontAvailable(tex_fonts_sans[n]))
309 font += qt_(" (not installed)");
310 fontModule->fontsSansCO->addItem(font);
312 for (int n = 0; tex_fonts_monospaced[n][0]; ++n) {
313 QString font = qt_(tex_fonts_monospaced_gui[n]);
314 if (!controller().isFontAvailable(tex_fonts_monospaced[n]))
315 font += qt_(" (not installed)");
316 fontModule->fontsTypewriterCO->addItem(font);
319 fontModule->fontsizeCO->addItem(qt_("Default"));
320 fontModule->fontsizeCO->addItem(qt_("10"));
321 fontModule->fontsizeCO->addItem(qt_("11"));
322 fontModule->fontsizeCO->addItem(qt_("12"));
324 for (int n = 0; ControlDocument::fontfamilies_gui[n][0]; ++n)
325 fontModule->fontsDefaultCO->addItem(
326 qt_(ControlDocument::fontfamilies_gui[n]));
329 pageLayoutModule = new UiWidget<Ui::PageLayoutUi>;
331 connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
332 this, SLOT(setCustomPapersize(int)));
333 connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
334 this, SLOT(setCustomPapersize(int)));
335 connect(pageLayoutModule->portraitRB, SIGNAL(clicked()),
336 this, SLOT(portraitChanged()));
337 connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
338 this, SLOT(change_adaptor()));
339 connect(pageLayoutModule->paperheightLE, SIGNAL(textChanged(const QString &)),
340 this, SLOT(change_adaptor()));
341 connect(pageLayoutModule->paperwidthLE, SIGNAL(textChanged(const QString &)),
342 this, SLOT(change_adaptor()));
343 connect(pageLayoutModule->paperwidthUnitCO, SIGNAL(activated(int)),
344 this, SLOT(change_adaptor()));
345 connect(pageLayoutModule->paperheightUnitCO, SIGNAL(activated(int)),
346 this, SLOT(change_adaptor()));
347 connect(pageLayoutModule->portraitRB, SIGNAL(clicked()),
348 this, SLOT(change_adaptor()));
349 connect(pageLayoutModule->landscapeRB, SIGNAL(clicked()),
350 this, SLOT(change_adaptor()));
351 connect(pageLayoutModule->facingPagesCB, SIGNAL(clicked()),
352 this, SLOT(change_adaptor()));
353 connect(pageLayoutModule->pagestyleCO, SIGNAL(activated(int)),
354 this, SLOT(change_adaptor()));
356 pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
357 pageLayoutModule->pagestyleCO->addItem(qt_("empty"));
358 pageLayoutModule->pagestyleCO->addItem(qt_("plain"));
359 pageLayoutModule->pagestyleCO->addItem(qt_("headings"));
360 pageLayoutModule->pagestyleCO->addItem(qt_("fancy"));
361 bc().addCheckedLineEdit(pageLayoutModule->paperheightLE,
362 pageLayoutModule->paperheightL);
363 bc().addCheckedLineEdit(pageLayoutModule->paperwidthLE,
364 pageLayoutModule->paperwidthL);
367 QComboBox * cb = pageLayoutModule->papersizeCO;
368 cb->addItem(qt_("Default"));
369 cb->addItem(qt_("Custom"));
370 cb->addItem(qt_("US letter"));
371 cb->addItem(qt_("US legal"));
372 cb->addItem(qt_("US executive"));
373 cb->addItem(qt_("A3"));
374 cb->addItem(qt_("A4"));
375 cb->addItem(qt_("A5"));
376 cb->addItem(qt_("B3"));
377 cb->addItem(qt_("B4"));
378 cb->addItem(qt_("B5"));
379 // remove the %-items from the unit choice
380 pageLayoutModule->paperwidthUnitCO->noPercents();
381 pageLayoutModule->paperheightUnitCO->noPercents();
382 pageLayoutModule->paperheightLE->setValidator(unsignedLengthValidator(
383 pageLayoutModule->paperheightLE));
384 pageLayoutModule->paperwidthLE->setValidator(unsignedLengthValidator(
385 pageLayoutModule->paperwidthLE));
388 marginsModule = new UiWidget<Ui::MarginsUi>;
390 connect(marginsModule->marginCB, SIGNAL(toggled(bool)),
391 this, SLOT(setCustomMargins(bool)));
392 connect(marginsModule->marginCB, SIGNAL(clicked()),
393 this, SLOT(change_adaptor()));
394 connect(marginsModule->topLE, SIGNAL(textChanged(const QString &)),
395 this, SLOT(change_adaptor()));
396 connect(marginsModule->topUnit, SIGNAL(activated(int)),
397 this, SLOT(change_adaptor()));
398 connect(marginsModule->bottomLE, SIGNAL(textChanged(const QString &)),
399 this, SLOT(change_adaptor()));
400 connect(marginsModule->bottomUnit, SIGNAL(activated(int)),
401 this, SLOT(change_adaptor()));
402 connect(marginsModule->innerLE, SIGNAL(textChanged(const QString &)),
403 this, SLOT(change_adaptor()));
404 connect(marginsModule->innerUnit, SIGNAL(activated(int)),
405 this, SLOT(change_adaptor()));
406 connect(marginsModule->outerLE, SIGNAL(textChanged(const QString &)),
407 this, SLOT(change_adaptor()));
408 connect(marginsModule->outerUnit, SIGNAL(activated(int)),
409 this, SLOT(change_adaptor()));
410 connect(marginsModule->headheightLE, SIGNAL(textChanged(const QString &)),
411 this, SLOT(change_adaptor()));
412 connect(marginsModule->headheightUnit, SIGNAL(activated(int)),
413 this, SLOT(change_adaptor()));
414 connect(marginsModule->headsepLE, SIGNAL(textChanged(const QString &)),
415 this, SLOT(change_adaptor()));
416 connect(marginsModule->headsepUnit, SIGNAL(activated(int)),
417 this, SLOT(change_adaptor()));
418 connect(marginsModule->footskipLE, SIGNAL(textChanged(const QString&)),
419 this, SLOT(change_adaptor()));
420 connect(marginsModule->footskipUnit, SIGNAL(activated(int)),
421 this, SLOT(change_adaptor()));
422 marginsModule->topLE->setValidator(unsignedLengthValidator(
423 marginsModule->topLE));
424 marginsModule->bottomLE->setValidator(unsignedLengthValidator(
425 marginsModule->bottomLE));
426 marginsModule->innerLE->setValidator(unsignedLengthValidator(
427 marginsModule->innerLE));
428 marginsModule->outerLE->setValidator(unsignedLengthValidator(
429 marginsModule->outerLE));
430 marginsModule->headsepLE->setValidator(unsignedLengthValidator(
431 marginsModule->headsepLE));
432 marginsModule->headheightLE->setValidator(unsignedLengthValidator(
433 marginsModule->headheightLE));
434 marginsModule->footskipLE->setValidator(unsignedLengthValidator(
435 marginsModule->footskipLE));
437 bc().addCheckedLineEdit(marginsModule->topLE,
438 marginsModule->topL);
439 bc().addCheckedLineEdit(marginsModule->bottomLE,
440 marginsModule->bottomL);
441 bc().addCheckedLineEdit(marginsModule->innerLE,
442 marginsModule->innerL);
443 bc().addCheckedLineEdit(marginsModule->outerLE,
444 marginsModule->outerL);
445 bc().addCheckedLineEdit(marginsModule->headsepLE,
446 marginsModule->headsepL);
447 bc().addCheckedLineEdit(marginsModule->headheightLE,
448 marginsModule->headheightL);
449 bc().addCheckedLineEdit(marginsModule->footskipLE,
450 marginsModule->footskipL);
453 langModule = new UiWidget<Ui::LanguageUi>;
454 connect(langModule->defaultencodingCB, SIGNAL(toggled(bool)),
455 langModule->encodingL, SLOT(setDisabled(bool)));
456 connect(langModule->defaultencodingCB, SIGNAL(toggled(bool)),
457 langModule->encodingCO, SLOT(setDisabled(bool)));
459 connect(langModule->languageCO, SIGNAL(activated(int)),
460 this, SLOT(change_adaptor()));
461 connect(langModule->defaultencodingCB, SIGNAL(clicked()),
462 this, SLOT(change_adaptor()));
463 connect(langModule->encodingCO, SIGNAL(activated(int)),
464 this, SLOT(change_adaptor()));
465 connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
466 this, SLOT(change_adaptor()));
468 vector<LanguagePair> const langs = getLanguageData(false);
469 vector<LanguagePair>::const_iterator lit = langs.begin();
470 vector<LanguagePair>::const_iterator lend = langs.end();
471 for (; lit != lend; ++lit) {
472 langModule->languageCO->addItem(toqstr(lit->first));
475 // Always put the default encoding in the first position.
476 // It is special because the displayed text is translated.
477 langModule->encodingCO->addItem(qt_("LaTeX default"));
478 Encodings::const_iterator it = encodings.begin();
479 Encodings::const_iterator const end = encodings.end();
480 for (; it != end; ++it)
481 langModule->encodingCO->addItem(toqstr(it->latexName()));
483 langModule->quoteStyleCO->addItem(qt_("``text''"));
484 langModule->quoteStyleCO->addItem(qt_("''text''"));
485 langModule->quoteStyleCO->addItem(qt_(",,text``"));
486 langModule->quoteStyleCO->addItem(qt_(",,text''"));
487 langModule->quoteStyleCO->addItem(qt_("<<text>>"));
488 langModule->quoteStyleCO->addItem(qt_(">>text<<"));
492 numberingModule = new UiWidget<Ui::NumberingUi>;
494 connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
495 this, SLOT(change_adaptor()));
496 connect(numberingModule->tocSL, SIGNAL(valueChanged(int)),
497 this, SLOT(change_adaptor()));
498 connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
499 this, SLOT(updateNumbering()));
500 connect(numberingModule->tocSL, SIGNAL(valueChanged(int)),
501 this, SLOT(updateNumbering()));
502 numberingModule->tocTW->setColumnCount(3);
503 numberingModule->tocTW->headerItem()->setText(0, qt_("Example"));
504 numberingModule->tocTW->headerItem()->setText(1, qt_("Numbered"));
505 numberingModule->tocTW->headerItem()->setText(2, qt_("Appears in TOC"));
508 biblioModule = new UiWidget<Ui::BiblioUi>;
509 connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)),
510 biblioModule->citationStyleL, SLOT(setEnabled(bool)));
511 connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)),
512 biblioModule->citeStyleCO, SLOT(setEnabled(bool)));
514 connect(biblioModule->citeDefaultRB, SIGNAL(clicked()),
515 this, SLOT(change_adaptor()));
516 connect(biblioModule->citeNatbibRB, SIGNAL(clicked()),
517 this, SLOT(change_adaptor()));
518 connect(biblioModule->citeStyleCO, SIGNAL(activated(int)),
519 this, SLOT(change_adaptor()));
520 connect(biblioModule->citeJurabibRB, SIGNAL(clicked()),
521 this, SLOT(change_adaptor()));
522 connect(biblioModule->bibtopicCB, SIGNAL(clicked()),
523 this, SLOT(change_adaptor()));
525 biblioModule->citeStyleCO->addItem(qt_("Author-year"));
526 biblioModule->citeStyleCO->addItem(qt_("Numerical"));
527 biblioModule->citeStyleCO->setCurrentIndex(0);
530 mathsModule = new UiWidget<Ui::MathsUi>;
531 connect(mathsModule->amsautoCB, SIGNAL(toggled(bool)),
532 mathsModule->amsCB, SLOT(setDisabled(bool)));
533 connect(mathsModule->esintautoCB, SIGNAL(toggled(bool)),
534 mathsModule->esintCB, SLOT(setDisabled(bool)));
536 connect(mathsModule->amsCB, SIGNAL(clicked()),
537 this, SLOT(change_adaptor()));
538 connect(mathsModule->amsautoCB, SIGNAL(clicked()),
539 this, SLOT(change_adaptor()));
540 connect(mathsModule->esintCB, SIGNAL(clicked()),
541 this, SLOT(change_adaptor()));
542 connect(mathsModule->esintautoCB, SIGNAL(clicked()),
543 this, SLOT(change_adaptor()));
545 latexModule = new UiWidget<Ui::LaTeXUi>;
547 connect(latexModule->classCO, SIGNAL(activated(int)),
548 this, SLOT(change_adaptor()));
549 connect(latexModule->optionsLE, SIGNAL(textChanged(const QString &)),
550 this, SLOT(change_adaptor()));
551 connect(latexModule->psdriverCO, SIGNAL(activated(int)),
552 this, SLOT(change_adaptor()));
553 connect(latexModule->classCO, SIGNAL(activated(int)),
554 this, SLOT(classChanged()));
556 for (int n = 0; tex_graphics[n][0]; ++n) {
557 QString enc = qt_(tex_graphics_gui[n]);
558 latexModule->psdriverCO->addItem(enc);
561 for (TextClassList::const_iterator cit = textclasslist.begin();
562 cit != textclasslist.end(); ++cit) {
563 if (cit->isTeXClassAvailable()) {
564 latexModule->classCO->addItem(toqstr(cit->description()));
567 bformat(_("Unavailable: %1$s"), from_utf8(cit->description()));
568 latexModule->classCO->addItem(toqstr(item));
573 branchesModule = new GuiBranches;
574 connect(branchesModule, SIGNAL(changed()),
575 this, SLOT(change_adaptor()));
578 preambleModule = new PreambleModule;
579 connect(preambleModule, SIGNAL(changed()),
580 this, SLOT(change_adaptor()));
583 bulletsModule = new BulletsModule;
584 connect(bulletsModule, SIGNAL(changed()),
585 this, SLOT(change_adaptor()));
589 floatModule = new FloatPlacement;
590 connect(floatModule, SIGNAL(changed()),
591 this, SLOT(change_adaptor()));
593 docPS->addPanel(latexModule, _("Document Class"));
594 docPS->addPanel(fontModule, _("Fonts"));
595 docPS->addPanel(textLayoutModule, _("Text Layout"));
596 docPS->addPanel(pageLayoutModule, _("Page Layout"));
597 docPS->addPanel(marginsModule, _("Page Margins"));
598 docPS->addPanel(langModule, _("Language"));
599 docPS->addPanel(numberingModule, _("Numbering & TOC"));
600 docPS->addPanel(biblioModule, _("Bibliography"));
601 docPS->addPanel(mathsModule, _("Math Options"));
602 docPS->addPanel(floatModule, _("Float Placement"));
603 docPS->addPanel(bulletsModule, _("Bullets"));
604 docPS->addPanel(branchesModule, _("Branches"));
605 docPS->addPanel(preambleModule, _("LaTeX Preamble"));
606 docPS->setCurrentPanel(_("Document Class"));
607 // FIXME: hack to work around resizing bug in Qt >= 4.2
608 // bug verified with Qt 4.2.{0-3} (JSpitzm)
609 #if QT_VERSION >= 0x040200
610 docPS->updateGeometry();
615 ControlDocument & GuiDocumentDialog::controller() const
617 return static_cast<ControlDocument &>(Dialog::controller());
621 void GuiDocumentDialog::showPreamble()
623 docPS->setCurrentPanel(_("LaTeX Preamble"));
627 void GuiDocumentDialog::saveDefaultClicked()
633 void GuiDocumentDialog::useDefaultsClicked()
639 void GuiDocumentDialog::change_adaptor()
645 docstring GuiDocumentDialog::validate_listings_params()
647 // use a cache here to avoid repeated validation
648 // of the same parameters
649 static string param_cache = string();
650 static docstring msg_cache = docstring();
652 if (textLayoutModule->bypassCB->isChecked())
655 string params = fromqstr(textLayoutModule->listingsED->toPlainText());
656 if (params != param_cache) {
657 param_cache = params;
658 msg_cache = InsetListingsParams(params).validate();
664 void GuiDocumentDialog::set_listings_msg()
666 static bool isOK = true;
667 docstring msg = validate_listings_params();
672 // listingsTB->setTextColor("black");
673 textLayoutModule->listingsTB->setPlainText(
674 qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
677 // listingsTB->setTextColor("red");
678 textLayoutModule->listingsTB->setPlainText(toqstr(msg));
683 void GuiDocumentDialog::closeEvent(QCloseEvent * e)
690 void GuiDocumentDialog::setLSpacing(int item)
692 textLayoutModule->lspacingLE->setEnabled(item == 3);
696 void GuiDocumentDialog::setSkip(int item)
698 bool const enable = (item == 3);
699 textLayoutModule->skipLE->setEnabled(enable);
700 textLayoutModule->skipLengthCO->setEnabled(enable);
704 void GuiDocumentDialog::enableSkip(bool skip)
706 textLayoutModule->skipCO->setEnabled(skip);
707 textLayoutModule->skipLE->setEnabled(skip);
708 textLayoutModule->skipLengthCO->setEnabled(skip);
710 setSkip(textLayoutModule->skipCO->currentIndex());
713 void GuiDocumentDialog::portraitChanged()
715 setMargins(pageLayoutModule->papersizeCO->currentIndex());
718 void GuiDocumentDialog::setMargins(bool custom)
720 marginsModule->marginCB->setChecked(custom);
721 setCustomMargins(custom);
725 void GuiDocumentDialog::setCustomPapersize(int papersize)
727 bool const custom = (papersize == 1);
729 pageLayoutModule->paperwidthL->setEnabled(custom);
730 pageLayoutModule->paperwidthLE->setEnabled(custom);
731 pageLayoutModule->paperwidthUnitCO->setEnabled(custom);
732 pageLayoutModule->paperheightL->setEnabled(custom);
733 pageLayoutModule->paperheightLE->setEnabled(custom);
734 pageLayoutModule->paperheightLE->setFocus();
735 pageLayoutModule->paperheightUnitCO->setEnabled(custom);
739 void GuiDocumentDialog::setCustomMargins(bool custom)
741 marginsModule->topL->setEnabled(!custom);
742 marginsModule->topLE->setEnabled(!custom);
743 marginsModule->topUnit->setEnabled(!custom);
745 marginsModule->bottomL->setEnabled(!custom);
746 marginsModule->bottomLE->setEnabled(!custom);
747 marginsModule->bottomUnit->setEnabled(!custom);
749 marginsModule->innerL->setEnabled(!custom);
750 marginsModule->innerLE->setEnabled(!custom);
751 marginsModule->innerUnit->setEnabled(!custom);
753 marginsModule->outerL->setEnabled(!custom);
754 marginsModule->outerLE->setEnabled(!custom);
755 marginsModule->outerUnit->setEnabled(!custom);
757 marginsModule->headheightL->setEnabled(!custom);
758 marginsModule->headheightLE->setEnabled(!custom);
759 marginsModule->headheightUnit->setEnabled(!custom);
761 marginsModule->headsepL->setEnabled(!custom);
762 marginsModule->headsepLE->setEnabled(!custom);
763 marginsModule->headsepUnit->setEnabled(!custom);
765 marginsModule->footskipL->setEnabled(!custom);
766 marginsModule->footskipLE->setEnabled(!custom);
767 marginsModule->footskipUnit->setEnabled(!custom);
771 void GuiDocumentDialog::updateFontsize(string const & items, string const & sel)
773 fontModule->fontsizeCO->clear();
774 fontModule->fontsizeCO->addItem(qt_("Default"));
776 for (int n = 0; !token(items,'|',n).empty(); ++n)
777 fontModule->fontsizeCO->
778 addItem(toqstr(token(items,'|',n)));
780 for (int n = 0; n < fontModule->fontsizeCO->count(); ++n) {
781 if (fromqstr(fontModule->fontsizeCO->itemText(n)) == sel) {
782 fontModule->fontsizeCO->setCurrentIndex(n);
789 void GuiDocumentDialog::romanChanged(int item)
791 string const font = tex_fonts_roman[item];
792 fontModule->fontScCB->setEnabled(controller().providesSC(font));
793 fontModule->fontOsfCB->setEnabled(controller().providesOSF(font));
797 void GuiDocumentDialog::sansChanged(int item)
799 string const font = tex_fonts_sans[item];
800 bool scaleable = controller().providesScale(font);
801 fontModule->scaleSansSB->setEnabled(scaleable);
802 fontModule->scaleSansLA->setEnabled(scaleable);
806 void GuiDocumentDialog::ttChanged(int item)
808 string const font = tex_fonts_monospaced[item];
809 bool scaleable = controller().providesScale(font);
810 fontModule->scaleTypewriterSB->setEnabled(scaleable);
811 fontModule->scaleTypewriterLA->setEnabled(scaleable);
815 void GuiDocumentDialog::updatePagestyle(string const & items, string const & sel)
818 pageLayoutModule->pagestyleCO->clear();
819 pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
821 for (int n = 0; !token(items,'|',n).empty(); ++n) {
822 string style = token(items, '|', n);
823 docstring style_gui = _(style);
824 pagestyles.push_back(pair<string, docstring>(style, style_gui));
825 pageLayoutModule->pagestyleCO->addItem(toqstr(style_gui));
828 if (sel == "default") {
829 pageLayoutModule->pagestyleCO->setCurrentIndex(0);
835 for (size_t i = 0; i < pagestyles.size(); ++i)
836 if (pagestyles[i].first == sel)
837 nn = pageLayoutModule->pagestyleCO->findText(
838 toqstr(pagestyles[i].second));
841 pageLayoutModule->pagestyleCO->setCurrentIndex(n);
845 void GuiDocumentDialog::classChanged()
847 BufferParams & params = controller().params();
848 textclass_type const tc = latexModule->classCO->currentIndex();
849 params.setJustBaseClass(tc);
850 if (lyxrc.auto_reset_options)
851 params.useClassDefaults();
856 void GuiDocumentDialog::updateNumbering()
858 TextClass const & tclass = controller().params().getTextClass();
860 numberingModule->tocTW->setUpdatesEnabled(false);
861 numberingModule->tocTW->clear();
863 int const depth = numberingModule->depthSL->value();
864 int const toc = numberingModule->tocSL->value();
865 QString const no = qt_("No");
866 QString const yes = qt_("Yes");
867 TextClass::const_iterator end = tclass.end();
868 TextClass::const_iterator cit = tclass.begin();
869 QTreeWidgetItem * item = 0;
870 for ( ; cit != end ; ++cit) {
871 int const toclevel = (*cit)->toclevel;
872 if (toclevel != Layout::NOT_IN_TOC
873 && (*cit)->labeltype == LABEL_COUNTER) {
874 item = new QTreeWidgetItem(numberingModule->tocTW);
875 item->setText(0, toqstr(translateIfPossible((*cit)->name())));
876 item->setText(1, (toclevel <= depth) ? yes : no);
877 item->setText(2, (toclevel <= toc) ? yes : no);
881 numberingModule->tocTW->setUpdatesEnabled(true);
882 numberingModule->tocTW->update();
885 void GuiDocumentDialog::apply(BufferParams & params)
888 preambleModule->apply(params);
891 params.setCiteEngine(biblio::ENGINE_BASIC);
893 if (biblioModule->citeNatbibRB->isChecked()) {
894 bool const use_numerical_citations =
895 biblioModule->citeStyleCO->currentIndex();
896 if (use_numerical_citations)
897 params.setCiteEngine(biblio::ENGINE_NATBIB_NUMERICAL);
899 params.setCiteEngine(biblio::ENGINE_NATBIB_AUTHORYEAR);
901 } else if (biblioModule->citeJurabibRB->isChecked())
902 params.setCiteEngine(biblio::ENGINE_JURABIB);
904 params.use_bibtopic =
905 biblioModule->bibtopicCB->isChecked();
908 if (langModule->defaultencodingCB->isChecked()) {
909 params.inputenc = "auto";
911 int i = langModule->encodingCO->currentIndex();
913 params.inputenc = "default";
916 fromqstr(langModule->encodingCO->currentText());
919 InsetQuotes::quote_language lga = InsetQuotes::EnglishQ;
920 switch (langModule->quoteStyleCO->currentIndex()) {
922 lga = InsetQuotes::EnglishQ;
925 lga = InsetQuotes::SwedishQ;
928 lga = InsetQuotes::GermanQ;
931 lga = InsetQuotes::PolishQ;
934 lga = InsetQuotes::FrenchQ;
937 lga = InsetQuotes::DanishQ;
940 params.quotes_language = lga;
942 int const pos = langModule->languageCO->currentIndex();
943 params.language = lyx::languages.getLanguage(lang_[pos]);
946 if (params.getTextClass().hasTocLevels()) {
947 params.tocdepth = numberingModule->tocSL->value();
948 params.secnumdepth = numberingModule->depthSL->value();
952 params.user_defined_bullet(0) = bulletsModule->getBullet(0);
953 params.user_defined_bullet(1) = bulletsModule->getBullet(1);
954 params.user_defined_bullet(2) = bulletsModule->getBullet(2);
955 params.user_defined_bullet(3) = bulletsModule->getBullet(3);
958 params.graphicsDriver =
959 tex_graphics[latexModule->psdriverCO->currentIndex()];
961 if (mathsModule->amsautoCB->isChecked()) {
962 params.use_amsmath = BufferParams::package_auto;
964 if (mathsModule->amsCB->isChecked())
965 params.use_amsmath = BufferParams::package_on;
967 params.use_amsmath = BufferParams::package_off;
970 if (mathsModule->esintautoCB->isChecked())
971 params.use_esint = BufferParams::package_auto;
973 if (mathsModule->esintCB->isChecked())
974 params.use_esint = BufferParams::package_on;
976 params.use_esint = BufferParams::package_off;
980 params.setJustBaseClass(latexModule->classCO->currentIndex());
982 if (pageLayoutModule->pagestyleCO->currentIndex() == 0)
983 params.pagestyle = "default";
985 docstring style_gui =
986 qstring_to_ucs4(pageLayoutModule->pagestyleCO->currentText());
987 for (size_t i = 0; i < pagestyles.size(); ++i)
988 if (pagestyles[i].second == style_gui)
989 params.pagestyle = pagestyles[i].first;
992 switch (textLayoutModule->lspacingCO->currentIndex()) {
994 params.spacing().set(Spacing::Single);
997 params.spacing().set(Spacing::Onehalf);
1000 params.spacing().set(Spacing::Double);
1003 params.spacing().set(Spacing::Other,
1004 fromqstr(textLayoutModule->lspacingLE->text()));
1008 if (textLayoutModule->twoColumnCB->isChecked())
1013 // text should have passed validation
1014 params.listings_params =
1015 InsetListingsParams(fromqstr(textLayoutModule->listingsED->toPlainText())).params();
1017 if (textLayoutModule->indentRB->isChecked())
1018 params.paragraph_separation = BufferParams::PARSEP_INDENT;
1020 params.paragraph_separation = BufferParams::PARSEP_SKIP;
1022 switch (textLayoutModule->skipCO->currentIndex()) {
1024 params.setDefSkip(VSpace(VSpace::SMALLSKIP));
1027 params.setDefSkip(VSpace(VSpace::MEDSKIP));
1030 params.setDefSkip(VSpace(VSpace::BIGSKIP));
1035 widgetsToLength(textLayoutModule->skipLE,
1036 textLayoutModule->skipLengthCO)
1038 params.setDefSkip(vs);
1042 // DocumentDefskipCB assures that this never happens
1043 // so Assert then !!! - jbl
1044 params.setDefSkip(VSpace(VSpace::MEDSKIP));
1049 fromqstr(latexModule->optionsLE->text());
1051 params.float_placement = floatModule->get();
1055 tex_fonts_roman[fontModule->fontsRomanCO->currentIndex()];
1058 tex_fonts_sans[fontModule->fontsSansCO->currentIndex()];
1060 params.fontsTypewriter =
1061 tex_fonts_monospaced[fontModule->fontsTypewriterCO->currentIndex()];
1063 params.fontsSansScale = fontModule->scaleSansSB->value();
1065 params.fontsTypewriterScale = fontModule->scaleTypewriterSB->value();
1067 params.fontsSC = fontModule->fontScCB->isChecked();
1069 params.fontsOSF = fontModule->fontOsfCB->isChecked();
1071 params.fontsDefaultFamily = ControlDocument::fontfamilies[
1072 fontModule->fontsDefaultCO->currentIndex()];
1074 if (fontModule->fontsizeCO->currentIndex() == 0)
1075 params.fontsize = "default";
1078 fromqstr(fontModule->fontsizeCO->currentText());
1081 params.papersize = PAPER_SIZE(
1082 pageLayoutModule->papersizeCO->currentIndex());
1084 // custom, A3, B3 and B4 paper sizes need geometry
1085 int psize = pageLayoutModule->papersizeCO->currentIndex();
1086 bool geom_papersize = (psize == 1 || psize == 5 || psize == 8 || psize == 9);
1088 params.paperwidth = widgetsToLength(pageLayoutModule->paperwidthLE,
1089 pageLayoutModule->paperwidthUnitCO);
1091 params.paperheight = widgetsToLength(pageLayoutModule->paperheightLE,
1092 pageLayoutModule->paperheightUnitCO);
1094 if (pageLayoutModule->facingPagesCB->isChecked())
1095 params.sides = TextClass::TwoSides;
1097 params.sides = TextClass::OneSide;
1099 if (pageLayoutModule->landscapeRB->isChecked())
1100 params.orientation = ORIENTATION_LANDSCAPE;
1102 params.orientation = ORIENTATION_PORTRAIT;
1105 params.use_geometry =
1106 (!marginsModule->marginCB->isChecked()
1109 Ui::MarginsUi const * m(marginsModule);
1111 params.leftmargin = widgetsToLength(m->innerLE, m->innerUnit);
1113 params.topmargin = widgetsToLength(m->topLE, m->topUnit);
1115 params.rightmargin = widgetsToLength(m->outerLE, m->outerUnit);
1117 params.bottommargin = widgetsToLength(m->bottomLE, m->bottomUnit);
1119 params.headheight = widgetsToLength(m->headheightLE, m->headheightUnit);
1121 params.headsep = widgetsToLength(m->headsepLE, m->headsepUnit);
1123 params.footskip = widgetsToLength(m->footskipLE, m->footskipUnit);
1125 branchesModule->apply(params);
1129 /** Return the position of val in the vector if found.
1130 If not found, return 0.
1133 static size_t findPos(std::vector<A> const & vec, A const & val)
1135 typename std::vector<A>::const_iterator it =
1136 std::find(vec.begin(), vec.end(), val);
1137 if (it == vec.end())
1139 return distance(vec.begin(), it);
1143 void GuiDocumentDialog::updateParams(BufferParams const & params)
1145 // set the default unit
1146 // FIXME: move to controller
1147 Length::UNIT defaultUnit = Length::CM;
1148 switch (lyxrc.default_papersize) {
1149 case PAPER_DEFAULT: break;
1151 case PAPER_USLETTER:
1153 case PAPER_USEXECUTIVE:
1154 defaultUnit = Length::IN;
1163 defaultUnit = Length::CM;
1170 preambleModule->update(params, controller().id());
1173 biblioModule->citeDefaultRB->setChecked(
1174 params.getEngine() == biblio::ENGINE_BASIC);
1176 biblioModule->citeNatbibRB->setChecked(
1177 params.getEngine() == biblio::ENGINE_NATBIB_NUMERICAL ||
1178 params.getEngine() == biblio::ENGINE_NATBIB_AUTHORYEAR);
1180 biblioModule->citeStyleCO->setCurrentIndex(
1181 params.getEngine() == biblio::ENGINE_NATBIB_NUMERICAL);
1183 biblioModule->citeJurabibRB->setChecked(
1184 params.getEngine() == biblio::ENGINE_JURABIB);
1186 biblioModule->bibtopicCB->setChecked(
1187 params.use_bibtopic);
1189 // language & quotes
1190 int const pos = int(findPos(lang_,
1191 params.language->lang()));
1192 langModule->languageCO->setCurrentIndex(pos);
1194 langModule->quoteStyleCO->setCurrentIndex(
1195 params.quotes_language);
1197 langModule->defaultencodingCB->setChecked(true);
1199 if (params.inputenc != "auto") {
1200 langModule->defaultencodingCB->setChecked(false);
1201 if (params.inputenc == "default") {
1202 langModule->encodingCO->setCurrentIndex(0);
1204 int const i = langModule->encodingCO->findText(
1205 toqstr(params.inputenc));
1207 langModule->encodingCO->setCurrentIndex(i);
1209 // unknown encoding. Set to default.
1210 langModule->defaultencodingCB->setChecked(true);
1215 int const min_toclevel = controller().textClass().min_toclevel();
1216 int const max_toclevel = controller().textClass().max_toclevel();
1217 if (controller().textClass().hasTocLevels()) {
1218 numberingModule->setEnabled(true);
1219 numberingModule->depthSL->setMinimum(min_toclevel - 1);
1220 numberingModule->depthSL->setMaximum(max_toclevel);
1221 numberingModule->depthSL->setValue(params.secnumdepth);
1222 numberingModule->tocSL->setMaximum(min_toclevel - 1);
1223 numberingModule->tocSL->setMaximum(max_toclevel);
1224 numberingModule->tocSL->setValue(params.tocdepth);
1227 numberingModule->setEnabled(false);
1228 numberingModule->tocTW->clear();
1232 bulletsModule->setBullet(0, params.user_defined_bullet(0));
1233 bulletsModule->setBullet(1, params.user_defined_bullet(1));
1234 bulletsModule->setBullet(2, params.user_defined_bullet(2));
1235 bulletsModule->setBullet(3, params.user_defined_bullet(3));
1236 bulletsModule->init();
1239 int nitem = findToken(tex_graphics, params.graphicsDriver);
1241 latexModule->psdriverCO->setCurrentIndex(nitem);
1243 mathsModule->amsCB->setChecked(
1244 params.use_amsmath == BufferParams::package_on);
1245 mathsModule->amsautoCB->setChecked(
1246 params.use_amsmath == BufferParams::package_auto);
1248 mathsModule->esintCB->setChecked(
1249 params.use_esint == BufferParams::package_on);
1250 mathsModule->esintautoCB->setChecked(
1251 params.use_esint == BufferParams::package_auto);
1253 switch (params.spacing().getSpace()) {
1254 case Spacing::Other: nitem = 3; break;
1255 case Spacing::Double: nitem = 2; break;
1256 case Spacing::Onehalf: nitem = 1; break;
1257 case Spacing::Default: case Spacing::Single: nitem = 0; break;
1261 latexModule->classCO->setCurrentIndex(params.getBaseClass());
1263 updatePagestyle(controller().textClass().opt_pagestyle(),
1266 textLayoutModule->lspacingCO->setCurrentIndex(nitem);
1267 if (params.spacing().getSpace() == Spacing::Other) {
1268 textLayoutModule->lspacingLE->setText(
1269 toqstr(params.spacing().getValueAsString()));
1273 if (params.paragraph_separation
1274 == BufferParams::PARSEP_INDENT) {
1275 textLayoutModule->indentRB->setChecked(true);
1277 textLayoutModule->skipRB->setChecked(true);
1281 switch (params.getDefSkip().kind()) {
1282 case VSpace::SMALLSKIP:
1285 case VSpace::MEDSKIP:
1288 case VSpace::BIGSKIP:
1291 case VSpace::LENGTH:
1294 string const length = params.getDefSkip().asLyXCommand();
1295 lengthToWidgets(textLayoutModule->skipLE,
1296 textLayoutModule->skipLengthCO,
1297 length, defaultUnit);
1304 textLayoutModule->skipCO->setCurrentIndex(skip);
1307 textLayoutModule->twoColumnCB->setChecked(
1308 params.columns == 2);
1310 // break listings_params to multiple lines
1312 InsetListingsParams(params.listings_params).separatedParams();
1313 textLayoutModule->listingsED->setPlainText(toqstr(lstparams));
1315 if (!params.options.empty()) {
1316 latexModule->optionsLE->setText(
1317 toqstr(params.options));
1319 latexModule->optionsLE->setText(QString());
1322 floatModule->set(params.float_placement);
1325 updateFontsize(controller().textClass().opt_fontsize(),
1328 int n = findToken(tex_fonts_roman, params.fontsRoman);
1330 fontModule->fontsRomanCO->setCurrentIndex(n);
1334 n = findToken(tex_fonts_sans, params.fontsSans);
1336 fontModule->fontsSansCO->setCurrentIndex(n);
1340 n = findToken(tex_fonts_monospaced, params.fontsTypewriter);
1342 fontModule->fontsTypewriterCO->setCurrentIndex(n);
1346 fontModule->fontScCB->setChecked(params.fontsSC);
1347 fontModule->fontOsfCB->setChecked(params.fontsOSF);
1348 fontModule->scaleSansSB->setValue(params.fontsSansScale);
1349 fontModule->scaleTypewriterSB->setValue(params.fontsTypewriterScale);
1350 n = findToken(ControlDocument::fontfamilies, params.fontsDefaultFamily);
1352 fontModule->fontsDefaultCO->setCurrentIndex(n);
1355 int const psize = params.papersize;
1356 pageLayoutModule->papersizeCO->setCurrentIndex(psize);
1357 setCustomPapersize(psize);
1359 bool const landscape =
1360 params.orientation == ORIENTATION_LANDSCAPE;
1361 pageLayoutModule->landscapeRB->setChecked(landscape);
1362 pageLayoutModule->portraitRB->setChecked(!landscape);
1364 pageLayoutModule->facingPagesCB->setChecked(
1365 params.sides == TextClass::TwoSides);
1368 lengthToWidgets(pageLayoutModule->paperwidthLE,
1369 pageLayoutModule->paperwidthUnitCO, params.paperwidth, defaultUnit);
1371 lengthToWidgets(pageLayoutModule->paperheightLE,
1372 pageLayoutModule->paperheightUnitCO, params.paperheight, defaultUnit);
1375 Ui::MarginsUi * m = marginsModule;
1377 setMargins(!params.use_geometry);
1379 lengthToWidgets(m->topLE, m->topUnit,
1380 params.topmargin, defaultUnit);
1382 lengthToWidgets(m->bottomLE, m->bottomUnit,
1383 params.bottommargin, defaultUnit);
1385 lengthToWidgets(m->innerLE, m->innerUnit,
1386 params.leftmargin, defaultUnit);
1388 lengthToWidgets(m->outerLE, m->outerUnit,
1389 params.rightmargin, defaultUnit);
1391 lengthToWidgets(m->headheightLE, m->headheightUnit,
1392 params.headheight, defaultUnit);
1394 lengthToWidgets(m->headsepLE, m->headsepUnit,
1395 params.headsep, defaultUnit);
1397 lengthToWidgets(m->footskipLE, m->footskipUnit,
1398 params.footskip, defaultUnit);
1400 branchesModule->update(params);
1404 void GuiDocumentDialog::applyView()
1406 apply(controller().params());
1410 void GuiDocumentDialog::update_contents()
1412 updateParams(controller().params());
1416 void GuiDocumentDialog::saveDocDefault()
1418 // we have to apply the params first
1420 controller().saveAsDefault();
1424 void GuiDocumentDialog::useClassDefaults()
1426 BufferParams & params = controller().params();
1428 params.setJustBaseClass(latexModule->classCO->currentIndex());
1430 params.useClassDefaults();
1435 bool GuiDocumentDialog::isValid()
1437 return validate_listings_params().empty();
1441 } // namespace frontend
1444 #include "GuiDocument_moc.cpp"