]> 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 ae42425e468dc94452a5ccc9c7358946856a7c5c..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;
@@ -67,7 +67,7 @@ char const * encodings[] = { "LaTeX default", "latin1", "latin2",
 }
 
 QDocumentDialog::QDocumentDialog(QDocument * form)
-       : form_(form), 
+       : form_(form),
        lang_(getSecond(getLanguageData(false)))
 {
        setupUi(this);
@@ -80,10 +80,12 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
                form, SLOT(slotClose()));
        connect(restorePB, SIGNAL(clicked()),
                form, SLOT(slotRestore()));
-       
 
-    connect( savePB, SIGNAL( clicked() ), this, SLOT( saveDefaultClicked() ) );
-    connect( defaultPB, SIGNAL( clicked() ), this, SLOT( useDefaultsClicked() ) );
+
+       connect(savePB, SIGNAL( clicked() ), 
+               this, SLOT( saveDefaultClicked() ) );
+       connect(defaultPB, SIGNAL( clicked() ), 
+               this, SLOT( useDefaultsClicked() ) );
 
        // Manage the restore, ok, apply, restore and cancel/close buttons
        form_->bcview().setOK(okPB);
@@ -94,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()));
@@ -112,37 +112,73 @@ 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);
-       
 
 
-       
+
+
+       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)));
@@ -157,29 +193,29 @@ 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,
                pageLayoutModule->paperwidthL);
-       
+
        // 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();
@@ -208,7 +244,7 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        connect(marginsModule->headsepLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
        connect(marginsModule->headsepUnit, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
        connect(marginsModule->footskipLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
-       connect(marginsModule->footskipUnit, SIGNAL(activated(int)), this, SLOT(change_adaptor()));     
+       connect(marginsModule->footskipUnit, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
        marginsModule->topLE->setValidator(unsignedLengthValidator(
                marginsModule->topLE));
        marginsModule->bottomLE->setValidator(unsignedLengthValidator(
@@ -240,7 +276,7 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
                marginsModule->footskipL);
 
 
-       
+
 
 
        langModule = new UiWidget<Ui::LanguageUi>;
@@ -256,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<<"));
 
 
 
@@ -280,13 +316,15 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
        connect(numberingModule->tocSL, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
        connect(numberingModule->depthSL, SIGNAL(valueChanged(int)), this, SLOT(updateNumbering()));
        connect(numberingModule->tocSL, SIGNAL(valueChanged(int)), this, SLOT(updateNumbering()));
-       numberingModule->tocLV->setSorting(-1);
-
+       numberingModule->tocTW->setColumnCount(3);
+       numberingModule->tocTW->headerItem()->setText(0, qt_("Example"));
+       numberingModule->tocTW->headerItem()->setText(1, qt_("Numbered"));
+       numberingModule->tocTW->headerItem()->setText(2, qt_("Appears in TOC"));
 
 
        biblioModule = new UiWidget<Ui::BiblioUi>;
-    connect( biblioModule->citeNatbibRB, SIGNAL( toggled(bool) ), biblioModule->citationStyleL, SLOT( setEnabled(bool) ) );
-    connect( biblioModule->citeNatbibRB, SIGNAL( toggled(bool) ), biblioModule->citeStyleCO, SLOT( setEnabled(bool) ) );
+       connect( biblioModule->citeNatbibRB, SIGNAL( toggled(bool) ), biblioModule->citationStyleL, SLOT( setEnabled(bool) ) );
+       connect( biblioModule->citeNatbibRB, SIGNAL( toggled(bool) ), biblioModule->citeStyleCO, SLOT( setEnabled(bool) ) );
        // biblio
        connect(biblioModule->citeDefaultRB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
        connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
@@ -294,19 +332,19 @@ 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);
+
+
 
-       
-       
        mathsModule = new UiWidget<Ui::MathsUi>;
     connect( mathsModule->amsautoCB, SIGNAL( toggled(bool) ), mathsModule->amsCB, SLOT( setDisabled(bool) ) );
        // maths
        connect(mathsModule->amsCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
        connect(mathsModule->amsautoCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
 
-       
+
        latexModule = new UiWidget<Ui::LaTeXUi>;
        // latex class
        connect(latexModule->classCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
@@ -316,54 +354,55 @@ 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));
                }
        }
-       
 
-       
+
+
        branchesModule = new QBranches;
        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(this);
+
        // 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")));
+}
 
 
 QDocumentDialog::~QDocumentDialog()
@@ -373,7 +412,7 @@ QDocumentDialog::~QDocumentDialog()
 
 void QDocumentDialog::showPreamble()
 {
-       docPS->setCurrentPanel(_("LaTeX Preamble"));
+       docPS->setCurrentPanel(lyx::to_utf8(_("LaTeX Preamble")));
 }
 
 
@@ -422,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)
@@ -485,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;
                }
        }
@@ -524,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;
@@ -532,7 +600,7 @@ void QDocumentDialog::classChanged()
                        params.useClassDefaults();
                form_->update_contents();
        } else {
-               latexModule->classCO->setCurrentItem(params.textclass);
+               latexModule->classCO->setCurrentIndex(params.textclass);
        }
 }
 
@@ -542,29 +610,28 @@ void QDocumentDialog::updateNumbering()
        LyXTextClass const & tclass =
                form_->controller().params().getLyXTextClass();
 
-       //numberingModule->tocLV->setUpdatesEnabled(false);
+       numberingModule->tocTW->setUpdatesEnabled(false);
+       numberingModule->tocTW->clear();
 
-       // Update the example QListView
        int const depth = numberingModule->depthSL->value();
        int const toc = numberingModule->tocSL->value();
        QString const no = qt_("No");
        QString const yes = qt_("Yes");
        LyXTextClass::const_iterator end = tclass.end();
        LyXTextClass::const_iterator cit = tclass.begin();
-       numberingModule->tocLV->clear();
-       Q3ListViewItem * item = 0;
+       QTreeWidgetItem * item = 0;
        for ( ; cit != end ; ++cit) {
                int const toclevel = (*cit)->toclevel;
                if (toclevel != LyXLayout::NOT_IN_TOC) {
-                       item = new Q3ListViewItem(numberingModule->tocLV,
-                                                item, qt_((*cit)->name()));
+                       item = new QTreeWidgetItem(numberingModule->tocTW);
+                       item->setText(0, qt_((*cit)->name()));
                        item->setText(1, (toclevel <= depth) ? yes : no);
                        item->setText(2, (toclevel <= toc) ? yes : no);
                }
        }
 
-       //numberingModule->tocLV->setUpdatesEnabled(true);
-       //numberingModule->tocLV->update();
+       numberingModule->tocTW->setUpdatesEnabled(true);
+       numberingModule->tocTW->update();
 }
 
 void QDocumentDialog::apply(BufferParams & params)
@@ -578,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
@@ -594,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 {
@@ -603,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;
@@ -625,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
@@ -653,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;
@@ -692,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;
@@ -723,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,
@@ -828,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(
@@ -840,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);
@@ -850,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;
                        }
                }
@@ -864,25 +952,26 @@ void QDocumentDialog::update(BufferParams const & params)
        // numbering
        int const min_toclevel = form_->controller().textClass().min_toclevel();
        int const max_toclevel = form_->controller().textClass().max_toclevel();
-       if (form_->controller().textClass().hasTocLevels())
+       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 {
                numberingModule->setEnabled(false);
-               numberingModule->tocLV->clear();
+               numberingModule->tocTW->clear();
        }
 
        // 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);
@@ -890,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);
                }
        }
 
@@ -907,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()));
@@ -961,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(
@@ -976,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 =
@@ -1030,3 +1142,5 @@ void QDocumentDialog::update(BufferParams const & params)
 
 } // namespace frontend
 } // namespace lyx
+
+#include "QDocumentDialog_moc.cpp"