]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/QDocument.C
better selection and scrolling behaviour
[lyx.git] / src / frontends / qt2 / QDocument.C
index ab70d9e47adf8f2b430ae901d15422ce47e1a576..e40c10ebf76c2b6cfefb10b13f991f5b3c652756 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "gettext.h"
 
-
 #include "ControlDocument.h"
 #include "QDocument.h"
 #include "QDocumentDialog.h"
 #include <qstringlist.h>
 #include "lengthcombo.h"
 
+#include "QBrowseBox.h"
+
 #include <vector>
 
 using std::vector;
 
 typedef Qt2CB<ControlDocument, Qt2DB<QDocumentDialog> > base_class;
 
+
 QDocument::QDocument()
        : base_class(_("Document Settings"))
 {
@@ -56,16 +58,17 @@ QDocument::QDocument()
        lang_ = getSecond(langs);
 }
 
+
 void QDocument::build_dialog()
 {
        dialog_.reset(new QDocumentDialog(this));
 
-       /* biblio */
+       // biblio
        dialog_->biblioModule->citeStyleCO->insertItem(_("Author-year"));
        dialog_->biblioModule->citeStyleCO->insertItem(_("Numerical"));
        dialog_->biblioModule->citeStyleCO->setCurrentItem(0);
 
-       /* language & quotes */
+       // language & quotes
        vector<frnt::LanguagePair> const langs = frnt::getLanguageData(false);
        vector<frnt::LanguagePair>::const_iterator lit  = langs.begin();
        vector<frnt::LanguagePair>::const_iterator lend = langs.end();
@@ -81,35 +84,35 @@ void QDocument::build_dialog()
        dialog_->langModule->quoteStyleCO->insertItem(_("«text»"));
        dialog_->langModule->quoteStyleCO->insertItem(_("»text«"));
 
-       /* packages */
-       char const * items[] = {"default","auto","latin1","latin2",
-                            "latin3","latin4","latin5","latin9",
-                            "koi8-r","koi8-u","cp866","cp1251",
-                            "iso88595","pt154",0};
+       // packages
+       char const * items[] = {"default", "auto", "latin1", "latin2",
+                            "latin3", "latin4", "latin5", "latin9",
+                            "koi8-r", "koi8-u", "cp866", "cp1251",
+                            "iso88595", "pt154", 0};
        dialog_->packagesModule->encodingCO->insertStrList(items);
 
        dialog_->packagesModule->lspacingCO->insertItem(
-               _("Single"),Spacing::Single);
+               _("Single"), Spacing::Single);
        dialog_->packagesModule->lspacingCO->insertItem(
-               _("OneHalf"),Spacing::Onehalf);
+               _("OneHalf"), Spacing::Onehalf);
        dialog_->packagesModule->lspacingCO->insertItem(
-               _("Double"),Spacing::Double);
+               _("Double"), Spacing::Double);
        dialog_->packagesModule->lspacingCO->insertItem(
-               _("Custom"),Spacing::Other);
+               _("Custom"), Spacing::Other);
 
        for (int n = 0; tex_graphics[n][0]; ++n) {
                QString enc = tex_graphics[n];
                dialog_->packagesModule->psdriverCO->insertItem(enc);
        }
 
-       /* paper */
-       QStringList papersize_;
-       papersize_ << _("Default") << _("Custom") << _("US letter") << _("US legal")
-                  << _("US executive") << _("A3") << _("A4") << _("A5")
-                  << _("B3") << _("B4") << _("B5");
-       dialog_->paperModule->papersizeCO->insertStringList(papersize_);
+       // paper
+       char const * sizes[] = {
+               _("Default") , _("Custom") , _("US letter") , _("US legal")
+                  , _("US executive") , _("A3") , _("A4") , _("A5")
+                  , _("B3") , _("B4") , _("B5"), 0 };
+       dialog_->paperModule->papersizeCO->insertStrList(sizes);
 
-       /* layout */
+       // layout
        for (LyXTextClassList::const_iterator cit = textclasslist.begin();
             cit != textclasslist.end(); ++cit) {
                dialog_->layoutModule->classCO->insertItem(cit->description().c_str());
@@ -136,38 +139,36 @@ void QDocument::build_dialog()
        dialog_->layoutModule->pagestyleCO->insertItem(_("headings"));
        dialog_->layoutModule->pagestyleCO->insertItem(_("fancy"));
 
-       /* margins */
+       // margins
        dialog_->setMargins(0);
 
-       string const bmtablefile = LibFileSearch("images", "standard", "xpm");
-       QString s = bmtablefile.c_str();
-       qWarning("%d", s);
-
        // Manage the restore, ok, apply, restore and cancel/close buttons
        bc().setOK(dialog_->okPB);
        bc().setApply(dialog_->applyPB);
-       bc().setCancel(dialog_->cancelPB);
+       bc().setCancel(dialog_->closePB);
        bc().setRestore(dialog_->restorePB);
 }
 
 
 void QDocument::apply()
 {
-       /* preamble */
-       controller().params().preamble =
+       BufferParams & params = controller().params();
+
+       // preamble
+       params.preamble =
                dialog_->preambleModule->preambleMLE->text().latin1();
 
-       /* biblio */
-       controller().params().use_natbib =
+       // biblio
+       params.use_natbib =
                dialog_->biblioModule->natbibCB->isChecked();
-       controller().params().use_numerical_citations  =
+       params.use_numerical_citations  =
                dialog_->biblioModule->citeStyleCO->currentItem();
 
-       /* language & quotes */
+       // language & quotes
        if (dialog_->langModule->singleQuoteRB->isChecked())
-               controller().params().quotes_times = InsetQuotes::SingleQ;
+               params.quotes_times = InsetQuotes::SingleQ;
        else
-               controller().params().quotes_times = InsetQuotes::DoubleQ;
+               params.quotes_times = InsetQuotes::DoubleQ;
 
 
        InsetQuotes::quote_language lga = InsetQuotes::EnglishQ;
@@ -191,74 +192,85 @@ void QDocument::apply()
                lga = InsetQuotes::DanishQ;
                break;
        }
-       controller().params().quotes_language = lga;
+       params.quotes_language = lga;
 
        int const pos = dialog_->langModule->languageCO->currentItem();
-       controller().params().language = languages.getLanguage(lang_[pos]);
+       params.language = languages.getLanguage(lang_[pos]);
 
-       /* numbering */
-       controller().params().secnumdepth =
+       // numbering
+       params.secnumdepth =
                dialog_->numberingModule->tocDepthSB->value();
-       controller().params().tocdepth =
+       params.tocdepth =
                dialog_->numberingModule->sectionnrDepthSB->value();
 
-       /* packages */
+       // bullets
+       params.user_defined_bullets[0].setText(dialog_->bulletsModule->bullet1LE->text().latin1());
+       params.user_defined_bullets[1].setText(dialog_->bulletsModule->bullet2LE->text().latin1());
+       params.user_defined_bullets[2].setText(dialog_->bulletsModule->bullet3LE->text().latin1());
+       params.user_defined_bullets[3].setText(dialog_->bulletsModule->bullet4LE->text().latin1());
+
+       params.user_defined_bullets[0].setSize(dialog_->bulletsModule->bulletsize1CO->currentItem()-1);
+       params.user_defined_bullets[1].setSize(dialog_->bulletsModule->bulletsize2CO->currentItem()-1);
+       params.user_defined_bullets[2].setSize(dialog_->bulletsModule->bulletsize3CO->currentItem()-1);
+       params.user_defined_bullets[3].setSize(dialog_->bulletsModule->bulletsize4CO->currentItem()-1);
+
+       // packages
        switch (dialog_->packagesModule->lspacingCO->currentItem()) {
        case 0:
-               controller().params().spacing.set(Spacing::Single);
+               params.spacing.set(Spacing::Single);
                break;
        case 1:
-               controller().params().spacing.set(Spacing::Onehalf);
+               params.spacing.set(Spacing::Onehalf);
                break;
        case 2:
-               controller().params().spacing.set(Spacing::Double);
+               params.spacing.set(Spacing::Double);
                break;
        case 3:
-               controller().params().spacing.set(Spacing::Other,
+               params.spacing.set(Spacing::Other,
                                   dialog_->packagesModule->
                                   lspacingLE->text().toFloat()
                                   );
                break;
        }
 
-       controller().params().graphicsDriver =
+       params.graphicsDriver =
                dialog_->packagesModule->psdriverCO->currentText().latin1();
 
-       controller().params().use_amsmath =
+       params.use_amsmath =
                dialog_->packagesModule->amsCB->isChecked();
 
-       controller().params().inputenc =
+       params.inputenc =
                dialog_->packagesModule->encodingCO->currentText().latin1();
 
-       /* layout */
-       controller().params().textclass =
+       // layout
+       params.textclass =
                dialog_->layoutModule->classCO->currentItem();
 
        //bool succes = controller().classApply();
 
-       controller().params().fonts =
+       params.fonts =
                dialog_->layoutModule->fontsCO->currentText().latin1();
 
-       controller().params().fontsize =
+       params.fontsize =
                dialog_->layoutModule->fontsizeCO->currentText().latin1();
 
-       controller().params().pagestyle =
+       params.pagestyle =
                dialog_->layoutModule->pagestyleCO->currentText().latin1();
 
        if (dialog_->layoutModule->indentRB->isChecked())
-               controller().params().paragraph_separation = BufferParams::PARSEP_INDENT;
+               params.paragraph_separation = BufferParams::PARSEP_INDENT;
        else
-               controller().params().paragraph_separation = BufferParams::PARSEP_SKIP;
+               params.paragraph_separation = BufferParams::PARSEP_SKIP;
 
        switch (dialog_->layoutModule->skipCO->currentItem()) {
        case 0:
-               controller().params().setDefSkip(VSpace(VSpace::SMALLSKIP));
+               params.setDefSkip(VSpace(VSpace::SMALLSKIP));
                break;
        case 1:
-               controller().params().setDefSkip(VSpace(VSpace::MEDSKIP));
+               params.setDefSkip(VSpace(VSpace::MEDSKIP));
                break;
        case 2:
-               controller().params().setDefSkip(VSpace(VSpace::BIGSKIP));
+               params.setDefSkip(VSpace(VSpace::BIGSKIP));
                break;
        case 3:
        {
@@ -268,102 +280,100 @@ void QDocument::apply()
                double length =
                        dialog_->layoutModule->skipLE->text().toDouble();
                VSpace vs = VSpace(LyXGlueLength(LyXLength(length,unit)));
-               controller().params().setDefSkip(vs);
+               params.setDefSkip(vs);
                break;
        }
        default:
                // DocumentDefskipCB assures that this never happens
-               controller().params().setDefSkip(VSpace(VSpace::MEDSKIP));
+               // so Assert then !!!  - jbl
+               params.setDefSkip(VSpace(VSpace::MEDSKIP));
                break;
        }
 
-       controller().params().options =
+       params.options =
                dialog_->layoutModule->optionsLE->text().latin1();
 
-       controller().params().float_placement =
+       params.float_placement =
                dialog_->layoutModule->floatPlacementLE->text().latin1();
 
-       /* paper */
-       controller().params().papersize2 =
+       // paper
+       params.papersize2 =
                dialog_->paperModule->papersizeCO->currentItem();
 
-       controller().params().paperwidth =
+       params.paperwidth =
                LyXLength(dialog_->paperModule->paperwidthLE->text().toDouble(),
                          dialog_->paperModule->paperwidthUnitCO->currentLengthItem()
                        ).asString();
 
-       controller().params().paperheight =
+       params.paperheight =
                LyXLength(dialog_->paperModule->paperheightLE->text().toDouble(),
                          dialog_->paperModule->paperheightUnitCO->currentLengthItem()
                        ).asString();
 
        if (dialog_->paperModule->twoColumnCB->isChecked())
-               controller().params().columns = 2;
+               params.columns = 2;
        else
-               controller().params().columns = 1;
+               params.columns = 1;
 
        if (dialog_->paperModule->facingPagesCB->isChecked())
-               controller().params().sides = LyXTextClass::TwoSides;
+               params.sides = LyXTextClass::TwoSides;
        else
-               controller().params().sides = LyXTextClass::OneSide;
+               params.sides = LyXTextClass::OneSide;
 
        if (dialog_->paperModule->landscapeRB->isChecked())
-               controller().params().orientation = BufferParams::ORIENTATION_LANDSCAPE;
+               params.orientation = BufferParams::ORIENTATION_LANDSCAPE;
        else
-               controller().params().orientation = BufferParams::ORIENTATION_PORTRAIT;
+               params.orientation = BufferParams::ORIENTATION_PORTRAIT;
 
-       /* margins */
-       controller().params().use_geometry =
-               dialog_->marginsModule->marginCO->currentItem()==1;
+       // margins
+       params.use_geometry =
+               (dialog_->marginsModule->marginCO->currentItem() == 1);
 
        int margin = dialog_->marginsModule->marginCO->currentItem();
-       if (margin>0) {
+       if (margin > 0) {
                margin = margin - 1;
        }
-       controller().params().paperpackage = char(margin);
+       params.paperpackage = char(margin);
 
-       controller().params().leftmargin =
-               LyXLength(dialog_->marginsModule->innerLE->text().toDouble(),
-                         dialog_->marginsModule->innerUnit->currentLengthItem()
-                         ).asString();
+       MarginsModuleBase const * m(dialog_->marginsModule);
 
-       controller().params().topmargin =
-               LyXLength(dialog_->marginsModule->topLE->text().toDouble(),
-                         dialog_->marginsModule->topUnit->currentLengthItem()
+       params.leftmargin =
+               LyXLength(m->innerLE->text().toDouble(),
+                         m->innerUnit->currentLengthItem()
                          ).asString();
 
-
-       controller().params().rightmargin =
-               LyXLength(dialog_->marginsModule->outerLE->text().toDouble(),
-                         dialog_->marginsModule->outerUnit->currentLengthItem()
+       params.topmargin =
+               LyXLength(m->topLE->text().toDouble(),
+                         m->topUnit->currentLengthItem()
                          ).asString();
 
-
-       controller().params().bottommargin =
-               LyXLength(dialog_->marginsModule->bottomLE->text().toDouble(),
-                         dialog_->marginsModule->bottomUnit->currentLengthItem()
+       params.rightmargin =
+               LyXLength(m->outerLE->text().toDouble(),
+                         m->outerUnit->currentLengthItem()
                          ).asString();
 
-
-       controller().params().headheight =
-               LyXLength(dialog_->marginsModule->headheightLE->text().toDouble(),
-                         dialog_->marginsModule->headheightUnit->currentLengthItem()
+       params.bottommargin =
+               LyXLength(m->bottomLE->text().toDouble(),
+                         m->bottomUnit->currentLengthItem()
                          ).asString();
 
-
-       controller().params().headsep =
-               LyXLength(dialog_->marginsModule->headsepLE->text().toDouble(),
-                         dialog_->marginsModule->headsepUnit->currentLengthItem()
+       params.headheight =
+               LyXLength(m->headheightLE->text().toDouble(),
+                         m->headheightUnit->currentLengthItem()
                          ).asString();
 
-
-       controller().params().footskip =
-               LyXLength(dialog_->marginsModule->footskipLE->text().toDouble(),
-                         dialog_->marginsModule->footskipUnit->currentLengthItem()
+       params.headsep =
+               LyXLength(m->headsepLE->text().toDouble(),
+                         m->headsepUnit->currentLengthItem()
                          ).asString();
 
+       params.footskip =
+               LyXLength(m->footskipLE->text().toDouble(),
+                         m->footskipUnit->currentLengthItem()
+                         ).asString();
 }
 
+
 namespace {
 
 /** Return the position of val in the vector if found.
@@ -382,56 +392,74 @@ findPos(std::vector<A> const & vec, A const & val)
 
 } // namespace anom
 
+
 void QDocument::update_contents()
 {
        if (!dialog_.get())
                return;
 
-       /* preamble */
-       QString preamble = controller().params().preamble.c_str();
+       BufferParams const & params = controller().params();
+
+       // preamble
+       QString preamble = params.preamble.c_str();
        dialog_->preambleModule->preambleMLE->setText(preamble);
 
-       /* biblio */
+       // biblio
        dialog_->biblioModule->natbibCB->setChecked(
-               controller().params().use_natbib);
+               params.use_natbib);
        dialog_->biblioModule->citeStyleCO->setCurrentItem(
-               controller().params().use_numerical_citations ? 1 : 0);
+               params.use_numerical_citations ? 1 : 0);
 
-       /* language & quotes */
+       // language & quotes
        dialog_->langModule->singleQuoteRB->setChecked(
-               controller().params().quotes_times == InsetQuotes::SingleQ);
+               params.quotes_times == InsetQuotes::SingleQ);
        dialog_->langModule->doubleQuoteRB->setChecked(
-               controller().params().quotes_times == InsetQuotes::DoubleQ);
+               params.quotes_times == InsetQuotes::DoubleQ);
 
        int const pos = int(findPos(lang_,
-                                   controller().params().language->lang()));
+                                   params.language->lang()));
        dialog_->langModule->languageCO->setCurrentItem(pos);
 
        dialog_->langModule->quoteStyleCO->setCurrentItem(
-               controller().params().quotes_language);
+               params.quotes_language);
 
-       /* numbering */
+       // numbering
        dialog_->numberingModule->tocDepthSB->setValue(
-               controller().params().secnumdepth);
+               params.secnumdepth);
        dialog_->numberingModule->sectionnrDepthSB->setValue(
-               controller().params().tocdepth);
-
-       /* packages */
-       QStringList enc;
-       enc <<  "default" << "auto" << "latin1" << "latin2" << "latin3" <<
-               "latin4" << "latin5" << "latin9" << "koi8-r" << "koi8-u" <<
-               "cp866" << "cp1251" << "iso88595" << "pt154";
-       int pos2 = 0;
-       for (QStringList::Iterator it = enc.begin();
-            it!=enc.end(); ++it) {
-               if (*it==controller().params().inputenc.c_str()) {
-                       dialog_->packagesModule->encodingCO->setCurrentItem(pos2);
-               }
-               ++pos2;
+               params.tocdepth);
+
+       // bullets
+       QString s;
+       s = params.user_defined_bullets[0].getText().c_str();
+       dialog_->bulletsModule->bullet1LE->setText(s);
+       s = params.user_defined_bullets[1].getText().c_str();
+       dialog_->bulletsModule->bullet2LE->setText(s);
+       s = params.user_defined_bullets[2].getText().c_str();
+       dialog_->bulletsModule->bullet3LE->setText(s);
+       s = params.user_defined_bullets[3].getText().c_str();
+       dialog_->bulletsModule->bullet4LE->setText(s);
+
+       dialog_->bulletsModule->bulletsize1CO->setCurrentItem(
+               params.user_defined_bullets[0].getSize() + 1);
+       dialog_->bulletsModule->bulletsize2CO->setCurrentItem(
+               params.user_defined_bullets[1].getSize() + 1);
+       dialog_->bulletsModule->bulletsize3CO->setCurrentItem(
+               params.user_defined_bullets[2].getSize() + 1);
+       dialog_->bulletsModule->bulletsize4CO->setCurrentItem(
+               params.user_defined_bullets[3].getSize() + 1);
+
+       // packages
+       char const * enc[] = {
+               "default" , "auto" , "latin1" , "latin2" , "latin3" ,
+               "latin4" , "latin5" , "latin9" , "koi8-r" , "koi8-u" ,
+               "cp866" , "cp1251" , "iso88595" , "pt154" };
+       for (size_t i = 0; i < sizeof(enc)/sizeof(char *); ++i) {
+               if (params.inputenc == enc[i])
+                       dialog_->packagesModule->encodingCO->setCurrentItem(i);
        }
 
-
-       QString text = controller().params().graphicsDriver.c_str();
+       QString text = params.graphicsDriver.c_str();
        int nitem = dialog_->packagesModule->psdriverCO->count();
        for (int n = 0; n < nitem ; ++n) {
                QString enc = tex_graphics[n];
@@ -442,20 +470,25 @@ void QDocument::update_contents()
 
 
        dialog_->packagesModule->amsCB->setChecked(
-               controller().params().use_amsmath);
+               params.use_amsmath);
 
-       dialog_->packagesModule->lspacingCO->
-               setCurrentItem(controller().params().spacing.getSpace());
-       if (controller().params().spacing.getSpace()==
-           Spacing::Other) {
+       switch (params.spacing.getSpace()) {
+               case Spacing::Other: nitem = 3; break;
+               case Spacing::Double: nitem = 2; break;
+               case Spacing::Onehalf: nitem = 1; break;
+               case Spacing::Default: case Spacing::Single: nitem = 0; break;
+       }
+
+       dialog_->packagesModule->lspacingCO->setCurrentItem(nitem);
+       if (params.spacing.getSpace() == Spacing::Other) {
                dialog_->packagesModule->lspacingLE->setText(
-                       tostr(controller().params().spacing.getValue()).c_str());
+                       tostr(params.spacing.getValue()).c_str());
                dialog_->setLSpacing(3);
        }
 
-       /* layout */
+       // layout
        for (int n = 0; n<dialog_->layoutModule->classCO->count(); ++n) {
-               if (dialog_->layoutModule->classCO->text(n)==
+               if (dialog_->layoutModule->classCO->text(n) ==
                    controller().textClass().description().c_str()) {
                        dialog_->layoutModule->classCO->setCurrentItem(n);
                        break;
@@ -463,19 +496,19 @@ void QDocument::update_contents()
        }
 
        dialog_->updateFontsize(controller().textClass().opt_fontsize(),
-                               controller().params().fontsize);
+                               params.fontsize);
 
        dialog_->updatePagestyle(controller().textClass().opt_pagestyle(),
-                                controller().params().pagestyle);
+                                params.pagestyle);
 
        for (int n = 0; tex_fonts[n][0]; ++n) {
-               if (tex_fonts[n]==controller().params().fonts) {
+               if (tex_fonts[n] == params.fonts) {
                        dialog_->layoutModule->fontsCO->setCurrentItem(n);
                        break;
                }
        }
 
-       if (controller().params().paragraph_separation
+       if (params.paragraph_separation
            == BufferParams::PARSEP_INDENT) {
                dialog_->layoutModule->indentRB->setChecked(true);
        } else {
@@ -483,7 +516,7 @@ void QDocument::update_contents()
        }
 
        int skip = 0;
-       switch (controller().params().getDefSkip().kind()) {
+       switch (params.getDefSkip().kind()) {
        case VSpace::SMALLSKIP:
                skip = 0;
                break;
@@ -496,7 +529,7 @@ void QDocument::update_contents()
        case VSpace::LENGTH:
        {
                skip = 3;
-               string const length = controller().params().getDefSkip().asLyXCommand();
+               string const length = params.getDefSkip().asLyXCommand();
                dialog_->layoutModule->skipLengthCO->setCurrentItem(LyXLength(length).unit());
                dialog_->layoutModule->skipLE->setText(tostr(LyXLength(length).value()).c_str());
                break;
@@ -508,86 +541,91 @@ void QDocument::update_contents()
        dialog_->layoutModule->skipCO->setCurrentItem(skip);
        dialog_->setSkip(skip);
 
-       if (!controller().params().options.empty()) {
+       if (!params.options.empty()) {
                dialog_->layoutModule->optionsLE->setText(
-                       controller().params().options.c_str());
+                       params.options.c_str());
        } else {
                dialog_->layoutModule->optionsLE->setText("");
        }
 
-       /* paper */
-       int const psize = controller().params().papersize2;
+       // paper
+       int const psize = params.papersize2;
        dialog_->paperModule->papersizeCO->setCurrentItem(psize);
        dialog_->setMargins(psize);
        dialog_->setCustomPapersize(psize);
 
        bool const landscape =
-               controller().params().orientation == BufferParams::ORIENTATION_LANDSCAPE;
+               params.orientation == BufferParams::ORIENTATION_LANDSCAPE;
        dialog_->paperModule->landscapeRB->setChecked(landscape);
        dialog_->paperModule->portraitRB->setChecked(!landscape);
 
        dialog_->paperModule->facingPagesCB->setChecked(
-               controller().params().sides == LyXTextClass::TwoSides);
+               params.sides == LyXTextClass::TwoSides);
 
        dialog_->paperModule->twoColumnCB->setChecked(
-               controller().params().columns == 2);
+               params.columns == 2);
 
        dialog_->paperModule->paperwidthUnitCO->setCurrentItem(
-               LyXLength(controller().params().paperwidth).unit());
+               LyXLength(params.paperwidth).unit());
 
        dialog_->paperModule->paperwidthLE->setText(
-               tostr(LyXLength(controller().params().paperwidth).value()).c_str());
+               tostr(LyXLength(params.paperwidth).value()).c_str());
 
        dialog_->paperModule->paperheightUnitCO->setCurrentItem(
-               LyXLength(controller().params().paperheight).unit());
+               LyXLength(params.paperheight).unit());
 
        dialog_->paperModule->paperheightLE->setText(
-               tostr(LyXLength(controller().params().paperheight).value()).c_str());
+               tostr(LyXLength(params.paperheight).value()).c_str());
+
+       // margins
+
+       MarginsModuleBase * m(dialog_->marginsModule);
 
-       /* margins */
-       int item = controller().params().paperpackage;
-       if (controller().params().use_geometry) {
+       int item = params.paperpackage;
+       if (params.use_geometry) {
                item = 1;
        } else if (item > 0) {
                item = item + 1;
        }
-       dialog_->marginsModule->marginCO->setCurrentItem(item);
+       m->marginCO->setCurrentItem(item);
        dialog_->setCustomMargins(item);
 
-       dialog_->marginsModule->topUnit->setCurrentItem(
-               LyXLength(controller().params().topmargin).unit());
-       dialog_->marginsModule->topLE->setText(
-               tostr(LyXLength(controller().params().topmargin).value()).c_str());
+       m->topUnit->setCurrentItem(LyXLength(params.topmargin).unit());
+       m->topLE->setText(tostr(LyXLength(params.topmargin).value()).c_str());
 
-       dialog_->marginsModule->bottomUnit->setCurrentItem(
-               LyXLength(controller().params().bottommargin).unit());
-       dialog_->marginsModule->bottomLE->setText(
-               tostr(LyXLength(controller().params().bottommargin).value()).c_str());
+       m->bottomUnit->setCurrentItem(LyXLength(params.bottommargin).unit());
+       m->bottomLE->setText(tostr(LyXLength(params.bottommargin).value()).c_str());
 
-       dialog_->marginsModule->innerUnit->setCurrentItem(
-               LyXLength(controller().params().leftmargin).unit());
-       dialog_->marginsModule->innerLE->setText(
-               tostr(LyXLength(controller().params().leftmargin).value()).c_str());
+       m->innerUnit->setCurrentItem(LyXLength(params.leftmargin).unit());
+       m->innerLE->setText(tostr(LyXLength(params.leftmargin).value()).c_str());
 
-       dialog_->marginsModule->outerUnit->setCurrentItem(
-               LyXLength(controller().params().rightmargin).unit());
-       dialog_->marginsModule->outerLE->setText(
-               tostr(LyXLength(controller().params().rightmargin).value()).c_str());
+       m->outerUnit->setCurrentItem(LyXLength(params.rightmargin).unit());
+       m->outerLE->setText(tostr(LyXLength(params.rightmargin).value()).c_str());
 
-       dialog_->marginsModule->headheightUnit->setCurrentItem(
-               LyXLength(controller().params().headheight).unit());
-       dialog_->marginsModule->headheightLE->setText(
-               tostr(LyXLength(controller().params().headheight).value()).c_str());
+       m->headheightUnit->setCurrentItem(LyXLength(params.headheight).unit());
+       m->headheightLE->setText(tostr(LyXLength(params.headheight).value()).c_str());
 
-       dialog_->marginsModule->headsepUnit->setCurrentItem(
-               LyXLength(controller().params().headsep).unit());
-       dialog_->marginsModule->headsepLE->setText(
-               tostr(LyXLength(controller().params().headsep).value()).c_str());
+       m->headsepUnit->setCurrentItem(LyXLength(params.headsep).unit());
+       m->headsepLE->setText(tostr(LyXLength(params.headsep).value()).c_str());
+
+       m->footskipUnit->setCurrentItem(LyXLength(params.footskip).unit());
+       m->footskipLE->setText(tostr(LyXLength(params.footskip).value()).c_str());
+}
 
-       dialog_->marginsModule->footskipUnit->setCurrentItem(
-               LyXLength(controller().params().footskip).unit());
-       dialog_->marginsModule->footskipLE->setText(
-               tostr(LyXLength(controller().params().footskip).value()).c_str());
 
+void QDocument::saveDocDefault()
+{
+       // we have to apply the params first
+       apply();
+       controller().saveAsDefault();
+}
+
+
+void QDocument::useClassDefaults()
+{
+       BufferParams & params = controller().params();
 
+       params.textclass = dialog_->layoutModule->classCO->currentItem();
+       params.useClassDefaults();
+       update_contents();
 }