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 // Too hard to make concept checks work with this file
14 #ifdef _GLIBCXX_CONCEPT_CHECKS
15 #undef _GLIBCXX_CONCEPT_CHECKS
17 #ifdef _GLIBCPP_CONCEPT_CHECKS
18 #undef _GLIBCPP_CONCEPT_CHECKS
21 #include "GDocument.h"
24 #include "ControlDocument.h"
25 #include "controllers/helper_funcs.h"
26 #include "controllers/frnt_lang.h"
28 #include "support/lstrings.h"
31 #include "lyxtextclasslist.h"
32 #include "bufferparams.h"
33 #include "tex-strings.h"
41 using support::bformat;
43 using support::contains;
44 using support::findToken;
50 char const * const encodings[] = { "Language Default", "LaTeX default",
51 "latin1", "latin2", "latin3", "latin4", "latin5", "latin9",
52 "koi8-r", "koi8-u", "cp866", "cp1251", "iso88595", "pt154", 0
58 GDocument::GDocument(Dialog & parent)
59 : GViewCB<ControlDocument, GViewGladeB>(parent, _("Document Settings"), false),
60 lang_(getSecond(getLanguageData(false)))
63 void GDocument::doBuild()
65 string const gladeName = findGladeFile("document");
66 xml_ = Gnome::Glade::Xml::create(gladeName);
68 // Manage the action area buttons
70 xml_->get_widget("Cancel", button);
72 xml_->get_widget("OK", button);
74 xml_->get_widget("Apply", button);
76 xml_->get_widget("Revert", button);
79 xml_->get_widget("UseClassDefaults", button);
80 button->signal_clicked().connect(
81 sigc::mem_fun(*this, &GDocument::resetToDefaults));
82 xml_->get_widget("SaveAsDocumentDefaults", button);
83 button->signal_clicked().connect(
84 sigc::mem_fun(*this, &GDocument::saveAsDefaults));
87 // *** Start "Document" Page ***
88 Gtk::Box * box = NULL;
89 xml_->get_widget("DocumentClass", box);
90 // Prevent combo making dialog super-wide due to long class names
91 classcombo_.set_size_request(1, -1);
92 box->pack_start(classcombo_, true, true, 0);
95 classcombo_.signal_changed().connect(
96 sigc::mem_fun(*this, &GDocument::classChanged));
98 // Populate Document Class combo
99 for (LyXTextClassList::const_iterator cit = textclasslist.begin();
100 cit != textclasslist.end(); ++cit) {
101 if (cit->isTeXClassAvailable()) {
102 classcombo_.append_text(cit->description());
105 bformat(_("Unavailable: %1$s"), cit->description());
106 classcombo_.append_text(item);
110 xml_->get_widget("ExtraOptions", extraoptionsentry_);
112 xml_->get_widget("PostscriptDriver", box);
113 box->pack_start(psdrivercombo_, true, true, 0);
116 // Populate Postscript driver combo
117 for (int i = 0; tex_graphics[i][0]; ++i) {
118 psdrivercombo_.append_text(tex_graphics[i]);
121 xml_->get_widget("FontSans", box);
122 box->pack_start(fontsanscombo_, true, true, 0);
125 // Populate sans font combo
126 for (int i = 0; tex_fonts_sans_gui[i][0]; ++i) {
127 string font = _(tex_fonts_sans_gui[i]);
128 if (!controller().isFontAvailable(tex_fonts_sans[i]))
129 font += _(" (not installed)");
130 fontsanscombo_.append_text(font);
133 xml_->get_widget("FontRoman", box);
134 box->pack_start(fontromancombo_, true, true, 0);
137 // Populate roman font combo
138 for (int i = 0; tex_fonts_roman_gui[i][0]; ++i) {
139 string font = _(tex_fonts_roman_gui[i]);
140 if (!controller().isFontAvailable(tex_fonts_roman[i]))
141 font += _(" (not installed)");
142 fontsanscombo_.append_text(font);
145 xml_->get_widget("FontTypewriter", box);
146 box->pack_start(fonttypewritercombo_, true, true, 0);
149 // Populate typewriter font combo
150 for (int i = 0; tex_fonts_monospaced_gui[i][0]; ++i) {
151 string font = _(tex_fonts_monospaced_gui[i]);
152 if (!controller().isFontAvailable(tex_fonts_monospaced[i]))
153 font += _(" (not installed)");
154 fontsanscombo_.append_text(font);
157 xml_->get_widget("FontDefaultFamily", box);
158 box->pack_start(fontdefaultfamilycombo_, true, true, 0);
161 // Populate font default family combo
162 for (int i = 0; ControlDocument::fontfamilies_gui[i][0]; ++i)
163 fontdefaultfamilycombo_.append_text(_(ControlDocument::fontfamilies_gui[i]));
165 xml_->get_widget("FontSize", box);
166 box->pack_start(fontsizecombo_, true, true, 0);
169 xml_->get_widget("fontScCB", fontScCB_);
171 xml_->get_widget("fontOsfCB", fontOsfCB_);
173 xml_->get_widget("scaleSansSB", scaleSansSB_);
174 scaleSansSB_->set_range(10, 200);
175 scaleSansSB_->set_digits(0);
177 xml_->get_widget("scaleTypewriterSB", scaleTypewriterSB_);
178 scaleTypewriterSB_->set_range(10, 200);
179 scaleTypewriterSB_->set_digits(0);
181 Gtk::SpinButton * spin;
182 xml_->get_widget("LineSpacing", spin);
183 linespacingadj_ = spin->get_adjustment();
185 xml_->get_widget("Indentation", indentradio_);
186 xml_->get_widget("VerticalSpace", vspaceradio_);
187 vspaceradio_->signal_toggled().connect(
188 sigc::mem_fun(*this, &GDocument::updateParagraphSeparationSensitivity));
191 xml_->get_widget("VerticalSpaceSize", box);
192 box->pack_start(vspacesizecombo_, true, true, 0);
194 // The order of these items is magic
195 vspacesizecombo_.append_text(_("Small Skip"));
196 vspacesizecombo_.append_text(_("Medium Skip"));
197 vspacesizecombo_.append_text(_("Big Skip"));
198 vspacesizecombo_.append_text(_("Custom"));
199 vspacesizemap_[0] = VSpace::SMALLSKIP;
200 vspacesizemap_[1] = VSpace::MEDSKIP;
201 vspacesizemap_[2] = VSpace::BIGSKIP;
202 vspacesizemap_[3] = VSpace::LENGTH;
204 vspacesizecombo_.signal_changed().connect(
206 &GDocument::updateParagraphSeparationSensitivity));
208 xml_->get_widget_derived("VerticalSpaceLength", vspacelengthentry_);
209 vspacelengthentry_->set_relative(false);
211 updateParagraphSeparationSensitivity();
212 // *** End "Document" Page ***
214 // *** Begin "Page" Page ***
215 xml_->get_widget("PageSize", box);
216 box->pack_start(pagesizecombo_, true, true, 0);
218 pagesizecombo_.append_text(_("Default"));
219 pagesizecombo_.append_text(_("Custom"));
220 pagesizecombo_.append_text(_("US letter"));
221 pagesizecombo_.append_text(_("US legal"));
222 pagesizecombo_.append_text(_("US executive"));
223 pagesizecombo_.append_text(_("A3"));
224 pagesizecombo_.append_text(_("A4"));
225 pagesizecombo_.append_text(_("A5"));
226 pagesizecombo_.append_text(_("B3"));
227 pagesizecombo_.append_text(_("B4"));
228 pagesizecombo_.append_text(_("B5"));
229 pagesizecombo_.signal_changed().connect(
230 sigc::mem_fun(*this, &GDocument::pageSizeChanged));
232 xml_->get_widget_derived("PageWidth", pagewidthlengthentry_);
233 xml_->get_widget_derived("PageHeight", pageheightlengthentry_);
234 pagewidthlengthentry_->set_relative(false);
235 pageheightlengthentry_->set_relative(false);
237 xml_->get_widget("Portrait", portraitradio_);
238 xml_->get_widget("Landscape", landscaperadio_);
240 xml_->get_widget("PageStyle", box);
241 box->pack_start(pagestylecombo_, true, true, 0);
243 xml_->get_widget("DoubleSided", doublesidedtoggle_);
244 xml_->get_widget("TwoColumns", twocolumnstoggle_);
245 // *** End "Page" Page ***
247 // *** Begin "Margins" Page ***
248 xml_->get_widget("DefaultMargins", defaultmargins_);
249 defaultmargins_->signal_toggled().connect(
250 sigc::mem_fun(*this, &GDocument::marginsChanged));
252 xml_->get_widget_derived("MarginsTop", mtoplengthentry_);
253 xml_->get_widget_derived("MarginsBottom", mbottomlengthentry_);
254 xml_->get_widget_derived("MarginsInner", minnerlengthentry_);
255 xml_->get_widget_derived("MarginsOuter", mouterlengthentry_);
256 xml_->get_widget_derived("MarginsHeadSep", mheadseplengthentry_);
257 xml_->get_widget_derived("MarginsHeadHeight", mheadheightlengthentry_);
258 xml_->get_widget_derived("MarginsFootSkip", mfootskiplengthentry_);
259 // *** End "Margins" Page ***
261 // *** Start "Language" Page ***
262 xml_->get_widget("Language", box);
263 box->pack_start(languagecombo_, true, true, 0);
266 vector<LanguagePair> const langs = getLanguageData(false);
267 vector<LanguagePair>::const_iterator lit = langs.begin();
268 vector<LanguagePair>::const_iterator lend = langs.end();
269 for (; lit != lend; ++lit) {
270 languagecombo_.append_text(lit->first);
273 xml_->get_widget("TextEncoding", box);
274 box->pack_start(encodingcombo_, true, true, 0);
279 encodingcombo_.append_text(encodings[i++]);
281 xml_->get_widget("EnglishQuote", qenglishradio_);
282 xml_->get_widget("SwedishQuote", qswedishradio_);
283 xml_->get_widget("GermanQuote", qgermanradio_);
284 xml_->get_widget("PolishQuote", qpolishradio_);
285 xml_->get_widget("FrenchQuote", qfrenchradio_);
286 xml_->get_widget("DanishQuote", qdanishradio_);
287 // *** End "Language" Page ***
289 // *** Start "Numbering" Page ***
291 xml_->get_widget("Numbering", scale);
292 numberingadj_ = scale->get_adjustment();
293 numberingadj_->signal_value_changed().connect(
294 sigc::mem_fun(*this, &GDocument::numberingChanged));
295 xml_->get_widget("NumberingLabel", numberinglabel_);
297 xml_->get_widget("TOC", scale);
298 TOCadj_ = scale->get_adjustment();
299 TOCadj_->signal_value_changed().connect(
300 sigc::mem_fun(*this, &GDocument::TOCChanged));
301 xml_->get_widget("TOCLabel", TOClabel_);
302 // *** End "Numbering" Page ***
304 // *** Start "Bibliography" Page ***
305 xml_->get_widget("BasicNumerical", basicnumericalradio_);
306 xml_->get_widget("NatbibNumerical", natbibnumericalradio_);
307 xml_->get_widget("NatbibAuthorYear", natbibauthoryearradio_);
308 xml_->get_widget("Jurabib", jurabibradio_);
309 xml_->get_widget("SectionedBibliography", sectionedbibliographytoggle_);
310 // *** End "Bibliography" Page ***
312 // *** Start "Math" Page ***
313 xml_->get_widget("AMSAutomatically", AMSautomaticallyradio_);
314 xml_->get_widget("AMSAlways", AMSalwaysradio_);
315 xml_->get_widget("AMSNever", AMSneverradio_);
316 // *** End "Math" Page ***
318 // *** Start "Floats" Page ***
319 xml_->get_widget("DocumentDefault", defaultradio_);
320 xml_->get_widget("HereDefinitely", heredefinitelyradio_);
321 xml_->get_widget("Alternative", alternativeradio_);
322 alternativeradio_->signal_toggled().connect(
323 sigc::mem_fun(*this, &GDocument::alternativeChanged));
324 xml_->get_widget("TopOfPage", topcheck_);
325 xml_->get_widget("BottomOfPage", bottomcheck_);
326 xml_->get_widget("PageOfFloats", pageoffloatscheck_);
327 xml_->get_widget("HereIfPossible", hereifpossiblecheck_);
328 xml_->get_widget("IgnoreRules", ignorerulescheck_);
329 // Initial sensitivity
330 GDocument::alternativeChanged();
332 // *** End "Floats" Page ***
334 // *** Start "Bullets" Page ***
335 // *** End "Bullets" Page ***
337 // *** Start "Branches" Page ***
338 xml_->get_widget("Branches", branchesview_);
339 xml_->get_widget("AddBranch", addbranchbutton_);
340 addbranchbutton_->signal_clicked().connect(
341 sigc::mem_fun(*this, &GDocument::addBranch));
342 xml_->get_widget("RemoveBranch", removebranchbutton_);
343 removebranchbutton_->signal_clicked().connect(
344 sigc::mem_fun(*this, &GDocument::removeBranch));
345 branchCols_.add(branchColName_);
346 branchCols_.add(branchColActivated_);
347 branchCols_.add(branchColColor_);
349 branchliststore_ = Gtk::ListStore::create(branchCols_);
350 branchesview_->set_model(branchliststore_);
351 branchesview_->append_column_editable(_("Name"), branchColName_);
352 branchesview_->append_column_editable(_("Activated"), branchColActivated_);
353 branchesview_->append_column_editable(_("Color"), branchColColor_);
354 branchsel_ = branchesview_->get_selection();
356 branchsel_->signal_changed().connect(
357 sigc::mem_fun(*this, &GDocument::branchSelChanged));
360 ErrorList::const_iterator cit = errors.begin();
361 ErrorList::const_iterator end = errors.end();
362 for (int rowindex = 0; cit != end; ++cit, ++rowindex) {
363 Gtk::ListStore::Row row = *errliststore_->append();
365 errlistsel_->select(*row);
367 (*row)[listCol_] = cit->error;
368 (*row)[listColIndex_] = rowindex;
371 Gtk::ListStore::Row row = *branchliststore_->append();
372 (*row)[branchColName_] = "Munch";
373 (*row)[branchColActivated_] = false;
374 row = *branchliststore_->append();
375 (*row)[branchColName_] = "Hunch";
376 (*row)[branchColActivated_] = true;
377 // *** End "Branches" Page ***
379 // *** Begin "Preamble" Page ***
381 xml_->get_widget ("Preamble", view);
382 preamblebuffer_ = view->get_buffer();
383 // *** End "Preamble" Page ***
387 void GDocument::update()
389 BufferParams & params = controller().params();
391 // *** Start "Document" Page ***
394 classcombo_.set_active(params.textclass);
397 extraoptionsentry_->set_text(params.options);
400 psdrivercombo_.set_active_text (params.graphicsDriver);
403 int i = findToken(tex_fonts_sans, params.fontsSans);
405 fontsanscombo_.set_active_text(_(tex_fonts_sans_gui[i]));
406 i = findToken(tex_fonts_sans, params.fontsRoman);
408 fontromancombo_.set_active_text(_(tex_fonts_roman_gui[i]));
409 i = findToken(tex_fonts_monospaced, params.fontsTypewriter);
411 fonttypewritercombo_.set_active_text(tex_fonts_monospaced_gui[i]);
412 i = findToken(ControlDocument::fontfamilies, params.fontsDefaultFamily);
414 fontdefaultfamilycombo_.set_active_text(
415 _(ControlDocument::fontfamilies_gui[i]));
416 fontsizecombo_.set_active_text (params.fontsize);
417 scaleSansSB_->set_value(params.fontsSansScale);
418 scaleTypewriterSB_->set_value(params.fontsTypewriterScale);
419 fontScCB_->set_active(params.fontsSC);
420 fontOsfCB_->set_active(params.fontsOSF);
423 linespacingadj_->set_value(params.spacing().getValue());
425 // Paragraph Separation
426 if (params.paragraph_separation == BufferParams::PARSEP_INDENT) {
427 indentradio_->set_active(true);
429 vspaceradio_->set_active(true);
432 // Paragraph Separation Vertical Space Size
433 VSpace::vspace_kind const skipkind = params.getDefSkip().kind();
434 for (int i = 0; i <= 3; ++i) {
435 if (vspacesizemap_[i] == skipkind)
436 vspacesizecombo_.set_active(i);
439 LyXLength vspacelen = params.getDefSkip().length().len();
440 vspacelengthentry_->set_length (vspacelen);
442 // *** End "Document" Page ***
444 // *** Begin "Page" Page ***
445 int const psize = params.papersize;
446 pagesizecombo_.set_active(psize);
448 pagewidthlengthentry_->set_length(LyXLength(params.paperwidth));
449 pageheightlengthentry_->set_length(LyXLength(params.paperheight));
451 if (params.orientation == ORIENTATION_PORTRAIT)
452 portraitradio_->set_active();
454 landscaperadio_->set_active();
456 if (params.columns == 2)
457 twocolumnstoggle_->set_active(true);
459 twocolumnstoggle_->set_active(false);
461 doublesidedtoggle_->set_active(params.sides == LyXTextClass::TwoSides);
463 pagestylecombo_.set_active_text (params.pagestyle);
464 // *** End "Page" Page ***
466 defaultmargins_->set_active(!params.use_geometry);
468 mtoplengthentry_->set_length(params.topmargin);
469 mbottomlengthentry_->set_length(params.bottommargin);
470 minnerlengthentry_->set_length(params.leftmargin);
471 mouterlengthentry_->set_length(params.rightmargin);
472 mheadseplengthentry_->set_length(params.headsep);
473 mheadheightlengthentry_->set_length(params.headheight);
474 mfootskiplengthentry_->set_length(params.footskip);
477 // *** End "Margins" Page ***
479 // *** Start "Language" Page ***
480 int const langpos = findPos(lang_,
481 params.language->lang());
482 languagecombo_.set_active(langpos);
485 encodingcombo_.set_active(0);
486 if (params.inputenc == "default") {
487 encodingcombo_.set_active(1);
490 while (encodings[i]) {
491 if (encodings[i] == params.inputenc)
492 encodingcombo_.set_active(i);
497 switch (params.quotes_language) {
498 case InsetQuotes::EnglishQ:
499 qenglishradio_->set_active();
501 case InsetQuotes::SwedishQ:
502 qswedishradio_->set_active();
504 case InsetQuotes::GermanQ:
505 qgermanradio_->set_active();
507 case InsetQuotes::PolishQ:
508 qpolishradio_->set_active();
510 case InsetQuotes::FrenchQ:
511 qfrenchradio_->set_active();
513 case InsetQuotes::DanishQ:
514 qdanishradio_->set_active();
518 // *** End "Language" Page ***
520 // *** Start "Numbering" Page ***
521 numberingadj_->set_value(params.secnumdepth + 2);
522 TOCadj_->set_value(params.tocdepth + 1);
523 // *** End "Numbering" Page ***
525 // *** Start "Bibliography" Page ***
526 switch (params.cite_engine) {
527 case biblio::ENGINE_BASIC:
528 basicnumericalradio_->set_active();
530 case biblio::ENGINE_NATBIB_NUMERICAL:
531 natbibnumericalradio_->set_active();
533 case biblio::ENGINE_NATBIB_AUTHORYEAR:
534 natbibauthoryearradio_->set_active();
536 case biblio::ENGINE_JURABIB:
537 jurabibradio_->set_active();
541 sectionedbibliographytoggle_->set_active(params.use_bibtopic);
542 // *** End "Bibliography" Page ***
544 // *** Start "Math" Page ***
545 switch (params.use_amsmath) {
546 case BufferParams::AMS_AUTO:
547 AMSautomaticallyradio_->set_active();
549 case BufferParams::AMS_ON:
550 AMSalwaysradio_->set_active();
552 case BufferParams::AMS_OFF:
553 AMSneverradio_->set_active();
556 // *** End "Math" Page ***
558 // *** Start "Floats" Page ***
559 string const placement = params.float_placement;
560 bool const here_definitely = contains(placement, 'H');
561 bool const top = contains(placement, 't');
562 bool const bottom = contains(placement, 'b');
563 bool const page = contains(placement, 'p');
564 bool const here = contains(placement, 'h');
565 bool const force = contains(placement, '!');
566 bool const alternatives = top || bottom || page || here;
569 alternativeradio_->set_active(true);
570 } else if (here_definitely) {
571 heredefinitelyradio_->set_active(true);
573 defaultradio_->set_active(true);
575 ignorerulescheck_->set_active(force);
576 topcheck_->set_active(top);
577 bottomcheck_->set_active(bottom);
578 pageoffloatscheck_->set_active(page);
579 hereifpossiblecheck_->set_active(here);
581 // *** End "Floats" Page ***
583 // *** Start "Bullets" Page ***
584 // *** End "Bullets" Page ***
586 // *** Start "Branches" Page ***
587 branchliststore_->clear();
589 BranchList::const_iterator it = params.branchlist().begin();
590 BranchList::const_iterator const end = params.branchlist().end();
591 for (; it != end; ++it) {
592 Gtk::ListStore::Row row = *branchliststore_->append();
593 (*row)[branchColName_] = (*it).getBranch();
594 std::cerr << "update: loading '" << (*it).getBranch() << "'\n";
595 (*row)[branchColActivated_] = (*it).getSelected();
596 (*row)[branchColColor_] = X11hexname((*it).getColor());
598 // *** End "Branches" Page ***
600 // *** Begin "Preamble" Page ***
601 preamblebuffer_->set_text(params.preamble);
602 // *** End "Preamble" Page ***
604 // Be a cheesy bastard, for the moment
609 void GDocument::apply()
611 BufferParams & params = controller().params();
613 // *** Start "Document" Page ***
616 params.textclass = classcombo_.get_active_row_number();
619 params.options = extraoptionsentry_->get_text();
622 params.graphicsDriver = psdrivercombo_.get_active_text();
625 params.fontsSans = tex_fonts_sans[fontsanscombo_.get_active_row_number()];
626 params.fontsRoman = tex_fonts_roman[fontromancombo_.get_active_row_number()];
627 params.fontsTypewriter = tex_fonts_monospaced[fonttypewritercombo_.get_active_row_number()];
628 params.fontsDefaultFamily =
629 ControlDocument::fontfamilies[fontdefaultfamilycombo_.get_active_row_number()];
630 params.fontsize = fontsizecombo_.get_active_text();
631 params.fontsSansScale = int(scaleSansSB_->get_adjustment()->get_value());
632 params.fontsTypewriterScale = int(scaleTypewriterSB_->get_adjustment()->get_value());
633 params.fontsSC = fontScCB_->get_active();
634 params.fontsOSF = fontOsfCB_->get_active();
637 params.spacing().set(Spacing::Other, linespacingadj_->get_value());
639 // Paragraph Separation
640 if (indentradio_->get_active()) {
641 params.paragraph_separation = BufferParams::PARSEP_INDENT;
643 params.paragraph_separation = BufferParams::PARSEP_SKIP;
646 // Paragraph Separation Vertical Space Size
647 VSpace::vspace_kind const selection =
648 vspacesizemap_[vspacesizecombo_.get_active_row_number()];
649 params.setDefSkip(VSpace(selection));
650 if (selection == VSpace::LENGTH) {
651 LyXLength length = vspacelengthentry_->get_length();
652 params.setDefSkip(VSpace(LyXGlueLength(length)));
655 // *** End "Document" Page ***
657 // *** Begin "Page" Page ***
658 params.papersize = PAPER_SIZE(
659 pagesizecombo_.get_active_row_number());
661 params.paperwidth = pagewidthlengthentry_->get_length_string();
662 params.paperheight = pageheightlengthentry_->get_length_string();
664 if (portraitradio_->get_active())
665 params.orientation = ORIENTATION_PORTRAIT;
667 params.orientation = ORIENTATION_LANDSCAPE;
669 if (twocolumnstoggle_->get_active())
674 if (doublesidedtoggle_->get_active())
675 params.sides = LyXTextClass::TwoSides;
677 params.sides = LyXTextClass::OneSide;
679 params.pagestyle = pagestylecombo_.get_active_text();
680 // *** End "Page" Page ***
682 // *** Begin "Margins" Page ***
683 params.use_geometry = !defaultmargins_->get_active();
685 params.topmargin = mtoplengthentry_->get_length_string();
686 params.bottommargin = mbottomlengthentry_->get_length_string();
687 params.leftmargin = minnerlengthentry_->get_length_string();
688 params.rightmargin = mouterlengthentry_->get_length_string();
689 params.headsep = mheadseplengthentry_->get_length_string();
690 params.headheight = mheadheightlengthentry_->get_length_string();
691 params.footskip = mfootskiplengthentry_->get_length_string();
692 // *** End "Margins" Page ***
694 // *** Start "Language" Page ***
695 int const encodingsel = encodingcombo_.get_active_row_number();
696 if (encodingsel == 0)
697 params.inputenc = "auto";
698 else if (encodingsel == 1)
699 params.inputenc = "default";
701 params.inputenc = encodings[encodingsel];
703 int const langsel = languagecombo_.get_active_row_number();
704 params.language = languages.getLanguage(lang_[langsel]);
706 if (qenglishradio_->get_active())
707 params.quotes_language = InsetQuotes::EnglishQ;
708 else if (qswedishradio_->get_active())
709 params.quotes_language = InsetQuotes::SwedishQ;
710 else if (qgermanradio_->get_active())
711 params.quotes_language = InsetQuotes::GermanQ;
712 else if (qpolishradio_->get_active())
713 params.quotes_language = InsetQuotes::PolishQ;
714 else if (qfrenchradio_->get_active())
715 params.quotes_language = InsetQuotes::FrenchQ;
716 else if (qdanishradio_->get_active())
717 params.quotes_language = InsetQuotes::DanishQ;
718 // *** End "Language" Page ***
720 // *** Start "Numbering" Page ***
721 params.secnumdepth = (int)(numberingadj_->get_value()) - 2;
722 params.tocdepth = (int)(TOCadj_->get_value()) - 1;
723 // *** End "Numbering" Page ***
725 // *** Start "Bibliography" Page ***
726 if (basicnumericalradio_->get_active())
727 params.cite_engine = biblio::ENGINE_BASIC;
728 else if (natbibnumericalradio_->get_active())
729 params.cite_engine = biblio::ENGINE_NATBIB_NUMERICAL;
730 else if (natbibauthoryearradio_->get_active())
731 params.cite_engine = biblio::ENGINE_NATBIB_AUTHORYEAR;
732 else if (jurabibradio_->get_active())
733 params.cite_engine = biblio::ENGINE_JURABIB;
735 params.use_bibtopic = sectionedbibliographytoggle_->get_active();
736 // *** End "Bibliography" Page ***
738 // *** Start "Math" Page ***
739 if (AMSautomaticallyradio_->get_active())
740 params.use_amsmath = BufferParams::AMS_AUTO;
741 else if (AMSalwaysradio_->get_active())
742 params.use_amsmath = BufferParams::AMS_ON;
743 else if (AMSneverradio_->get_active())
744 params.use_amsmath = BufferParams::AMS_OFF;
745 // *** End "Math" Page ***
747 // *** Start "Floats" Page ***
749 if (alternativeradio_->get_active()) {
750 if (ignorerulescheck_->get_active())
752 if (topcheck_->get_active())
754 if (bottomcheck_->get_active())
756 if (pageoffloatscheck_->get_active())
758 if (hereifpossiblecheck_->get_active())
760 if (placement == "!")
762 } else if (heredefinitelyradio_->get_active())
765 params.float_placement = placement;
766 // *** End "Floats" Page ***
768 // *** Start "Bullets" Page ***
769 // *** End "Bullets" Page ***
771 // *** Start "Branches" Page ***
772 /*branchliststore_->clear();
774 BranchList::const_iterator it = params.branchlist().begin();
775 BranchList::const_iterator const end = params.branchlist().end();
776 for (; it != end; ++it) {
777 Gtk::ListStore::Row row = *branchliststore_->append();
778 (*row)[branchColName_] = (*it).getBranch();
779 (*row)[branchColActivated_] = (*it).getSelected();
780 (*row)[branchColColor_] = (*it).getColor();
783 BranchList branchlist;
785 Gtk::ListStore::iterator it = branchliststore_->children().begin();
786 Gtk::ListStore::iterator const end = branchliststore_->children().end();
787 for (; it != end; ++it) {
788 Gtk::ListStore::Row row = *it;
789 Glib::ustring const name = (*row)[branchColName_];
790 if (branchlist.add(name)) {
791 std::cerr << "apply: adding '" << name << "'\n";
792 Branch * newbranch = branchlist.find(name);
793 newbranch->setSelected((*row)[branchColActivated_]);
794 Glib::ustring const color = (*row)[branchColColor_];
795 // FIXME: The color should be editable via a color
796 // chooser, not a text field (see qt frontends)
797 // setColor will silently ignore an invalid color and
798 // use the normal background color for now.
799 newbranch->setColor(color);
803 params.branchlist() = branchlist;
805 // *** End "Branches" Page ***
807 // *** Begin "Preamble" Page ***
808 params.preamble = preamblebuffer_->get_text();
809 // *** End "Preamble" Page ***
813 void GDocument::saveAsDefaults()
816 controller().saveAsDefault();
820 void GDocument::resetToDefaults()
822 BufferParams & params = controller().params();
823 params.textclass = classcombo_.get_active_row_number();
824 params.useClassDefaults();
829 void GDocument::updateParagraphSeparationSensitivity()
831 bool const vspacesensitive = vspaceradio_->get_active();
833 vspacesizecombo_.set_sensitive(vspacesensitive);
835 bool const lengthsensitive = vspacesensitive &&
836 (vspacesizecombo_.get_active_row_number() == 3);
838 vspacelengthentry_->set_sensitive(lengthsensitive);
842 void GDocument::classChanged()
844 ControlDocument & ctrl = controller();
845 BufferParams & params = ctrl.params();
847 lyx::textclass_type const tc = classcombo_.get_active_row_number();
849 if (ctrl.loadTextclass(tc)) {
850 params.textclass = tc;
852 if (lyxrc.auto_reset_options) {
853 params.useClassDefaults();
856 fontsizecombo_.clear();
857 fontsizecombo_.append_text("default");
859 string const fontsizeitems = ctrl.textClass().opt_fontsize();
860 for (int n = 0; !token(fontsizeitems, '|', n).empty(); ++n)
861 fontsizecombo_.append_text(token(fontsizeitems, '|', n));
863 fontsizecombo_.set_active_text (params.fontsize);
865 pagestylecombo_.clear();
866 pagestylecombo_.append_text("default");
868 string const pagestyleitems = ctrl.textClass().opt_pagestyle();
869 for (int n=0; !token(pagestyleitems,'|',n).empty(); ++n)
870 pagestylecombo_.append_text(token(pagestyleitems,'|',n));
872 pagestylecombo_.set_active_text (params.pagestyle);
875 classcombo_.set_active(params.textclass);
880 void GDocument::pageSizeChanged()
882 bool const customsize = pagesizecombo_.get_active_row_number() == 1;
883 pagewidthlengthentry_->set_sensitive(customsize);
884 pageheightlengthentry_->set_sensitive(customsize);
887 portraitradio_->set_active();
891 void GDocument::marginsChanged()
893 bool const custom = !defaultmargins_->get_active();
895 mtoplengthentry_->set_sensitive(custom);
896 mbottomlengthentry_->set_sensitive(custom);
897 minnerlengthentry_->set_sensitive(custom);
898 mouterlengthentry_->set_sensitive(custom);
899 mheadseplengthentry_->set_sensitive(custom);
900 mheadheightlengthentry_->set_sensitive(custom);
901 mfootskiplengthentry_->set_sensitive(custom);
905 void GDocument::numberingChanged()
907 string const numberinglabels[] = {
908 _("No headings numbered"),
909 _("Only parts numbered"),
910 _("Chapters and above numbered"),
911 _("Sections and above numbered"),
912 _("Subsections and above numbered"),
913 _("Subsubsections and above numbered"),
914 _("Paragraphs and above numbered"),
915 _("All headings numbered")
918 int const value = (int)(numberingadj_->get_value());
919 numberinglabel_->set_label("<i>" + numberinglabels[value] + "</i>");
923 void GDocument::TOCChanged()
925 string const TOClabels[] = {
926 _("Only Parts appear in TOC"),
927 _("Chapters and above appear in TOC"),
928 _("Sections and above appear in TOC"),
929 _("Subsections and above appear in TOC"),
930 _("Subsubsections and above appear in TOC"),
931 _("Paragraphs and above appear in TOC"),
932 _("TOC contains all headings")
935 int const value = (int)(TOCadj_->get_value());
936 TOClabel_->set_label("<i>" + TOClabels[value] + "</i>");
940 void GDocument::alternativeChanged()
942 bool const sens = alternativeradio_->get_active();
943 topcheck_->set_sensitive(sens);
944 bottomcheck_->set_sensitive(sens);
945 pageoffloatscheck_->set_sensitive(sens);
946 hereifpossiblecheck_->set_sensitive(sens);
947 ignorerulescheck_->set_sensitive(sens);
951 void GDocument::addBranch()
953 Gtk::ListStore::Row row = *branchliststore_->append();
954 (*row)[branchColName_] = "New Branch";
955 (*row)[branchColActivated_] = false;
956 (*row)[branchColColor_] = "#000000";
960 void GDocument::removeBranch()
962 Gtk::TreeModel::iterator const selected = branchsel_->get_selected();
963 if (!branchliststore_->iter_is_valid(selected))
966 branchliststore_->erase (selected);
970 void GDocument::branchSelChanged()
972 if (branchsel_->get_selected() == branchliststore_->children().end())
973 removebranchbutton_->set_sensitive(false);
975 removebranchbutton_->set_sensitive(true);
978 } // namespace frontend