]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/QDocumentDialog.C
enable Font cache only for MacOSX and inline width() for other platform.
[lyx.git] / src / frontends / qt4 / QDocumentDialog.C
index 55d34bd011a7c087fa02fc84529daaac0e3eeaa2..164e76d8af1180eb159176453511e664c9ecdb65 100644 (file)
@@ -16,7 +16,7 @@
 
 #include <QCloseEvent>
 
-#include "floatplacement.h"
+#include "FloatPlacement.h"
 #include "lengthcombo.h"
 #include "validators.h"
 #include "panelstack.h"
@@ -25,7 +25,6 @@
 #include "qt_helpers.h"
 
 #include "bufferparams.h"
-#include "floatplacement.h"
 #include "gettext.h"
 #include "helper_funcs.h" // getSecond()
 #include "language.h"
@@ -45,6 +44,7 @@
 
 using lyx::support::token;
 using lyx::support::bformat;
+using lyx::support::findToken;
 using lyx::support::getVectorFromString;
 
 using std::distance;
@@ -96,8 +96,6 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
 
        textLayoutModule = new UiWidget<Ui::TextLayoutUi>;
        // text layout
-       connect(textLayoutModule->fontsCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
-       connect(textLayoutModule->fontsizeCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
        connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
        connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)), this, SLOT(setLSpacing(int)));
        connect(textLayoutModule->lspacingLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
@@ -114,30 +112,20 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        textLayoutModule->skipLE->setValidator(unsignedLengthValidator(
                textLayoutModule->skipLE));
 
-       for (int n = 0; tex_fonts[n][0]; ++n) {
-               QString font = tex_fonts[n];
-               textLayoutModule->fontsCO->insertItem(font);
-       }
-
-       textLayoutModule->fontsizeCO->insertItem(qt_("default"));
-       textLayoutModule->fontsizeCO->insertItem(qt_("10"));
-       textLayoutModule->fontsizeCO->insertItem(qt_("11"));
-       textLayoutModule->fontsizeCO->insertItem(qt_("12"));
-
-       textLayoutModule->skipCO->insertItem(qt_("SmallSkip"));
-       textLayoutModule->skipCO->insertItem(qt_("MedSkip"));
-       textLayoutModule->skipCO->insertItem(qt_("BigSkip"));
-       textLayoutModule->skipCO->insertItem(qt_("Length"));
+       textLayoutModule->skipCO->addItem(qt_("SmallSkip"));
+       textLayoutModule->skipCO->addItem(qt_("MedSkip"));
+       textLayoutModule->skipCO->addItem(qt_("BigSkip"));
+       textLayoutModule->skipCO->addItem(qt_("Length"));
        // remove the %-items from the unit choice
        textLayoutModule->skipLengthCO->noPercents();
        textLayoutModule->lspacingCO->insertItem(
-               qt_("Single"), Spacing::Single);
+               Spacing::Single, qt_("Single"));
        textLayoutModule->lspacingCO->insertItem(
-               qt_("OneHalf"), Spacing::Onehalf);
+               Spacing::Onehalf, qt_("OneHalf"));
        textLayoutModule->lspacingCO->insertItem(
-               qt_("Double"), Spacing::Double);
+               Spacing::Double, qt_("Double"));
        textLayoutModule->lspacingCO->insertItem(
-               qt_("Custom"), Spacing::Other);
+               Spacing::Other, qt_("Custom"));
 
        // initialize the length validator
        addCheckedLineEdit(form_->bcview(), textLayoutModule->skipLE);
@@ -145,6 +133,52 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
 
 
 
+       fontModule = new UiWidget<Ui::FontUi>;
+       // fonts
+       connect(fontModule->fontsRomanCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->fontsRomanCO, SIGNAL(activated(int)), this, SLOT(romanChanged(int)));
+       connect(fontModule->fontsSansCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->fontsSansCO, SIGNAL(activated(int)), this, SLOT(sansChanged(int)));
+       connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)), this, SLOT(ttChanged(int)));
+       connect(fontModule->fontsDefaultCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->fontsizeCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->scaleSansSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->scaleTypewriterSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
+       connect(fontModule->fontScCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
+       connect(fontModule->fontOsfCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
+
+       for (int n = 0; tex_fonts_roman[n][0]; ++n) {
+               QString font = toqstr(tex_fonts_roman_gui[n]);
+               if (!form_->controller().isFontAvailable(tex_fonts_roman[n]))
+                       font += qt_(" (not installed)");
+               fontModule->fontsRomanCO->addItem(font);
+       }
+       for (int n = 0; tex_fonts_sans[n][0]; ++n) {
+               QString font = toqstr(tex_fonts_sans_gui[n]);
+               if (!form_->controller().isFontAvailable(tex_fonts_sans[n]))
+                       font += qt_(" (not installed)");
+               fontModule->fontsSansCO->addItem(font);
+       }
+       for (int n = 0; tex_fonts_monospaced[n][0]; ++n) {
+               QString font = toqstr(tex_fonts_monospaced_gui[n]);
+               if (!form_->controller().isFontAvailable(tex_fonts_monospaced[n]))
+                       font += qt_(" (not installed)");
+               fontModule->fontsTypewriterCO->addItem(font);
+       }
+
+       fontModule->fontsizeCO->addItem(qt_("default"));
+       fontModule->fontsizeCO->addItem(qt_("10"));
+       fontModule->fontsizeCO->addItem(qt_("11"));
+       fontModule->fontsizeCO->addItem(qt_("12"));
+
+       for (int n = 0; ControlDocument::fontfamilies_gui[n][0]; ++n)
+               fontModule->fontsDefaultCO->addItem(
+                       qt_(ControlDocument::fontfamilies_gui[n]));
+
+
+
+
        pageLayoutModule = new UiWidget<Ui::PageLayoutUi>;
        // page layout
        connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)), this, SLOT(setCustomPapersize(int)));
@@ -159,11 +193,11 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        connect(pageLayoutModule->landscapeRB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
        connect(pageLayoutModule->facingPagesCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
        connect(pageLayoutModule->pagestyleCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
-       pageLayoutModule->pagestyleCO->insertItem(qt_("default"));
-       pageLayoutModule->pagestyleCO->insertItem(qt_("empty"));
-       pageLayoutModule->pagestyleCO->insertItem(qt_("plain"));
-       pageLayoutModule->pagestyleCO->insertItem(qt_("headings"));
-       pageLayoutModule->pagestyleCO->insertItem(qt_("fancy"));
+       pageLayoutModule->pagestyleCO->addItem(qt_("default"));
+       pageLayoutModule->pagestyleCO->addItem(qt_("empty"));
+       pageLayoutModule->pagestyleCO->addItem(qt_("plain"));
+       pageLayoutModule->pagestyleCO->addItem(qt_("headings"));
+       pageLayoutModule->pagestyleCO->addItem(qt_("fancy"));
        addCheckedLineEdit(form_->bcview(), pageLayoutModule->paperheightLE,
                pageLayoutModule->paperheightL);
        addCheckedLineEdit(form_->bcview(), pageLayoutModule->paperwidthLE,
@@ -171,17 +205,17 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
 
        // paper
        QComboBox * cb = pageLayoutModule->papersizeCO;
-       cb->insertItem(qt_("Default"));
-       cb->insertItem(qt_("Custom"));
-       cb->insertItem(qt_("US letter"));
-       cb->insertItem(qt_("US legal"));
-       cb->insertItem(qt_("US executive"));
-       cb->insertItem(qt_("A3"));
-       cb->insertItem(qt_("A4"));
-       cb->insertItem(qt_("A5"));
-       cb->insertItem(qt_("B3"));
-       cb->insertItem(qt_("B4"));
-       cb->insertItem(qt_("B5"));
+       cb->addItem(qt_("Default"));
+       cb->addItem(qt_("Custom"));
+       cb->addItem(qt_("US letter"));
+       cb->addItem(qt_("US legal"));
+       cb->addItem(qt_("US executive"));
+       cb->addItem(qt_("A3"));
+       cb->addItem(qt_("A4"));
+       cb->addItem(qt_("A5"));
+       cb->addItem(qt_("B3"));
+       cb->addItem(qt_("B4"));
+       cb->addItem(qt_("B5"));
        // remove the %-items from the unit choice
        pageLayoutModule->paperwidthUnitCO->noPercents();
        pageLayoutModule->paperheightUnitCO->noPercents();
@@ -258,21 +292,21 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        vector<LanguagePair>::const_iterator lit  = langs.begin();
        vector<LanguagePair>::const_iterator lend = langs.end();
        for (; lit != lend; ++lit) {
-               langModule->languageCO->insertItem(
+               langModule->languageCO->addItem(
                        toqstr(lit->first));
        }
 
        int k = 0;
        while (encodings[k]) {
-               langModule->encodingCO->insertItem(qt_(encodings[k++]));
+               langModule->encodingCO->addItem(qt_(encodings[k++]));
        }
 
-       langModule->quoteStyleCO->insertItem(qt_("``text''"));
-       langModule->quoteStyleCO->insertItem(qt_("''text''"));
-       langModule->quoteStyleCO->insertItem(qt_(",,text``"));
-       langModule->quoteStyleCO->insertItem(qt_(",,text''"));
-       langModule->quoteStyleCO->insertItem(qt_("<<text>>"));
-       langModule->quoteStyleCO->insertItem(qt_(">>text<<"));
+       langModule->quoteStyleCO->addItem(qt_("``text''"));
+       langModule->quoteStyleCO->addItem(qt_("''text''"));
+       langModule->quoteStyleCO->addItem(qt_(",,text``"));
+       langModule->quoteStyleCO->addItem(qt_(",,text''"));
+       langModule->quoteStyleCO->addItem(qt_("<<text>>"));
+       langModule->quoteStyleCO->addItem(qt_(">>text<<"));
 
 
 
@@ -298,9 +332,9 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        connect(biblioModule->citeJurabibRB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
        connect(biblioModule->bibtopicCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
        // biblio
-       biblioModule->citeStyleCO->insertItem(qt_("Author-year"));
-       biblioModule->citeStyleCO->insertItem(qt_("Numerical"));
-       biblioModule->citeStyleCO->setCurrentItem(0);
+       biblioModule->citeStyleCO->addItem(qt_("Author-year"));
+       biblioModule->citeStyleCO->addItem(qt_("Numerical"));
+       biblioModule->citeStyleCO->setCurrentIndex(0);
 
 
 
@@ -320,17 +354,17 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        // packages
        for (int n = 0; tex_graphics[n][0]; ++n) {
                QString enc = tex_graphics[n];
-               latexModule->psdriverCO->insertItem(enc);
+               latexModule->psdriverCO->addItem(enc);
        }
        // latex
        for (LyXTextClassList::const_iterator cit = textclasslist.begin();
             cit != textclasslist.end(); ++cit) {
                if (cit->isTeXClassAvailable()) {
-                       latexModule->classCO->insertItem(toqstr(cit->description()));
+                       latexModule->classCO->addItem(toqstr(cit->description()));
                } else {
-                       string item =
-                               bformat(_("Unavailable: %1$s"), cit->description());
-                       latexModule->classCO->insertItem(toqstr(item));
+                       docstring item =
+                               bformat(_("Unavailable: %1$s"), lyx::from_utf8(cit->description()));
+                       latexModule->classCO->addItem(toqstr(item));
                }
        }
 
@@ -340,33 +374,34 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        connect(branchesModule, SIGNAL(changed()), this, SLOT(change_adaptor()));
 
 
-       preambleModule = new UiWidget<Ui::PreambleUi>;
        // preamble
+       preambleModule = new UiWidget<Ui::PreambleUi>;
        connect(preambleModule->preambleTE, SIGNAL(textChanged()), this, SLOT(change_adaptor()));
 
 
-       bulletsModule = new BulletsModule;
        // bullets
+       bulletsModule = new BulletsModule;
        connect(bulletsModule, SIGNAL(changed()), this, SLOT(change_adaptor()));
 
 
-       floatModule = new FloatPlacement;
        // float
+       floatModule = new FloatPlacement;
        connect(floatModule, SIGNAL(changed()), this, SLOT(change_adaptor()));
 
-       docPS->addPanel(latexModule, _("Document Class"));
-       docPS->addPanel(textLayoutModule, _("Text Layout"));
-       docPS->addPanel(pageLayoutModule, _("Page Layout"));
-       docPS->addPanel(marginsModule, _("Page Margins"));
-       docPS->addPanel(langModule, _("Language"));
-       docPS->addPanel(numberingModule, _("Numbering & TOC"));
-       docPS->addPanel(biblioModule, _("Bibliography"));
-       docPS->addPanel(mathsModule, _("Math Options"));
-       docPS->addPanel(floatModule, _("Float Placement"));
-       docPS->addPanel(bulletsModule, _("Bullets"));
-       docPS->addPanel(branchesModule, _("Branches"));
-       docPS->addPanel(preambleModule, _("LaTeX Preamble"));
-       docPS->setCurrentPanel(_("Document Class"));
+       docPS->addPanel(latexModule, lyx::to_utf8(_("Document Class")));
+       docPS->addPanel(fontModule, lyx::to_utf8(_("Fonts")));
+       docPS->addPanel(textLayoutModule, lyx::to_utf8(_("Text Layout")));
+       docPS->addPanel(pageLayoutModule, lyx::to_utf8(_("Page Layout")));
+       docPS->addPanel(marginsModule, lyx::to_utf8(_("Page Margins")));
+       docPS->addPanel(langModule, lyx::to_utf8(_("Language")));
+       docPS->addPanel(numberingModule, lyx::to_utf8(_("Numbering & TOC")));
+       docPS->addPanel(biblioModule, lyx::to_utf8(_("Bibliography")));
+       docPS->addPanel(mathsModule, lyx::to_utf8(_("Math Options")));
+       docPS->addPanel(floatModule, lyx::to_utf8(_("Float Placement")));
+       docPS->addPanel(bulletsModule, lyx::to_utf8(_("Bullets")));
+       docPS->addPanel(branchesModule, lyx::to_utf8(_("Branches")));
+       docPS->addPanel(preambleModule, lyx::to_utf8(_("LaTeX Preamble")));
+       docPS->setCurrentPanel(lyx::to_utf8(_("Document Class")));
 }
 
 
@@ -377,7 +412,7 @@ QDocumentDialog::~QDocumentDialog()
 
 void QDocumentDialog::showPreamble()
 {
-       docPS->setCurrentPanel(_("LaTeX Preamble"));
+       docPS->setCurrentPanel(lyx::to_utf8(_("LaTeX Preamble")));
 }
 
 
@@ -426,12 +461,12 @@ void QDocumentDialog::enableSkip(bool skip)
        textLayoutModule->skipLE->setEnabled(skip);
        textLayoutModule->skipLengthCO->setEnabled(skip);
        if (skip)
-               setSkip(textLayoutModule->skipCO->currentItem());
+               setSkip(textLayoutModule->skipCO->currentIndex());
 }
 
 void QDocumentDialog::portraitChanged()
 {
-       setMargins(pageLayoutModule->papersizeCO->currentItem());
+       setMargins(pageLayoutModule->papersizeCO->currentIndex());
 }
 
 void QDocumentDialog::setMargins(bool custom)
@@ -489,34 +524,63 @@ void QDocumentDialog::setCustomMargins(bool custom)
 
 void QDocumentDialog::updateFontsize(string const & items, string const & sel)
 {
-       textLayoutModule->fontsizeCO->clear();
-       textLayoutModule->fontsizeCO->insertItem("default");
+       fontModule->fontsizeCO->clear();
+       fontModule->fontsizeCO->addItem(qt_("default"));
 
        for (int n = 0; !token(items,'|',n).empty(); ++n)
-               textLayoutModule->fontsizeCO->
-                       insertItem(toqstr(token(items,'|',n)));
+               fontModule->fontsizeCO->
+                       addItem(toqstr(token(items,'|',n)));
 
-       for (int n = 0; n<textLayoutModule->fontsizeCO->count(); ++n) {
-               if (fromqstr(textLayoutModule->fontsizeCO->text(n)) == sel) {
-                       textLayoutModule->fontsizeCO->setCurrentItem(n);
+       for (int n = 0; n < fontModule->fontsizeCO->count(); ++n) {
+               if (fromqstr(fontModule->fontsizeCO->itemText(n)) == sel) {
+                       fontModule->fontsizeCO->setCurrentIndex(n);
                        break;
                }
        }
 }
 
 
+void QDocumentDialog::romanChanged(int item)
+{
+       string const font = tex_fonts_roman[item];
+       
+       fontModule->fontScCB->setEnabled(
+               form_->controller().providesSC(font));
+       fontModule->fontOsfCB->setEnabled(
+               form_->controller().providesOSF(font));
+}
+
+
+void QDocumentDialog::sansChanged(int item)
+{
+       string const font = tex_fonts_sans[item];
+       
+       fontModule->scaleSansSB->setEnabled(
+               form_->controller().providesScale(font));
+}
+
+
+void QDocumentDialog::ttChanged(int item)
+{
+       string const font = tex_fonts_monospaced[item];
+       
+       fontModule->scaleTypewriterSB->setEnabled(
+               form_->controller().providesScale(font));
+}
+
+
 void QDocumentDialog::updatePagestyle(string const & items, string const & sel)
 {
        pageLayoutModule->pagestyleCO->clear();
-       pageLayoutModule->pagestyleCO->insertItem("default");
+       pageLayoutModule->pagestyleCO->addItem("default");
 
        for (int n=0; !token(items,'|',n).empty(); ++n)
                pageLayoutModule->pagestyleCO->
-                       insertItem(toqstr(token(items,'|',n)));
+                       addItem(toqstr(token(items,'|',n)));
 
        for (int n = 0; n<pageLayoutModule->pagestyleCO->count(); ++n) {
-               if (fromqstr(pageLayoutModule->pagestyleCO->text(n))==sel) {
-                       pageLayoutModule->pagestyleCO->setCurrentItem(n);
+               if (fromqstr(pageLayoutModule->pagestyleCO->itemText(n))==sel) {
+                       pageLayoutModule->pagestyleCO->setCurrentIndex(n);
                        break;
                }
        }
@@ -528,7 +592,7 @@ void QDocumentDialog::classChanged()
        ControlDocument & cntrl = form_->controller();
        BufferParams & params = cntrl.params();
 
-       lyx::textclass_type const tc = latexModule->classCO->currentItem();
+       lyx::textclass_type const tc = latexModule->classCO->currentIndex();
 
        if (form_->controller().loadTextclass(tc)) {
                params.textclass = tc;
@@ -536,7 +600,7 @@ void QDocumentDialog::classChanged()
                        params.useClassDefaults();
                form_->update_contents();
        } else {
-               latexModule->classCO->setCurrentItem(params.textclass);
+               latexModule->classCO->setCurrentIndex(params.textclass);
        }
 }
 
@@ -581,7 +645,7 @@ void QDocumentDialog::apply(BufferParams & params)
 
        if (biblioModule->citeNatbibRB->isChecked()) {
                bool const use_numerical_citations =
-                       biblioModule->citeStyleCO->currentItem();
+                       biblioModule->citeStyleCO->currentIndex();
                if (use_numerical_citations)
                        params.cite_engine = biblio::ENGINE_NATBIB_NUMERICAL;
                else
@@ -597,7 +661,7 @@ void QDocumentDialog::apply(BufferParams & params)
        if (langModule->defaultencodingCB->isChecked()) {
                params.inputenc = "auto";
        } else {
-               int i = langModule->encodingCO->currentItem();
+               int i = langModule->encodingCO->currentIndex();
                if (i == 0) {
                        params.inputenc = "default";
                } else {
@@ -606,7 +670,7 @@ void QDocumentDialog::apply(BufferParams & params)
        }
 
        InsetQuotes::quote_language lga = InsetQuotes::EnglishQ;
-       switch (langModule->quoteStyleCO->currentItem()) {
+       switch (langModule->quoteStyleCO->currentIndex()) {
        case 0:
                lga = InsetQuotes::EnglishQ;
                break;
@@ -628,7 +692,7 @@ void QDocumentDialog::apply(BufferParams & params)
        }
        params.quotes_language = lga;
 
-       int const pos = langModule->languageCO->currentItem();
+       int const pos = langModule->languageCO->currentIndex();
        params.language = languages.getLanguage(lang_[pos]);
 
        // numbering
@@ -656,20 +720,14 @@ void QDocumentDialog::apply(BufferParams & params)
                        params.use_amsmath = BufferParams::AMS_OFF;
        }
 
-       // layout
+       // text layout
        params.textclass =
-               latexModule->classCO->currentItem();
-
-       params.fonts =
-               fromqstr(textLayoutModule->fontsCO->currentText());
-
-       params.fontsize =
-               fromqstr(textLayoutModule->fontsizeCO->currentText());
+               latexModule->classCO->currentIndex();
 
        params.pagestyle =
                fromqstr(pageLayoutModule->pagestyleCO->currentText());
 
-       switch (textLayoutModule->lspacingCO->currentItem()) {
+       switch (textLayoutModule->lspacingCO->currentIndex()) {
        case 0:
                params.spacing().set(Spacing::Single);
                break;
@@ -695,7 +753,7 @@ void QDocumentDialog::apply(BufferParams & params)
        else
                params.paragraph_separation = BufferParams::PARSEP_SKIP;
 
-       switch (textLayoutModule->skipCO->currentItem()) {
+       switch (textLayoutModule->skipCO->currentIndex()) {
        case 0:
                params.setDefSkip(VSpace(VSpace::SMALLSKIP));
                break;
@@ -726,12 +784,39 @@ void QDocumentDialog::apply(BufferParams & params)
 
        params.float_placement = floatModule->get();
 
+       // fonts
+       params.fontsRoman =
+               tex_fonts_roman[fontModule->fontsRomanCO->currentIndex()];
+
+       params.fontsSans =
+               tex_fonts_sans[fontModule->fontsSansCO->currentIndex()];
+
+       params.fontsTypewriter =
+               tex_fonts_monospaced[fontModule->fontsTypewriterCO->currentIndex()];
+
+       params.fontsSansScale = fontModule->scaleSansSB->value();
+
+       params.fontsTypewriterScale = fontModule->scaleTypewriterSB->value();
+
+       params.fontsSC = fontModule->fontScCB->isChecked();
+
+       params.fontsOSF = fontModule->fontOsfCB->isChecked();
+
+       params.fontsDefaultFamily = ControlDocument::fontfamilies[
+               fontModule->fontsDefaultCO->currentIndex()];
+
+       if (fontModule->fontsizeCO->currentIndex() == 0)
+               params.fontsize = "default";
+       else
+               params.fontsize =
+                       fromqstr(fontModule->fontsizeCO->currentText());
+
        // paper
        params.papersize = PAPER_SIZE(
-               pageLayoutModule->papersizeCO->currentItem());
+               pageLayoutModule->papersizeCO->currentIndex());
 
        // custom, A3, B3 and B4 paper sizes need geometry
-       int psize = pageLayoutModule->papersizeCO->currentItem();
+       int psize = pageLayoutModule->papersizeCO->currentIndex();
        bool geom_papersize = (psize == 1 || psize == 5 || psize == 8 || psize == 9);
 
        params.paperwidth = widgetsToLength(pageLayoutModule->paperwidthLE,
@@ -831,7 +916,7 @@ void QDocumentDialog::update(BufferParams const & params)
                params.cite_engine == biblio::ENGINE_NATBIB_NUMERICAL ||
                params.cite_engine == biblio::ENGINE_NATBIB_AUTHORYEAR);
 
-       biblioModule->citeStyleCO->setCurrentItem(
+       biblioModule->citeStyleCO->setCurrentIndex(
                params.cite_engine == biblio::ENGINE_NATBIB_NUMERICAL);
 
        biblioModule->citeJurabibRB->setChecked(
@@ -843,9 +928,9 @@ void QDocumentDialog::update(BufferParams const & params)
        // language & quotes
        int const pos = int(findPos(lang_,
                                    params.language->lang()));
-       langModule->languageCO->setCurrentItem(pos);
+       langModule->languageCO->setCurrentIndex(pos);
 
-       langModule->quoteStyleCO->setCurrentItem(
+       langModule->quoteStyleCO->setCurrentIndex(
                params.quotes_language);
 
        langModule->defaultencodingCB->setChecked(true);
@@ -853,12 +938,12 @@ void QDocumentDialog::update(BufferParams const & params)
        if (params.inputenc != "auto") {
                langModule->defaultencodingCB->setChecked(false);
                if (params.inputenc == "default") {
-                       langModule->encodingCO->setCurrentItem(0);
+                       langModule->encodingCO->setCurrentIndex(0);
                } else {
                        int i = 0;
                        while (encodings[i]) {
                                if (encodings[i] == params.inputenc)
-                                       langModule->encodingCO->setCurrentItem(i);
+                                       langModule->encodingCO->setCurrentIndex(i);
                                ++i;
                        }
                }
@@ -869,11 +954,11 @@ void QDocumentDialog::update(BufferParams const & params)
        int const max_toclevel = form_->controller().textClass().max_toclevel();
        if (form_->controller().textClass().hasTocLevels()) {
                numberingModule->setEnabled(true);
-               numberingModule->depthSL->setMinValue(min_toclevel - 1);
-               numberingModule->depthSL->setMaxValue(max_toclevel);
+               numberingModule->depthSL->setMinimum(min_toclevel - 1);
+               numberingModule->depthSL->setMaximum(max_toclevel);
                numberingModule->depthSL->setValue(params.secnumdepth);
-               numberingModule->tocSL->setMinValue(min_toclevel - 1);
-               numberingModule->tocSL->setMaxValue(max_toclevel);
+               numberingModule->tocSL->setMaximum(min_toclevel - 1);
+               numberingModule->tocSL->setMaximum(max_toclevel);
                numberingModule->tocSL->setValue(params.tocdepth);
                updateNumbering();
        } else {
@@ -882,10 +967,11 @@ void QDocumentDialog::update(BufferParams const & params)
        }
 
        // bullets
-       bulletsModule->setBullet(0,params.user_defined_bullet(0));
-       bulletsModule->setBullet(1,params.user_defined_bullet(1));
-       bulletsModule->setBullet(2,params.user_defined_bullet(2));
-       bulletsModule->setBullet(3,params.user_defined_bullet(3));
+       bulletsModule->setBullet(0, params.user_defined_bullet(0));
+       bulletsModule->setBullet(1, params.user_defined_bullet(1));
+       bulletsModule->setBullet(2, params.user_defined_bullet(2));
+       bulletsModule->setBullet(3, params.user_defined_bullet(3));
+       bulletsModule->init();
 
        // packages
        QString text = toqstr(params.graphicsDriver);
@@ -893,7 +979,7 @@ void QDocumentDialog::update(BufferParams const & params)
        for (int n = 0; n < nitem ; ++n) {
                QString enc = tex_graphics[n];
                if (enc == text) {
-                       latexModule->psdriverCO->setCurrentItem(n);
+                       latexModule->psdriverCO->setCurrentIndex(n);
                }
        }
 
@@ -910,23 +996,13 @@ void QDocumentDialog::update(BufferParams const & params)
                case Spacing::Default: case Spacing::Single: nitem = 0; break;
        }
 
-       // layout
-       latexModule->classCO->setCurrentItem(params.textclass);
-
-       updateFontsize(form_->controller().textClass().opt_fontsize(),
-                               params.fontsize);
+       // text layout
+       latexModule->classCO->setCurrentIndex(params.textclass);
 
        updatePagestyle(form_->controller().textClass().opt_pagestyle(),
                                 params.pagestyle);
 
-       for (int n = 0; tex_fonts[n][0]; ++n) {
-               if (tex_fonts[n] == params.fonts) {
-                       textLayoutModule->fontsCO->setCurrentItem(n);
-                       break;
-               }
-       }
-
-       textLayoutModule->lspacingCO->setCurrentItem(nitem);
+       textLayoutModule->lspacingCO->setCurrentIndex(nitem);
        if (params.spacing().getSpace() == Spacing::Other) {
                textLayoutModule->lspacingLE->setText(
                        toqstr(params.spacing().getValueAsString()));
@@ -964,7 +1040,7 @@ void QDocumentDialog::update(BufferParams const & params)
                skip = 0;
                break;
        }
-       textLayoutModule->skipCO->setCurrentItem(skip);
+       textLayoutModule->skipCO->setCurrentIndex(skip);
        setSkip(skip);
 
        textLayoutModule->twoColumnCB->setChecked(
@@ -979,9 +1055,42 @@ void QDocumentDialog::update(BufferParams const & params)
 
        floatModule->set(params.float_placement);
 
+       //fonts
+       updateFontsize(form_->controller().textClass().opt_fontsize(),
+                       params.fontsize);
+
+       int n = findToken(tex_fonts_roman, params.fontsRoman);
+       if (n >= 0)
+               fontModule->fontsRomanCO->setCurrentIndex(n);
+
+       n = findToken(tex_fonts_sans, params.fontsSans);
+       if (n >= 0)
+               fontModule->fontsSansCO->setCurrentIndex(n);
+
+       n = findToken(tex_fonts_monospaced, params.fontsTypewriter);
+       if (n >= 0)
+               fontModule->fontsTypewriterCO->setCurrentIndex(n);
+
+       fontModule->fontScCB->setChecked(params.fontsSC);
+       fontModule->fontOsfCB->setChecked(params.fontsOSF);
+       fontModule->fontScCB->setEnabled(
+               form_->controller().providesSC(params.fontsRoman));
+       fontModule->fontOsfCB->setEnabled(
+               form_->controller().providesOSF(params.fontsRoman));
+       fontModule->scaleSansSB->setValue(params.fontsSansScale);
+       fontModule->scaleTypewriterSB->setValue(
+               params.fontsTypewriterScale);
+       fontModule->scaleSansSB->setEnabled(
+               form_->controller().providesScale(params.fontsSans));
+       fontModule->scaleTypewriterSB->setEnabled(
+               form_->controller().providesScale(params.fontsTypewriter));
+       n = findToken(ControlDocument::fontfamilies, params.fontsDefaultFamily);
+       if (n >= 0)
+               fontModule->fontsDefaultCO->setCurrentIndex(n);
+
        // paper
        int const psize = params.papersize;
-       pageLayoutModule->papersizeCO->setCurrentItem(psize);
+       pageLayoutModule->papersizeCO->setCurrentIndex(psize);
        setCustomPapersize(psize);
 
        bool const landscape =
@@ -1033,3 +1142,5 @@ void QDocumentDialog::update(BufferParams const & params)
 
 } // namespace frontend
 } // namespace lyx
+
+#include "QDocumentDialog_moc.cpp"