X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FQPrefsDialog.C;h=0c9b0485bedd2c0a32411419e61852604443d350;hb=a0d93c0c49e8a675b47efa8f390fe5b5b5d8a425;hp=6b7bfd01c1dd838504f292a843d8f7a0c418ebad;hpb=7b81bf1108603ce656ae9dd7c664ed0ca53ae246;p=lyx.git diff --git a/src/frontends/qt4/QPrefsDialog.C b/src/frontends/qt4/QPrefsDialog.C index 6b7bfd01c1..0c9b0485be 100644 --- a/src/frontends/qt4/QPrefsDialog.C +++ b/src/frontends/qt4/QPrefsDialog.C @@ -13,12 +13,12 @@ #include "debug.h" #include "qt_helpers.h" -#include "lcolorcache.h" +#include "ColorCache.h" #include "Qt2BC.h" #include "qt_helpers.h" #include "debug.h" -#include "lastfiles.h" +#include "session.h" #include "LColor.h" #include "lyxfont.h" @@ -36,32 +36,11 @@ #include "QPrefs.h" #include "panelstack.h" -#include "qcoloritem.h" #include "qfontexample.h" -#include "ui/QPrefAsciiUi.h" -#include "ui/QPrefDateUi.h" -#include "ui/QPrefKeyboardUi.h" -#include "ui/QPrefLatexUi.h" -#include "ui/QPrefScreenFontsUi.h" -#include "ui/QPrefColorsUi.h" -#if defined(__CYGWIN__) || defined(__CYGWIN32__) -#include "ui/QPrefCygwinPathUi.h" -#endif -#include "ui/QPrefDisplayUi.h" -#include "ui/QPrefPathsUi.h" -#include "ui/QPrefSpellcheckerUi.h" -#include "ui/QPrefConvertersUi.h" -#include "ui/QPrefCopiersUi.h" -#include "ui/QPrefFileformatsUi.h" -#include "ui/QPrefLanguageUi.h" -#include "ui/QPrefPrinterUi.h" -#include "ui/QPrefUi.h" -#include "ui/QPrefIdentityUi.h" - #include "gettext.h" #include "LColor.h" -#include "lcolorcache.h" +#include "ColorCache.h" #include "controllers/ControlPrefs.h" @@ -90,1506 +69,1819 @@ using std::ostringstream; using std::pair; using std::vector; + namespace lyx { namespace frontend { -QPrefsDialog::QPrefsDialog(QPrefs * form) - : form_(form) -{ - setupUi(this); - - connect(savePB, SIGNAL(clicked()), - form, SLOT(slotOK())); - connect(applyPB, SIGNAL(clicked()), - form, SLOT(slotApply())); - connect(closePB, SIGNAL(clicked()), - form, SLOT(slotClose())); - connect(restorePB, SIGNAL(clicked()), - form, SLOT(slotRestore())); - +string const LookAndFeel = "Look and feel"; +string const LanguageSettings = "Language settings"; +string const Outputs = "Outputs"; - asciiModule = new UiWidget(this); - connect(asciiModule->asciiLinelengthSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor())); - connect(asciiModule->asciiRoffED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); +// FIXME: move to helper_funcs.h +namespace { - - dateModule = new UiWidget(this); - connect(dateModule->DateED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); +template +typename std::vector::size_type +findPos(std::vector const & vec, A const & val) +{ + typedef typename std::vector::const_iterator Cit; - + Cit it = std::find(vec.begin(), vec.end(), val); + if (it == vec.end()) + return 0; + return distance(vec.begin(), it); +} - keyboardModule = new UiWidget(this); - connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ), - keyboardModule->firstKeymapLA, SLOT( setEnabled(bool) ) ); - connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ), - keyboardModule->secondKeymapLA, SLOT( setEnabled(bool) ) ); - connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ), - keyboardModule->firstKeymapED, SLOT( setEnabled(bool) ) ); - connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ), - keyboardModule->secondKeymapED, SLOT( setEnabled(bool) ) ); - connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ), - keyboardModule->firstKeymapPB, SLOT( setEnabled(bool) ) ); - connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ), - keyboardModule->secondKeymapPB, SLOT( setEnabled(bool) ) ); - connect(keyboardModule->firstKeymapPB, SIGNAL(clicked()), this, SLOT(select_keymap1())); - connect(keyboardModule->secondKeymapPB, SIGNAL(clicked()), this, SLOT(select_keymap2())); - connect(keyboardModule->keymapCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(keyboardModule->firstKeymapED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(keyboardModule->secondKeymapED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); +void setComboxFont(QComboBox * cb, string const & family, string const & foundry) +{ + string const name = makeFontName(family, foundry); + for (int i = 0; i < cb->count(); ++i) { + if (fromqstr(cb->text(i)) == name) { + cb->setCurrentItem(i); + return; + } + } + // Try matching without foundry name + // We count in reverse in order to prefer the Xft foundry + for (int i = cb->count() - 1; i >= 0; --i) { + pair tmp = parseFontName(fromqstr(cb->text(i))); + if (compare_no_case(tmp.first, family) == 0) { + cb->setCurrentItem(i); + return; + } + } - latexModule = new UiWidget(this); - connect(latexModule->latexEncodingED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(latexModule->latexChecktexED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(latexModule->latexBibtexED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(latexModule->latexIndexED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(latexModule->latexAutoresetCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(latexModule->latexDviPaperED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(latexModule->latexPaperSizeCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); - + // family alone can contain e.g. "Helvetica [Adobe]" + pair tmpfam = parseFontName(family); + // We count in reverse in order to prefer the Xft foundry + for (int i = cb->count() - 1; i >= 0; --i) { + pair tmp = parseFontName(fromqstr(cb->text(i))); + if (compare_no_case(tmp.first, tmpfam.first) == 0) { + cb->setCurrentItem(i); + return; + } + } + // Bleh, default fonts, and the names couldn't be found. Hack + // for bug 1063. Qt makes baby Jesus cry. - screenfontsModule = new UiWidget(this); - connect(screenfontsModule->screenRomanCO, SIGNAL(activated(const QString&)), this, SLOT(select_roman(const QString&))); - connect(screenfontsModule->screenSansCO, SIGNAL(activated(const QString&)), this, SLOT(select_sans(const QString&))); - connect(screenfontsModule->screenTypewriterCO, SIGNAL(activated(const QString&)), this, SLOT(select_typewriter(const QString&))); + QFont font; - QFontDatabase fontdb; - QStringList families(fontdb.families()); - for (QStringList::Iterator it = families.begin(); it != families.end(); ++it) { - screenfontsModule->screenRomanCO->insertItem(*it); - screenfontsModule->screenSansCO->insertItem(*it); - screenfontsModule->screenTypewriterCO->insertItem(*it); + if (family == lyx_gui::roman_font_name()) { + font.setStyleHint(QFont::Serif); + font.setFamily(family.c_str()); + } else if (family == lyx_gui::sans_font_name()) { + font.setStyleHint(QFont::SansSerif); + font.setFamily(family.c_str()); + } else if (family == lyx_gui::typewriter_font_name()) { + font.setStyleHint(QFont::TypeWriter); + font.setFamily(family.c_str()); + } else { + lyxerr << "FAILED to find the default font: '" + << foundry << "', '" << family << '\''<< endl; + return; } - connect(screenfontsModule->screenRomanCO, SIGNAL(activated(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenSansCO, SIGNAL(activated(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenTypewriterCO, SIGNAL(activated(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenZoomSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenDpiSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenTinyED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenSmallestED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenSmallerED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenSmallED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenNormalED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenLargeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenLargerED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenLargestED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenHugeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(screenfontsModule->screenHugerED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - - screenfontsModule->screenTinyED->setValidator(new QDoubleValidator( - screenfontsModule->screenTinyED)); - screenfontsModule->screenSmallestED->setValidator(new QDoubleValidator( - screenfontsModule->screenSmallestED)); - screenfontsModule->screenSmallerED->setValidator(new QDoubleValidator( - screenfontsModule->screenSmallerED)); - screenfontsModule->screenSmallED->setValidator(new QDoubleValidator( - screenfontsModule->screenSmallED)); - screenfontsModule->screenNormalED->setValidator(new QDoubleValidator( - screenfontsModule->screenNormalED)); - screenfontsModule->screenLargeED->setValidator(new QDoubleValidator( - screenfontsModule->screenLargeED)); - screenfontsModule->screenLargerED->setValidator(new QDoubleValidator( - screenfontsModule->screenLargerED)); - screenfontsModule->screenLargestED->setValidator(new QDoubleValidator( - screenfontsModule->screenLargestED)); - screenfontsModule->screenHugeED->setValidator(new QDoubleValidator( - screenfontsModule->screenHugeED)); - screenfontsModule->screenHugerED->setValidator(new QDoubleValidator( - screenfontsModule->screenHugerED)); - - - - - colorsModule = new UiWidget(this); - // FIXME: put in controller - for (int i = 0; i < LColor::ignore; ++i) { - LColor::color lc = static_cast(i); - if (lc == LColor::none - || lc == LColor::black - || lc == LColor::white - || lc == LColor::red - || lc == LColor::green - || lc == LColor::blue - || lc == LColor::cyan - || lc == LColor::magenta - || lc == LColor::yellow - || lc == LColor::inherit - || lc == LColor::ignore) continue; - colors_.push_back(lc); - string const guiname(lcolor.getGUIName(lc)); - QColorItem * ci(new QColorItem(lcolorcache.get(lc), - toqstr(guiname))); - colorsModule->lyxObjectsLB->insertItem(ci); + QFontInfo info(font); + pair tmp = parseFontName(fromqstr(info.family())); + string const & default_font_name = tmp.first; + lyxerr << "Apparent font is " << default_font_name << endl; + + for (int i = 0; i < cb->count(); ++i) { + lyxerr << "Looking at " << fromqstr(cb->text(i)) << endl; + if (compare_no_case(fromqstr(cb->text(i)), + default_font_name) == 0) { + cb->setCurrentItem(i); + return; + } } - connect(colorsModule->colorChangePB, SIGNAL(clicked()), this, SLOT(change_color())); - connect(colorsModule->lyxObjectsLB, SIGNAL(selected(int)), this, SLOT(change_color())); + lyxerr << "FAILED to find the font: '" + << foundry << "', '" << family << '\'' <(this); - connect(cygwinpathModule->pathCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); -#endif +string const internal_path(QString const & input) +{ + return lyx::support::os::internal_path(fromqstr(input)); +} +} // end namespace anon - displayModule = new UiWidget(this); - connect(displayModule->instantPreviewCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); - connect(displayModule->displayGraphicsCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); - +PrefAscii::PrefAscii(QWidget * parent) +: PrefModule(_(Outputs), _("Plain text"), 0, parent) +{ + setupUi(this); + connect(asciiLinelengthSB, SIGNAL(valueChanged(int)), + this, SIGNAL(changed())); + connect(asciiRoffED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); +} - pathsModule = new UiWidget(this); - connect(pathsModule->templateDirPB, SIGNAL(clicked()), this, SLOT(select_templatedir())); - connect(pathsModule->tempDirPB, SIGNAL(clicked()), this, SLOT(select_tempdir())); - connect(pathsModule->backupDirPB, SIGNAL(clicked()), this, SLOT(select_backupdir())); - connect(pathsModule->workingDirPB, SIGNAL(clicked()), this, SLOT(select_workingdir())); - connect(pathsModule->lyxserverDirPB, SIGNAL(clicked()), this, SLOT(select_lyxpipe())); - connect(pathsModule->workingDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(pathsModule->templateDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(pathsModule->backupDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(pathsModule->tempDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(pathsModule->lyxserverDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(pathsModule->pathPrefixED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - +void PrefAscii::apply(LyXRC & rc) const +{ + rc.ascii_linelen = asciiLinelengthSB->value(); + rc.ascii_roff_command = fromqstr(asciiRoffED->text()); +} - spellcheckerModule = new UiWidget(this); - connect(spellcheckerModule->persDictionaryPB, SIGNAL(clicked()), this, SLOT(select_dict())); -#if defined (USE_ISPELL) - connect(spellcheckerModule->spellCommandCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); -#else - spellcheckerModule->spellCommandCO->setEnabled(false); -#endif - connect(spellcheckerModule->altLanguageED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(spellcheckerModule->escapeCharactersED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(spellcheckerModule->persDictionaryED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(spellcheckerModule->compoundWordCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(spellcheckerModule->inputEncodingCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - spellcheckerModule->spellCommandCO->insertItem(qt_("ispell")); - spellcheckerModule->spellCommandCO->insertItem(qt_("aspell")); - spellcheckerModule->spellCommandCO->insertItem(qt_("hspell")); -#ifdef USE_PSPELL - spellcheckerModule->spellCommandCO->insertItem(qt_("pspell (library)")); -#else -#ifdef USE_ASPELL - spellcheckerModule->spellCommandCO->insertItem(qt_("aspell (library)")); -#endif -#endif - - - convertersModule = new UiWidget(this); - connect(convertersModule->converterNewPB, SIGNAL(clicked()), this, SLOT(new_converter())); - connect(convertersModule->converterRemovePB, SIGNAL(clicked()), this, SLOT(remove_converter())); - connect(convertersModule->converterModifyPB, SIGNAL(clicked()), this, SLOT(modify_converter())); - connect(convertersModule->convertersLB, SIGNAL(highlighted(int)), this, SLOT(switch_converter(int))); - connect(convertersModule->converterFromCO, SIGNAL(activated(const QString&)), this, SLOT(converter_changed())); - connect(convertersModule->converterToCO, SIGNAL(activated(const QString&)), this, SLOT(converter_changed())); - connect(convertersModule->converterED, SIGNAL(textChanged(const QString&)), this, SLOT(converter_changed())); - connect(convertersModule->converterFlagED, SIGNAL(textChanged(const QString&)), this, SLOT(converter_changed())); - connect(convertersModule->converterNewPB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(convertersModule->converterRemovePB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(convertersModule->converterModifyPB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - - - - copiersModule = new UiWidget(this); - connect(copiersModule->copierNewPB, SIGNAL(clicked()), this, SLOT(new_copier())); - connect(copiersModule->copierRemovePB, SIGNAL(clicked()), this, SLOT(remove_copier())); - connect(copiersModule->copierModifyPB, SIGNAL(clicked()), this, SLOT(modify_copier())); - connect(copiersModule->AllCopiersLB, SIGNAL(highlighted(int)), this, SLOT(switch_copierLB(int))); - connect(copiersModule->copierFormatCO, SIGNAL(activated(int)), this, SLOT(switch_copierCO(int))); - connect(copiersModule->copierNewPB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(copiersModule->copierRemovePB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(copiersModule->copierModifyPB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(copiersModule->copierFormatCO, SIGNAL(activated(const QString&)), this, SLOT(copiers_changed())); - connect(copiersModule->copierED, SIGNAL(textChanged(const QString&)), this, SLOT(copiers_changed())); - - - - - fileformatsModule = new UiWidget(this); - connect(fileformatsModule->formatNewPB, SIGNAL(clicked()), this, SLOT(new_format())); - connect(fileformatsModule->formatRemovePB, SIGNAL(clicked()), this, SLOT(remove_format())); - connect(fileformatsModule->formatModifyPB, SIGNAL(clicked()), this, SLOT(modify_format())); - connect(fileformatsModule->formatsLB, SIGNAL(highlighted(int)), this, SLOT(switch_format(int))); - connect(fileformatsModule->formatED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); - connect(fileformatsModule->guiNameED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); - connect(fileformatsModule->shortcutED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); - connect(fileformatsModule->extensionED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); - connect(fileformatsModule->viewerED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); - connect(fileformatsModule->editorED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); - connect(fileformatsModule->formatNewPB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(fileformatsModule->formatRemovePB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(fileformatsModule->formatModifyPB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - - - - - languageModule = new UiWidget(this); - connect(languageModule->rtlCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(languageModule->markForeignCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(languageModule->autoBeginCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(languageModule->autoEndCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(languageModule->useBabelCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(languageModule->globalCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(languageModule->languagePackageED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(languageModule->startCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(languageModule->endCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(languageModule->defaultLanguageCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); - - languageModule->defaultLanguageCO->clear(); +void PrefAscii::update(LyXRC const & rc) +{ + asciiLinelengthSB->setValue(rc.ascii_linelen); + asciiRoffED->setText(toqstr(rc.ascii_roff_command)); +} - // store the lang identifiers for later - using lyx::frontend::LanguagePair; - std::vector const langs = - lyx::frontend::getLanguageData(false); - lang_ = getSecond(langs); - std::vector::const_iterator lit = langs.begin(); - std::vector::const_iterator lend = langs.end(); - for (; lit != lend; ++lit) { - languageModule->defaultLanguageCO->insertItem(toqstr(lit->first)); - } +PrefDate::PrefDate(QWidget * parent) +: PrefModule(_(Outputs), _("Date format"), 0, parent) +{ + setupUi(this); + connect(DateED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); +} +void PrefDate::apply(LyXRC & rc) const +{ + rc.date_insert_format = fromqstr(DateED->text()); +} - - - printerModule = new UiWidget(this); - connect(printerModule->printerAdaptCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(printerModule->printerCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerNameED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerPageRangeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerCopiesED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerReverseED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerToPrinterED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerExtensionED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerSpoolCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerPaperTypeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerEvenED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerOddED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerCollatedED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerLandscapeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerToFileED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerExtraED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerSpoolPrefixED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(printerModule->printerPaperSizeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - - - - - uiModule = new UiWidget(this); - connect( uiModule->autoSaveCB, SIGNAL( toggled(bool) ), uiModule->autoSaveLA, SLOT( setEnabled(bool) ) ); - connect( uiModule->autoSaveCB, SIGNAL( toggled(bool) ), uiModule->autoSaveSB, SLOT( setEnabled(bool) ) ); - connect( uiModule->autoSaveCB, SIGNAL( toggled(bool) ), uiModule->TextLabel1, SLOT( setEnabled(bool) ) ); - connect(uiModule->uiFilePB, SIGNAL(clicked()), this, SLOT(select_ui())); - connect(uiModule->bindFilePB, SIGNAL(clicked()), this, SLOT(select_bind())); - connect(uiModule->uiFileED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(uiModule->bindFileED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(uiModule->cursorFollowsCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(uiModule->autoSaveSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor())); - connect(uiModule->autoSaveCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(uiModule->lastfilesSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor())); - uiModule->lastfilesSB->setMaxValue(maxlastfiles); - - - - - identityModule = new UiWidget(this); - connect(identityModule->nameED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(identityModule->emailED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - - - - - string const laf = _("Look and feel"); - prefsPS->addCategory(laf); - prefsPS->addPanel(uiModule, _("User interface"), laf); - prefsPS->addPanel(screenfontsModule, _("Screen fonts"), laf); - prefsPS->addPanel(colorsModule, _("Colors"), laf); - prefsPS->addPanel(displayModule, _("Graphics"), laf); - prefsPS->addPanel(keyboardModule, _("Keyboard"), laf); - - string const ls = _("Language settings"); - prefsPS->addCategory(ls); - prefsPS->addPanel(languageModule, _("Language"), ls); - prefsPS->addPanel(spellcheckerModule, _("Spellchecker"), ls); - - string const op = _("Outputs"); - prefsPS->addCategory(op); - prefsPS->addPanel(asciiModule, _("Plain text"), op); - prefsPS->addPanel(dateModule, _("Date format"), op); - prefsPS->addPanel(latexModule, _("LaTeX"), op); -#if defined(__CYGWIN__) || defined(__CYGWIN32__) - prefsPS->addPanel(cygwinpathModule, _("Paths"), op); -#endif - prefsPS->addPanel(printerModule, _("Printer"), op); - prefsPS->addPanel(identityModule, _("Identity")); - prefsPS->addPanel(pathsModule, _("Paths")); - prefsPS->addPanel(fileformatsModule, _("File formats")); - prefsPS->addPanel(convertersModule, _("Converters")); - prefsPS->addPanel(copiersModule, _("Copiers")); +void PrefDate::update(LyXRC const & rc) +{ + DateED->setText(toqstr(rc.date_insert_format)); +} - prefsPS->setCurrentPanel(_("User interface")); +PrefKeyboard::PrefKeyboard(QPrefs * form, QWidget * parent) +: PrefModule(_(LookAndFeel), _("Keyboard"), form, parent) +{ + setupUi(this); - form_->bcview().setOK(savePB); - form_->bcview().setApply(applyPB); - form_->bcview().setCancel(closePB); - form_->bcview().setRestore(restorePB); + connect(keymapCB, SIGNAL( toggled(bool) ), + firstKeymapLA, SLOT( setEnabled(bool) ) ); + connect(keymapCB, SIGNAL( toggled(bool) ), + secondKeymapLA, SLOT( setEnabled(bool) ) ); + connect(keymapCB, SIGNAL( toggled(bool) ), + firstKeymapED, SLOT( setEnabled(bool) ) ); + connect(keymapCB, SIGNAL( toggled(bool) ), + secondKeymapED, SLOT( setEnabled(bool) ) ); + connect(keymapCB, SIGNAL( toggled(bool) ), + firstKeymapPB, SLOT( setEnabled(bool) ) ); + connect(keymapCB, SIGNAL( toggled(bool) ), + secondKeymapPB, SLOT( setEnabled(bool) ) ); + + connect(keymapCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(firstKeymapED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(secondKeymapED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); } +void PrefKeyboard::apply(LyXRC & rc) const +{ + // FIXME: can derive CB from the two EDs + rc.use_kbmap = keymapCB->isChecked(); + rc.primary_kbmap = internal_path(firstKeymapED->text()); + rc.secondary_kbmap = internal_path(secondKeymapED->text()); +} -QPrefsDialog::~QPrefsDialog() +void PrefKeyboard::update(LyXRC const & rc) { + // FIXME: can derive CB from the two EDs + keymapCB->setChecked(rc.use_kbmap); + // no idea why we need these. Fscking Qt. + firstKeymapED->setEnabled(rc.use_kbmap); + firstKeymapPB->setEnabled(rc.use_kbmap); + firstKeymapLA->setEnabled(rc.use_kbmap); + secondKeymapED->setEnabled(rc.use_kbmap); + secondKeymapPB->setEnabled(rc.use_kbmap); + secondKeymapLA->setEnabled(rc.use_kbmap); + firstKeymapED->setText(external_path(rc.primary_kbmap)); + secondKeymapED->setText(external_path(rc.secondary_kbmap)); } -void QPrefsDialog::closeEvent(QCloseEvent * e) +QString PrefKeyboard::testKeymap(QString keymap) { - form_->slotWMHide(); - e->accept(); + return toqstr(form_->controller().browsekbmap(fromqstr(keymap))); } -void QPrefsDialog::change_adaptor() +void PrefKeyboard::on_firstKeymapPB_clicked(bool) { - form_->changed(); + QString file = testKeymap(firstKeymapED->text()); + if (!file.isEmpty()) + firstKeymapED->setText(file); } -void QPrefsDialog::updateConverters() +void PrefKeyboard::on_secondKeymapPB_clicked(bool) { - Ui::QPrefConvertersUi* convertmod(convertersModule); - - // save current selection - QString current = convertmod->converterFromCO->currentText() - + " -> " + convertmod->converterToCO->currentText(); + QString file = testKeymap(secondKeymapED->text()); + if (!file.isEmpty()) + secondKeymapED->setText(file); +} - convertmod->converterFromCO->clear(); - convertmod->converterToCO->clear(); - Formats::const_iterator cit = form_->formats().begin(); - Formats::const_iterator end = form_->formats().end(); - for (; cit != end; ++cit) { - convertmod->converterFromCO->insertItem(toqstr(cit->prettyname())); - convertmod->converterToCO->insertItem(toqstr(cit->prettyname())); - } +PrefLatex::PrefLatex(QPrefs * form, QWidget * parent) +: PrefModule(_(Outputs), _("LaTeX"), form, parent) +{ + setupUi(this); + connect(latexEncodingED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(latexChecktexED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(latexBibtexED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(latexIndexED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(latexAutoresetCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(latexDviPaperED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(latexPaperSizeCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); +} - convertmod->convertersLB->clear(); - Converters::const_iterator ccit = form_->converters().begin(); - Converters::const_iterator cend = form_->converters().end(); - for (; ccit != cend; ++ccit) { - std::string const name = ccit->From->prettyname() + " -> " - + ccit->To->prettyname(); - convertmod->convertersLB->insertItem(toqstr(name)); - } +void PrefLatex::apply(LyXRC & rc) const +{ + rc.fontenc = fromqstr(latexEncodingED->text()); + rc.chktex_command = fromqstr(latexChecktexED->text()); + rc.bibtex_command = fromqstr(latexBibtexED->text()); + rc.index_command = fromqstr(latexIndexED->text()); + rc.auto_reset_options = latexAutoresetCB->isChecked(); + rc.view_dvi_paper_option = fromqstr(latexDviPaperED->text()); + rc.default_papersize = + form_->controller().toPaperSize(latexPaperSizeCO->currentItem()); +} - // restore selection - if (!current.isEmpty()) { - Q3ListBoxItem * item = convertmod->convertersLB->findItem(current); - convertmod->convertersLB->setCurrentItem(item); - } - // select first element if restoring failed - if (convertmod->convertersLB->currentItem() == -1) - convertmod->convertersLB->setCurrentItem(0); - updateConverterButtons(); +void PrefLatex::update(LyXRC const & rc) +{ + latexEncodingED->setText(toqstr(rc.fontenc)); + latexChecktexED->setText(toqstr(rc.chktex_command)); + latexBibtexED->setText(toqstr(rc.bibtex_command)); + latexIndexED->setText(toqstr(rc.index_command)); + latexAutoresetCB->setChecked(rc.auto_reset_options); + latexDviPaperED->setText(toqstr(rc.view_dvi_paper_option)); + latexPaperSizeCO->setCurrentIndex( + form_->controller().fromPaperSize(rc.default_papersize)); } -void QPrefsDialog::switch_converter(int nr) +PrefScreenFonts::PrefScreenFonts(QPrefs * form, QWidget * parent) +: PrefModule(_(LookAndFeel), _("Screen fonts"), form, parent) { - Converter const & c(form_->converters().get(nr)); - convertersModule->converterFromCO->setCurrentItem(form_->formats().getNumber(c.from)); - convertersModule->converterToCO->setCurrentItem(form_->formats().getNumber(c.to)); - convertersModule->converterED->setText(toqstr(c.command)); - convertersModule->converterFlagED->setText(toqstr(c.flags)); + setupUi(this); - updateConverterButtons(); + connect(screenRomanCO, SIGNAL(activated(const QString&)), + this, SLOT(select_roman(const QString&))); + connect(screenSansCO, SIGNAL(activated(const QString&)), + this, SLOT(select_sans(const QString&))); + connect(screenTypewriterCO, SIGNAL(activated(const QString&)), + this, SLOT(select_typewriter(const QString&))); + + QFontDatabase fontdb; + QStringList families(fontdb.families()); + for (QStringList::Iterator it = families.begin(); it != families.end(); ++it) { + screenRomanCO->insertItem(*it); + screenSansCO->insertItem(*it); + screenTypewriterCO->insertItem(*it); + } + connect(screenRomanCO, SIGNAL(activated(const QString&)), + this, SIGNAL(changed())); + connect(screenSansCO, SIGNAL(activated(const QString&)), + this, SIGNAL(changed())); + connect(screenTypewriterCO, SIGNAL(activated(const QString&)), + this, SIGNAL(changed())); + connect(screenZoomSB, SIGNAL(valueChanged(int)), + this, SIGNAL(changed())); + connect(screenDpiSB, SIGNAL(valueChanged(int)), + this, SIGNAL(changed())); + connect(screenTinyED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenSmallestED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenSmallerED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenSmallED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenNormalED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenLargeED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenLargerED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenLargestED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenHugeED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(screenHugerED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + + screenTinyED->setValidator(new QDoubleValidator( + screenTinyED)); + screenSmallestED->setValidator(new QDoubleValidator( + screenSmallestED)); + screenSmallerED->setValidator(new QDoubleValidator( + screenSmallerED)); + screenSmallED->setValidator(new QDoubleValidator( + screenSmallED)); + screenNormalED->setValidator(new QDoubleValidator( + screenNormalED)); + screenLargeED->setValidator(new QDoubleValidator( + screenLargeED)); + screenLargerED->setValidator(new QDoubleValidator( + screenLargerED)); + screenLargestED->setValidator(new QDoubleValidator( + screenLargestED)); + screenHugeED->setValidator(new QDoubleValidator( + screenHugeED)); + screenHugerED->setValidator(new QDoubleValidator( + screenHugerED)); } -void QPrefsDialog::converter_changed() +void PrefScreenFonts::apply(LyXRC & rc) const { - updateConverterButtons(); + LyXRC const oldrc(rc); + + boost::tie(rc.roman_font_name, rc.roman_font_foundry) + = parseFontName(fromqstr(screenRomanCO->currentText())); + boost::tie(rc.sans_font_name, rc.sans_font_foundry) = + parseFontName(fromqstr(screenSansCO->currentText())); + boost::tie(rc.typewriter_font_name, rc.typewriter_font_foundry) = + parseFontName(fromqstr(screenTypewriterCO->currentText())); + + rc.zoom = screenZoomSB->value(); + rc.dpi = screenDpiSB->value(); + rc.font_sizes[LyXFont::SIZE_TINY] = fromqstr(screenTinyED->text()); + rc.font_sizes[LyXFont::SIZE_SCRIPT] = fromqstr(screenSmallestED->text()); + rc.font_sizes[LyXFont::SIZE_FOOTNOTE] = fromqstr(screenSmallerED->text()); + rc.font_sizes[LyXFont::SIZE_SMALL] = fromqstr(screenSmallED->text()); + rc.font_sizes[LyXFont::SIZE_NORMAL] = fromqstr(screenNormalED->text()); + rc.font_sizes[LyXFont::SIZE_LARGE] = fromqstr(screenLargeED->text()); + rc.font_sizes[LyXFont::SIZE_LARGER] = fromqstr(screenLargerED->text()); + rc.font_sizes[LyXFont::SIZE_LARGEST] = fromqstr(screenLargestED->text()); + rc.font_sizes[LyXFont::SIZE_HUGE] = fromqstr(screenHugeED->text()); + rc.font_sizes[LyXFont::SIZE_HUGER] = fromqstr(screenHugerED->text()); + + if (rc.font_sizes != oldrc.font_sizes + || rc.roman_font_name != oldrc.roman_font_name + || rc.sans_font_name != oldrc.sans_font_name + || rc.typewriter_font_name != oldrc.typewriter_font_name + || rc.zoom != oldrc.zoom || rc.dpi != oldrc.dpi) { + form_->controller().updateScreenFonts(); + } } -void QPrefsDialog::updateConverterButtons() +void PrefScreenFonts::update(LyXRC const & rc) { - Format const & from(form_->formats().get( - convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats().get( - convertersModule->converterToCO->currentItem())); - int const sel = form_->converters().getNumber(from.name(), to.name()); - bool const known = !(sel < 0); - bool const valid = !(convertersModule->converterED->text().isEmpty() - || from.name() == to.name()); - - Converter const & c(form_->converters().get( - convertersModule->convertersLB->currentItem())); - string const old_command = c.command; - string const old_flag = c.flags; - string const new_command(fromqstr(convertersModule->converterED->text())); - string const new_flag(fromqstr(convertersModule->converterFlagED->text())); + setComboxFont(screenRomanCO, rc.roman_font_name, + rc.roman_font_foundry); + setComboxFont(screenSansCO, rc.sans_font_name, + rc.sans_font_foundry); + setComboxFont(screenTypewriterCO, rc.typewriter_font_name, + rc.typewriter_font_foundry); - bool modified = ((old_command != new_command) || (old_flag != new_flag)); + select_roman(screenRomanCO->currentText()); + select_sans(screenSansCO->currentText()); + select_typewriter(screenTypewriterCO->currentText()); + + screenZoomSB->setValue(rc.zoom); + screenDpiSB->setValue(rc.dpi); + screenTinyED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_TINY])); + screenSmallestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SCRIPT])); + screenSmallerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_FOOTNOTE])); + screenSmallED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SMALL])); + screenNormalED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_NORMAL])); + screenLargeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGE])); + screenLargerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGER])); + screenLargestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGEST])); + screenHugeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGE])); + screenHugerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGER])); +} - convertersModule->converterModifyPB->setEnabled(valid && known && modified); - convertersModule->converterNewPB->setEnabled(valid && !known); - convertersModule->converterRemovePB->setEnabled(known); +void PrefScreenFonts::select_roman(const QString& name) +{ + screenRomanFE->set(QFont(name), name); } -// FIXME: user must -// specify unique from/to or it doesn't appear. This is really bad UI -void QPrefsDialog::new_converter() +void PrefScreenFonts::select_sans(const QString& name) { - Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem())); - string const command(fromqstr(convertersModule->converterED->text())); - string const flags(fromqstr(convertersModule->converterFlagED->text())); + screenSansFE->set(QFont(name), name); +} - Converter const * old = form_->converters().getConverter(from.name(), to.name()); - form_->converters().add(from.name(), to.name(), command, flags); - if (!old) { - form_->converters().updateLast(form_->formats()); - } - updateConverters(); - convertersModule->convertersLB->setCurrentItem(convertersModule->convertersLB->count() - 1); + +void PrefScreenFonts::select_typewriter(const QString& name) +{ + screenTypewriterFE->set(QFont(name), name); } -void QPrefsDialog::modify_converter() +PrefColors::PrefColors(QPrefs * form, QWidget * parent) +: PrefModule(_(LookAndFeel), _("Colors"), form, parent) { - int const top_item = convertersModule->convertersLB->topItem(); - QString const current_text = - convertersModule->convertersLB->currentText(); + setupUi(this); - Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem())); - string flags(fromqstr(convertersModule->converterFlagED->text())); - string name(fromqstr(convertersModule->converterED->text())); + // FIXME: put in controller + for (int i = 0; i < LColor::ignore; ++i) { + LColor::color lc = static_cast(i); + if (lc == LColor::none + || lc == LColor::black + || lc == LColor::white + || lc == LColor::red + || lc == LColor::green + || lc == LColor::blue + || lc == LColor::cyan + || lc == LColor::magenta + || lc == LColor::yellow + || lc == LColor::inherit + || lc == LColor::ignore) continue; - Converter const * old = form_->converters().getConverter(from.name(), to.name()); - form_->converters().add(from.name(), to.name(), name, flags); - if (!old) { - form_->converters().updateLast(form_->formats()); + lcolors_.push_back(lc); + QColor color = QColor(lcolorcache.get(lc)); + prefcolors_.push_back(color.name()); + QPixmap coloritem(32, 32); + coloritem.fill(color); + // This is not a memory leak: + /*QListWidgetItem * newItem =*/ new QListWidgetItem(QIcon(coloritem), + toqstr(lcolor.getGUIName(lc)), lyxObjectsLW); } - updateConverters(); + newcolors_ = prefcolors_; - Q3ListBoxItem * const item = - convertersModule->convertersLB->findItem(current_text); - convertersModule->convertersLB->setCurrentItem(item); - convertersModule->convertersLB->setTopItem(top_item); + connect(colorChangePB, SIGNAL(clicked()), + this, SLOT(change_color())); + connect(lyxObjectsLW, SIGNAL(itemActivated(QListWidgetItem*)), + this, SLOT(change_color())); } -void QPrefsDialog::remove_converter() +void PrefColors::apply(LyXRC & /*rc*/) const { - Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem())); - form_->converters().erase(from.name(), to.name()); - updateConverters(); + for (unsigned int i = 0; i < lcolors_.size(); ++i) { + if (prefcolors_[i]!=newcolors_[i]) + form_->controller().setColor(lcolors_[i], fromqstr(newcolors_[i])); + } } -void QPrefsDialog::updateCopiers() +void PrefColors::update(LyXRC const & /*rc*/) { - // The choice widget - // save current selection - QString current = copiersModule->copierFormatCO->currentText(); - copiersModule->copierFormatCO->clear(); +} - for (Formats::const_iterator it = form_->formats().begin(), - end = form_->formats().end(); - it != end; ++it) { - copiersModule->copierFormatCO->insertItem(toqstr(it->prettyname())); +void PrefColors::change_color() +{ + int const row = lyxObjectsLW->currentRow(); + QString color = newcolors_[row]; + QColor c(QColorDialog::getColor(QColor(color), + qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget())); + + if (c.name()!=color) { + newcolors_[row] = c.name(); + QPixmap coloritem(32, 32); + coloritem.fill(c); + lyxObjectsLW->currentItem()->setIcon(QIcon(coloritem)); + // emit signal + changed(); } +} - // The browser widget - copiersModule->AllCopiersLB->clear(); - for (Movers::iterator it = form_->movers().begin(), - end = form_->movers().end(); - it != end; ++it) { - std::string const & command = it->second.command(); - if (command.empty()) - continue; - std::string const & fmt = it->first; - std::string const & pretty = form_->formats().prettyName(fmt); +PrefCygwinPath::PrefCygwinPath(QWidget * parent) +: PrefModule(_(Outputs), _("Paths"), 0, parent) +{ + setupUi(this); + connect(pathCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); +} - copiersModule->AllCopiersLB->insertItem(toqstr(pretty)); - } - // restore selection - if (!current.isEmpty()) { - Q3ListBoxItem * item = copiersModule->AllCopiersLB->findItem(current); - copiersModule->AllCopiersLB->setCurrentItem(item); - } - // select first element if restoring failed - if (copiersModule->AllCopiersLB->currentItem() == -1) - copiersModule->AllCopiersLB->setCurrentItem(0); +void PrefCygwinPath::apply(LyXRC & rc) const +{ + rc.windows_style_tex_paths = pathCB->isChecked(); } -namespace { +void PrefCygwinPath::update(LyXRC const & rc) +{ + pathCB->setChecked(rc.windows_style_tex_paths); +} -class SamePrettyName { -public: - SamePrettyName(string const & n) : pretty_name_(n) {} - bool operator()(::Format const & fmt) const { - return fmt.prettyname() == pretty_name_; +PrefDisplay::PrefDisplay(QWidget * parent) +: PrefModule(_(LookAndFeel), _("Graphics"), 0, parent) +{ + setupUi(this); + connect(instantPreviewCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); + connect(displayGraphicsCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); +} + + +void PrefDisplay::apply(LyXRC & rc) const +{ + switch (instantPreviewCO->currentItem()) { + case 0: rc.preview = LyXRC::PREVIEW_OFF; break; + case 1: rc.preview = LyXRC::PREVIEW_NO_MATH; break; + case 2: rc.preview = LyXRC::PREVIEW_ON; break; } -private: - string const pretty_name_; -}; + lyx::graphics::DisplayType dtype; + switch (displayGraphicsCO->currentItem()) { + case 3: dtype = lyx::graphics::NoDisplay; break; + case 2: dtype = lyx::graphics::ColorDisplay; break; + case 1: dtype = lyx::graphics::GrayscaleDisplay; break; + case 0: dtype = lyx::graphics::MonochromeDisplay; break; + default: dtype = lyx::graphics::GrayscaleDisplay; + } + rc.display_graphics = dtype; +#ifdef WITH_WARNINGS +#warning FIXME!! The graphics cache no longer has a changeDisplay method. +#endif +#if 0 + if (old_value != rc.display_graphics) { + lyx::graphics::GCache & gc = lyx::graphics::GCache::get(); + gc.changeDisplay(); + } +#endif +} -Format const * getFormat(std::string const & prettyname) + +void PrefDisplay::update(LyXRC const & rc) { - Formats::const_iterator it = ::formats.begin(); - Formats::const_iterator const end = ::formats.end(); - it = std::find_if(it, end, SamePrettyName(prettyname)); - return it == end ? 0 : &*it; -} + switch (rc.preview) { + case LyXRC::PREVIEW_OFF: + instantPreviewCO->setCurrentIndex(0); + break; + case LyXRC::PREVIEW_NO_MATH : + instantPreviewCO->setCurrentIndex(1); + break; + case LyXRC::PREVIEW_ON : + instantPreviewCO->setCurrentIndex(2); + break; + } -} // namespace anon + int item = 2; + switch (rc.display_graphics) { + case lyx::graphics::NoDisplay: item = 3; break; + case lyx::graphics::ColorDisplay: item = 2; break; + case lyx::graphics::GrayscaleDisplay: item = 1; break; + case lyx::graphics::MonochromeDisplay: item = 0; break; + default: break; + } + displayGraphicsCO->setCurrentIndex(item); +} -void QPrefsDialog::switch_copierLB(int) +PrefPaths::PrefPaths(QPrefs * form, QWidget * parent) +: PrefModule(string(), _("Paths"), form, parent) { - std::string const browser_text = - fromqstr(copiersModule->AllCopiersLB->currentText()); - Format const * fmt = getFormat(browser_text); - if (fmt == 0) - return; + setupUi(this); + connect(templateDirPB, SIGNAL(clicked()), this, SLOT(select_templatedir())); + connect(tempDirPB, SIGNAL(clicked()), this, SLOT(select_tempdir())); + connect(backupDirPB, SIGNAL(clicked()), this, SLOT(select_backupdir())); + connect(workingDirPB, SIGNAL(clicked()), this, SLOT(select_workingdir())); + connect(lyxserverDirPB, SIGNAL(clicked()), this, SLOT(select_lyxpipe())); + connect(workingDirED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(templateDirED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(backupDirED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(tempDirED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(lyxserverDirED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(pathPrefixED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); +} - string const & fmt_name = fmt->name(); - string const & gui_name = fmt->prettyname(); - string const & command = form_->movers().command(fmt_name); - copiersModule->copierED->clear(); - int const combo_size = copiersModule->copierFormatCO->count(); - for (int i = 0; i < combo_size; ++i) { - QString const qtext = copiersModule->copierFormatCO->text(i); - std::string const text = fromqstr(qtext); - if (text == gui_name) { - copiersModule->copierFormatCO->setCurrentItem(i); - copiersModule->copierED->setText(toqstr(command)); - break; - } - } - updateCopierButtons(); +void PrefPaths::apply(LyXRC & rc) const +{ + rc.document_path = internal_path(workingDirED->text()); + rc.template_path = internal_path(templateDirED->text()); + rc.backupdir_path = internal_path(backupDirED->text()); + rc.tempdir_path = internal_path(tempDirED->text()); + rc.path_prefix = fromqstr(pathPrefixED->text()); + // FIXME: should be a checkbox only + rc.lyxpipes = internal_path(lyxserverDirED->text()); } -void QPrefsDialog::switch_copierCO(int) +void PrefPaths::update(LyXRC const & rc) { - std::string const combo_text = - fromqstr(copiersModule->copierFormatCO->currentText()); - Format const * fmt = getFormat(combo_text); - if (fmt == 0) - return; + workingDirED->setText(external_path(rc.document_path)); + templateDirED->setText(external_path(rc.template_path)); + backupDirED->setText(external_path(rc.backupdir_path)); + tempDirED->setText(external_path(rc.tempdir_path)); + pathPrefixED->setText(toqstr(rc.path_prefix)); + // FIXME: should be a checkbox only + lyxserverDirED->setText(external_path(rc.lyxpipes)); +} - string const & fmt_name = fmt->name(); - string const & gui_name = fmt->prettyname(); - string const & command = form_->movers().command(fmt_name); +// NB: the _() is OK here because it gets passed back and we toqstr() them - copiersModule->copierED->setText(toqstr(command)); +void PrefPaths::select_templatedir() +{ + string file(form_->controller().browsedir(fromqstr(templateDirED->text()), _("Select a document templates directory"))); + if (!file.empty()) + templateDirED->setText(toqstr(file)); +} - int const index = copiersModule->AllCopiersLB->currentItem(); - if (index >= 0) - copiersModule->AllCopiersLB->setSelected(index, false); - int const browser_size = copiersModule->AllCopiersLB->count(); - for (int i = 0; i < browser_size; ++i) { - QString const qtext = copiersModule->AllCopiersLB->text(i); - std::string const text = fromqstr(qtext); - if (text == gui_name) { - copiersModule->AllCopiersLB->setSelected(i, true); - int top = std::max(i - 5, 0); - copiersModule->AllCopiersLB->setTopItem(top); - break; - } - } +void PrefPaths::select_tempdir() +{ + string file(form_->controller().browsedir(fromqstr(tempDirED->text()), _("Select a temporary directory"))); + if (!file.empty()) + tempDirED->setText(toqstr(file)); } -void QPrefsDialog::copiers_changed() +void PrefPaths::select_backupdir() { - updateCopierButtons(); + string file(form_->controller().browsedir(fromqstr(backupDirED->text()), _("Select a backups directory"))); + if (!file.empty()) + backupDirED->setText(toqstr(file)); } -void QPrefsDialog::updateCopierButtons() +void PrefPaths::select_workingdir() { - QString selected = copiersModule->copierFormatCO->currentText(); + string file(form_->controller().browsedir(fromqstr(workingDirED->text()), _("Select a document directory"))); + if (!file.empty()) + workingDirED->setText(toqstr(file)); +} - bool known = false; - for (unsigned int i = 0; i != copiersModule->AllCopiersLB->count(); i++) { - if (copiersModule->AllCopiersLB->text(i) == selected) - known = true; - } - bool const valid = !copiersModule->copierED->text().isEmpty(); +void PrefPaths::select_lyxpipe() +{ + string file(form_->controller().browse(fromqstr(lyxserverDirED->text()), _("Give a filename for the LyX server pipe"))); + if (!file.empty()) + lyxserverDirED->setText(toqstr(file)); +} - Format const * fmt = getFormat(fromqstr(selected)); - string const old_command = form_->movers().command(fmt->name()); - string const new_command(fromqstr(copiersModule->copierED->text())); - bool modified = (old_command != new_command); +PrefSpellchecker::PrefSpellchecker(QPrefs * form, QWidget * parent) +: PrefModule(_(LanguageSettings), _("Spellchecker"), form, parent) +{ + setupUi(this); - copiersModule->copierModifyPB->setEnabled(valid && known && modified); - copiersModule->copierNewPB->setEnabled(valid && !known); - copiersModule->copierRemovePB->setEnabled(known); + connect(persDictionaryPB, SIGNAL(clicked()), this, SLOT(select_dict())); +#if defined (USE_ISPELL) + connect(spellCommandCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); +#else + spellCommandCO->setEnabled(false); +#endif + connect(altLanguageED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(escapeCharactersED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(persDictionaryED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(compoundWordCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(inputEncodingCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + + spellCommandCO->insertItem(qt_("ispell")); + spellCommandCO->insertItem(qt_("aspell")); + spellCommandCO->insertItem(qt_("hspell")); +#ifdef USE_PSPELL + spellCommandCO->insertItem(qt_("pspell (library)")); +#else +#ifdef USE_ASPELL + spellCommandCO->insertItem(qt_("aspell (library)")); +#endif +#endif } -void QPrefsDialog::new_copier() +void PrefSpellchecker::apply(LyXRC & rc) const { - std::string const combo_text = - fromqstr(copiersModule->copierFormatCO->currentText()); - Format const * fmt = getFormat(combo_text); - if (fmt == 0) - return; + switch (spellCommandCO->currentItem()) { + case 0: + case 1: + case 2: + rc.use_spell_lib = false; + rc.isp_command = fromqstr(spellCommandCO->currentText()); + break; + case 3: + rc.use_spell_lib = true; + break; + } - string const command = fromqstr(copiersModule->copierED->text()); - if (command.empty()) - return; + // FIXME: remove isp_use_alt_lang + rc.isp_alt_lang = fromqstr(altLanguageED->text()); + rc.isp_use_alt_lang = !rc.isp_alt_lang.empty(); + // FIXME: remove isp_use_esc_chars + rc.isp_esc_chars = fromqstr(escapeCharactersED->text()); + rc.isp_use_esc_chars = !rc.isp_esc_chars.empty(); + // FIXME: remove isp_use_pers_dict + rc.isp_pers_dict = internal_path(persDictionaryED->text()); + rc.isp_use_pers_dict = !rc.isp_pers_dict.empty(); + rc.isp_accept_compound = compoundWordCB->isChecked(); + rc.isp_use_input_encoding = inputEncodingCB->isChecked(); +} - form_->movers().set(fmt->name(), command); - updateCopiers(); - int const last = copiersModule->AllCopiersLB->count() - 1; - copiersModule->AllCopiersLB->setCurrentItem(last); +void PrefSpellchecker::update(LyXRC const & rc) +{ + spellCommandCO->setCurrentIndex(0); + + if (rc.isp_command == "ispell") { + spellCommandCO->setCurrentIndex(0); + } else if (rc.isp_command == "aspell") { + spellCommandCO->setCurrentIndex(1); + } else if (rc.isp_command == "hspell") { + spellCommandCO->setCurrentIndex(2); + } + + if (rc.use_spell_lib) { +#if defined(USE_ASPELL) || defined(USE_PSPELL) + spellCommandCO->setCurrentIndex(3); +#endif + } - updateCopierButtons(); + // FIXME: remove isp_use_alt_lang + altLanguageED->setText(toqstr(rc.isp_alt_lang)); + // FIXME: remove isp_use_esc_chars + escapeCharactersED->setText(toqstr(rc.isp_esc_chars)); + // FIXME: remove isp_use_pers_dict + persDictionaryED->setText(external_path(rc.isp_pers_dict)); + compoundWordCB->setChecked(rc.isp_accept_compound); + inputEncodingCB->setChecked(rc.isp_use_input_encoding); } -void QPrefsDialog::modify_copier() +void PrefSpellchecker::select_dict() { - std::string const combo_text = - fromqstr(copiersModule->copierFormatCO->currentText()); - Format const * fmt = getFormat(combo_text); - if (fmt == 0) - return; + string file(form_->controller().browsedict(fromqstr(persDictionaryED->text()))); + if (!file.empty()) + persDictionaryED->setText(toqstr(file)); +} - string const command = fromqstr(copiersModule->copierED->text()); - form_->movers().set(fmt->name(), command); - updateCopiers(); - updateCopierButtons(); +PrefConverters::PrefConverters(QPrefs * form, QWidget * parent) +: PrefModule(string(), _("Converters"), form, parent) +{ + setupUi(this); + + connect(converterNewPB, SIGNAL(clicked()), + this, SLOT(new_converter())); + connect(converterRemovePB, SIGNAL(clicked()), + this, SLOT(remove_converter())); + connect(converterModifyPB, SIGNAL(clicked()), + this, SLOT(modify_converter())); + connect(convertersLW, SIGNAL(currentRowChanged(int)), + this, SLOT(switch_converter(int))); + connect(converterFromCO, SIGNAL(activated(const QString&)), + this, SLOT(converter_changed())); + connect(converterToCO, SIGNAL(activated(const QString&)), + this, SLOT(converter_changed())); + connect(converterED, SIGNAL(textChanged(const QString&)), + this, SLOT(converter_changed())); + connect(converterFlagED, SIGNAL(textChanged(const QString&)), + this, SLOT(converter_changed())); + connect(converterNewPB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(converterRemovePB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(converterModifyPB, SIGNAL(clicked()), + this, SIGNAL(changed())); } -void QPrefsDialog::remove_copier() +void PrefConverters::apply(LyXRC & /*rc*/) const { - std::string const combo_text = - fromqstr(copiersModule->copierFormatCO->currentText()); - Format const * fmt = getFormat(combo_text); - if (fmt == 0) - return; +} - string const & fmt_name = fmt->name(); - form_->movers().set(fmt_name, string()); - updateCopiers(); - updateCopierButtons(); +void PrefConverters::update(LyXRC const & /*rc*/) +{ + updateGui(); } -void QPrefsDialog::updateFormats() +void PrefConverters::updateGui() { - Ui::QPrefFileformatsUi * formatmod(fileformatsModule); - // save current selection - QString current = formatmod->guiNameED->text(); + QString current = converterFromCO->currentText() + + " -> " + converterToCO->currentText(); - formatmod->formatsLB->clear(); + converterFromCO->clear(); + converterToCO->clear(); Formats::const_iterator cit = form_->formats().begin(); Formats::const_iterator end = form_->formats().end(); for (; cit != end; ++cit) { - formatmod->formatsLB->insertItem(toqstr(cit->prettyname())); + converterFromCO->insertItem(toqstr(cit->prettyname())); + converterToCO->insertItem(toqstr(cit->prettyname())); + } + + convertersLW->clear(); + + Converters::const_iterator ccit = form_->converters().begin(); + Converters::const_iterator cend = form_->converters().end(); + for (; ccit != cend; ++ccit) { + std::string const name = ccit->From->prettyname() + " -> " + + ccit->To->prettyname(); + new QListWidgetItem(toqstr(name), convertersLW, + form_->converters().getNumber(ccit->From->name(), ccit->To->name())); } + convertersLW->sortItems(Qt::AscendingOrder); // restore selection if (!current.isEmpty()) { - Q3ListBoxItem * item = formatmod->formatsLB->findItem(current); - formatmod->formatsLB->setCurrentItem(item); + QList const item = + convertersLW->findItems(current, Qt::MatchExactly); + if (item.size()>0) + convertersLW->setCurrentItem(item.at(0)); } // select first element if restoring failed - if (formatmod->formatsLB->currentItem() == -1) - formatmod->formatsLB->setCurrentItem(0); + if (convertersLW->currentRow() == -1) + convertersLW->setCurrentRow(0); + + updateButtons(); } -void QPrefsDialog::switch_format(int nr) +void PrefConverters::switch_converter(int nr) { - Format const & f(form_->formats().get(nr)); - fileformatsModule->formatED->setText(toqstr(f.name())); - fileformatsModule->guiNameED->setText(toqstr(f.prettyname())); - fileformatsModule->extensionED->setText(toqstr(f.extension())); - fileformatsModule->shortcutED->setText(toqstr(f.shortcut())); - fileformatsModule->viewerED->setText(toqstr(f.viewer())); - fileformatsModule->editorED->setText(toqstr(f.editor())); - fileformatsModule->formatRemovePB->setEnabled( - !form_->converters().formatIsUsed(f.name())); + if (nr<0) + return; - updateFormatsButtons(); + int const cnr = convertersLW->currentItem()->type(); + Converter const & c(form_->converters().get(cnr)); + converterFromCO->setCurrentIndex(form_->formats().getNumber(c.from)); + converterToCO->setCurrentIndex(form_->formats().getNumber(c.to)); + converterED->setText(toqstr(c.command)); + converterFlagED->setText(toqstr(c.flags)); + + updateButtons(); } -void QPrefsDialog::fileformat_changed() +void PrefConverters::converter_changed() { - updateFormatsButtons(); + updateButtons(); } -void QPrefsDialog::updateFormatsButtons() +void PrefConverters::updateButtons() { - QString const format = fileformatsModule->formatED->text(); - QString const gui_name = fileformatsModule->guiNameED->text(); - int const sel = form_->formats().getNumber(fromqstr(format)); - bool gui_name_known = false; - int where = sel; - for (unsigned int i = 0; i != fileformatsModule->formatsLB->count(); i++) { - if (fileformatsModule->formatsLB->text(i) == gui_name) { - gui_name_known = true; - where = i; - } - } - - // assure that a gui name cannot be chosen twice - bool const known_otherwise = gui_name_known && (where != sel); - + Format const & from(form_->formats().get( + converterFromCO->currentItem())); + Format const & to(form_->formats().get( + converterToCO->currentItem())); + int const sel = form_->converters().getNumber(from.name(), to.name()); bool const known = !(sel < 0); - bool const valid = (!fileformatsModule->formatED->text().isEmpty() - && !fileformatsModule->guiNameED->text().isEmpty()); - - Format const & f(form_->formats().get( - fileformatsModule->formatsLB->currentItem())); - string const old_pretty(f.prettyname()); - string const old_shortcut(f.shortcut()); - string const old_extension(f.extension()); - string const old_viewer(f.viewer()); - string const old_editor(f.editor()); + bool const valid = !(converterED->text().isEmpty() + || from.name() == to.name()); - string const new_pretty(fromqstr(gui_name)); - string const new_shortcut(fromqstr(fileformatsModule->shortcutED->text())); - string const new_extension(fromqstr(fileformatsModule->extensionED->text())); - string const new_viewer(fromqstr(fileformatsModule->viewerED->text())); - string const new_editor(fromqstr(fileformatsModule->editorED->text())); + int const cnr = convertersLW->currentItem()->type(); + Converter const & c(form_->converters().get(cnr)); + string const old_command = c.command; + string const old_flag = c.flags; + string const new_command(fromqstr(converterED->text())); + string const new_flag(fromqstr(converterFlagED->text())); - bool modified = ((old_pretty != new_pretty) || (old_shortcut != new_shortcut) - || (old_extension != new_extension) || (old_viewer != new_viewer) - || (old_editor != new_editor)); + bool modified = ((old_command != new_command) || (old_flag != new_flag)); - fileformatsModule->formatModifyPB->setEnabled( - valid && known && modified && !known_otherwise); - fileformatsModule->formatNewPB->setEnabled(valid && !known && !gui_name_known); - fileformatsModule->formatRemovePB->setEnabled(known); + converterModifyPB->setEnabled(valid && known && modified); + converterNewPB->setEnabled(valid && !known); + converterRemovePB->setEnabled(known); } -void QPrefsDialog::new_format() +// FIXME: user must +// specify unique from/to or it doesn't appear. This is really bad UI +void PrefConverters::new_converter() { - string const name = fromqstr(fileformatsModule->formatED->text()); - string const prettyname = fromqstr(fileformatsModule->guiNameED->text()); - string const extension = fromqstr(fileformatsModule->extensionED->text()); - string const shortcut = fromqstr(fileformatsModule->shortcutED->text()); - string const viewer = fromqstr(fileformatsModule->viewerED->text()); - string const editor = fromqstr(fileformatsModule->editorED->text()); + Format const & from(form_->formats().get(converterFromCO->currentItem())); + Format const & to(form_->formats().get(converterToCO->currentItem())); + string const command(fromqstr(converterED->text())); + string const flags(fromqstr(converterFlagED->text())); - form_->formats().add(name, extension, prettyname, shortcut, viewer, editor); - form_->formats().sort(); - updateFormats(); - fileformatsModule->formatsLB->setCurrentItem(form_->formats().getNumber(name)); - form_->converters().update(form_->formats()); + Converter const * old = form_->converters().getConverter(from.name(), to.name()); + form_->converters().add(from.name(), to.name(), command, flags); + if (!old) { + form_->converters().updateLast(form_->formats()); + } + updateGui(); - updateConverters(); - updateFormatsButtons(); + QString const name = toqstr(from.name() + " -> " + to.name()); + QList const item = + convertersLW->findItems(name, Qt::MatchExactly); + if (item.size()>0) + convertersLW->setCurrentItem(item.at(0)); } -void QPrefsDialog::modify_format() +void PrefConverters::modify_converter() { - int const top_item = fileformatsModule->formatsLB->topItem(); - int const current_item = fileformatsModule->formatsLB->currentItem(); QString const current_text = - fileformatsModule->formatsLB->currentText(); - - Format const & oldformat(form_->formats().get(current_item)); - string const oldpretty(oldformat.prettyname()); - string const name(fromqstr(fileformatsModule->formatED->text())); - form_->formats().erase(oldformat.name()); + convertersLW->currentItem()->text(); - string const prettyname = fromqstr(fileformatsModule->guiNameED->text()); - string const extension = fromqstr(fileformatsModule->extensionED->text()); - string const shortcut = fromqstr(fileformatsModule->shortcutED->text()); - string const viewer = fromqstr(fileformatsModule->viewerED->text()); - string const editor = fromqstr(fileformatsModule->editorED->text()); + Format const & from(form_->formats().get(converterFromCO->currentItem())); + Format const & to(form_->formats().get(converterToCO->currentItem())); + string flags(fromqstr(converterFlagED->text())); + string name(fromqstr(converterED->text())); - form_->formats().add(name, extension, prettyname, shortcut, viewer, editor); - form_->formats().sort(); + Converter const * old = form_->converters().getConverter(from.name(), to.name()); + form_->converters().add(from.name(), to.name(), name, flags); + if (!old) { + form_->converters().updateLast(form_->formats()); + } + updateGui(); - fileformatsModule->formatsLB->setUpdatesEnabled(false); - updateFormats(); - fileformatsModule->formatsLB->setUpdatesEnabled(true); - fileformatsModule->formatsLB->update(); + QList const item = + convertersLW->findItems(current_text, Qt::MatchExactly); + if (item.size()>0) + convertersLW->setCurrentItem(item.at(0)); +} - updateConverters(); - updateFormatsButtons(); - Q3ListBoxItem * const item = - fileformatsModule->formatsLB->findItem(current_text); - fileformatsModule->formatsLB->setCurrentItem(item); - fileformatsModule->formatsLB->setTopItem(top_item); +void PrefConverters::remove_converter() +{ + Format const & from(form_->formats().get(converterFromCO->currentItem())); + Format const & to(form_->formats().get(converterToCO->currentItem())); + form_->converters().erase(from.name(), to.name()); + updateGui(); } -void QPrefsDialog::remove_format() +PrefCopiers::PrefCopiers(QPrefs * form, QWidget * parent) +: PrefModule(string(), _("Copiers"), form, parent) { - int const nr(fileformatsModule->formatsLB->currentItem()); - if (nr < 0) - return; - string const current_text = form_->formats().get(nr).name(); - if (form_->converters().formatIsUsed(current_text)) { - Alert::error(_("Format in use"), - _("Cannot remove a Format used by a Converter. " - "Remove the converter first.")); - return; - } - form_->formats().erase(current_text); - updateFormats(); - form_->converters().update(form_->formats()); + setupUi(this); - updateConverters(); - updateFormatsButtons(); + connect(copierNewPB, SIGNAL(clicked()), this, SLOT(new_copier())); + connect(copierRemovePB, SIGNAL(clicked()), this, SLOT(remove_copier())); + connect(copierModifyPB, SIGNAL(clicked()), this, SLOT(modify_copier())); + connect(AllCopiersLW, SIGNAL(currentRowChanged(int)), + this, SLOT(switch_copierLB(int))); + connect(copierFormatCO, SIGNAL(activated(int)), this, SLOT(switch_copierCO(int))); + connect(copierNewPB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(copierRemovePB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(copierModifyPB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(copierFormatCO, SIGNAL(activated(const QString&)), this, SLOT(copiers_changed())); + connect(copierED, SIGNAL(textChanged(const QString&)), this, SLOT(copiers_changed())); } -void QPrefsDialog::change_color() +void PrefCopiers::apply(LyXRC & /*rc*/) const { - Q3ListBox * lb(colorsModule->lyxObjectsLB); - if (lb->currentItem() < 0) - return; - Q3ListBoxItem * ib(lb->item(lb->currentItem())); - QColorItem * ci(static_cast(ib)); - QColor c(QColorDialog::getColor(ci->color(), qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget())); - if (c.isValid()) { - ci->color(c); - lb->triggerUpdate(false); - change_adaptor(); - } } -void QPrefsDialog::select_ui() +void PrefCopiers::update(LyXRC const & /*rc*/) { - string file(form_->controller().browseUI(fromqstr(uiModule->uiFileED->text()))); - if (!file.empty()) - uiModule->uiFileED->setText(toqstr(file)); + update(); } -void QPrefsDialog::select_bind() +void PrefCopiers::update() { - string file(form_->controller().browsebind(fromqstr(uiModule->bindFileED->text()))); - if (!file.empty()) - uiModule->bindFileED->setText(toqstr(file)); -} + // The choice widget + // save current selection + QString current = copierFormatCO->currentText(); + copierFormatCO->clear(); + for (Formats::const_iterator it = form_->formats().begin(), + end = form_->formats().end(); + it != end; ++it) { + copierFormatCO->insertItem(toqstr(it->prettyname())); + } -void QPrefsDialog::select_keymap1() -{ - string file(form_->controller().browsekbmap(fromqstr(keyboardModule->firstKeymapED->text()))); - if (!file.empty()) - keyboardModule->firstKeymapED->setText(toqstr(file)); -} + // The browser widget + AllCopiersLW->clear(); + for (Movers::iterator it = form_->movers().begin(), + end = form_->movers().end(); + it != end; ++it) { + std::string const & command = it->second.command(); + if (command.empty()) + continue; + QString const pretty = toqstr(form_->formats().prettyName(it->first)); + AllCopiersLW->addItem(pretty); + } + AllCopiersLW->sortItems(Qt::AscendingOrder); -void QPrefsDialog::select_keymap2() -{ - string file(form_->controller().browsekbmap(fromqstr(keyboardModule->secondKeymapED->text()))); - if (!file.empty()) - keyboardModule->secondKeymapED->setText(toqstr(file)); + // restore selection + if (!current.isEmpty()) { + QList item = + AllCopiersLW->findItems(current, Qt::MatchExactly); + if (item.size()>0) + AllCopiersLW->setCurrentItem(item.at(0)); + } + // select first element if restoring failed + if (AllCopiersLW->currentRow() == -1) + AllCopiersLW->setCurrentRow(0); } -void QPrefsDialog::select_dict() +namespace { + +class SamePrettyName { +public: + SamePrettyName(string const & n) : pretty_name_(n) {} + + bool operator()(::Format const & fmt) const { + return fmt.prettyname() == pretty_name_; + } + +private: + string const pretty_name_; +}; + + +Format const * getFormat(std::string const & prettyname) { - string file(form_->controller().browsedict(fromqstr(spellcheckerModule->persDictionaryED->text()))); - if (!file.empty()) - spellcheckerModule->persDictionaryED->setText(toqstr(file)); + Formats::const_iterator it = ::formats.begin(); + Formats::const_iterator const end = ::formats.end(); + it = std::find_if(it, end, SamePrettyName(prettyname)); + return it == end ? 0 : &*it; } +} // namespace anon -// NB: the _() is OK here because it gets passed back and we toqstr() them -void QPrefsDialog::select_templatedir() +void PrefCopiers::switch_copierLB(int row) { - string file(form_->controller().browsedir(fromqstr(pathsModule->templateDirED->text()), _("Select a document templates directory"))); - if (!file.empty()) - pathsModule->templateDirED->setText(toqstr(file)); + if (row<0) + return; + + std::string const browser_text = + fromqstr(AllCopiersLW->currentItem()->text()); + Format const * fmt = getFormat(browser_text); + if (fmt == 0) + return; + + QString const gui_name = toqstr(fmt->prettyname()); + QString const command = toqstr(form_->movers().command(fmt->name())); + + copierED->clear(); + int const combo_size = copierFormatCO->count(); + for (int i = 0; i < combo_size; ++i) { + QString const text = copierFormatCO->text(i); + if (text == gui_name) { + copierFormatCO->setCurrentIndex(i); + copierED->setText(command); + break; + } + } + updateButtons(); } -void QPrefsDialog::select_tempdir() +void PrefCopiers::switch_copierCO(int row) { - string file(form_->controller().browsedir(fromqstr(pathsModule->tempDirED->text()), _("Select a temporary directory"))); - if (!file.empty()) - pathsModule->tempDirED->setText(toqstr(file)); + if (row<0) + return; + + std::string const combo_text = + fromqstr(copierFormatCO->currentText()); + Format const * fmt = getFormat(combo_text); + if (fmt == 0) + return; + + QString const command = toqstr(form_->movers().command(fmt->name())); + copierED->setText(command); + + QListWidgetItem * const index = AllCopiersLW->currentItem(); + if (index >= 0) + AllCopiersLW->setItemSelected(index, false); + + QString const gui_name = toqstr(fmt->prettyname()); + int const browser_size = AllCopiersLW->count(); + for (int i = 0; i < browser_size; ++i) { + QString const text = AllCopiersLW->item(i)->text(); + if (text == gui_name) { + QListWidgetItem * item = AllCopiersLW->item(i); + AllCopiersLW->setItemSelected(item, true); + break; + } + } } -void QPrefsDialog::select_backupdir() +void PrefCopiers::copiers_changed() { - string file(form_->controller().browsedir(fromqstr(pathsModule->backupDirED->text()), _("Select a backups directory"))); - if (!file.empty()) - pathsModule->backupDirED->setText(toqstr(file)); + updateButtons(); } -void QPrefsDialog::select_workingdir() +void PrefCopiers::updateButtons() { - string file(form_->controller().browsedir(fromqstr(pathsModule->workingDirED->text()), _("Select a document directory"))); - if (!file.empty()) - pathsModule->workingDirED->setText(toqstr(file)); + QString selected = copierFormatCO->currentText(); + + bool known = false; + for (int i = 0; i < AllCopiersLW->count(); ++i) { + if (AllCopiersLW->item(i)->text() == selected) + known = true; + } + + bool const valid = !copierED->text().isEmpty(); + + Format const * fmt = getFormat(fromqstr(selected)); + string const old_command = form_->movers().command(fmt->name()); + string const new_command(fromqstr(copierED->text())); + + bool modified = (old_command != new_command); + + copierModifyPB->setEnabled(valid && known && modified); + copierNewPB->setEnabled(valid && !known); + copierRemovePB->setEnabled(known); } -void QPrefsDialog::select_lyxpipe() +void PrefCopiers::new_copier() { - string file(form_->controller().browse(fromqstr(pathsModule->lyxserverDirED->text()), _("Give a filename for the LyX server pipe"))); - if (!file.empty()) - pathsModule->lyxserverDirED->setText(toqstr(file)); + std::string const combo_text = + fromqstr(copierFormatCO->currentText()); + Format const * fmt = getFormat(combo_text); + if (fmt == 0) + return; + + string const command = fromqstr(copierED->text()); + if (command.empty()) + return; + + form_->movers().set(fmt->name(), command); + + update(); + int const last = AllCopiersLW->count() - 1; + AllCopiersLW->setCurrentRow(last); + + updateButtons(); } -void QPrefsDialog::select_roman(const QString& name) +void PrefCopiers::modify_copier() { - screenfontsModule->screenRomanFE->set(QFont(name), name); + std::string const combo_text = + fromqstr(copierFormatCO->currentText()); + Format const * fmt = getFormat(combo_text); + if (fmt == 0) + return; + + string const command = fromqstr(copierED->text()); + form_->movers().set(fmt->name(), command); + + update(); + updateButtons(); } -void QPrefsDialog::select_sans(const QString& name) +void PrefCopiers::remove_copier() { - screenfontsModule->screenSansFE->set(QFont(name), name); + std::string const combo_text = + fromqstr(copierFormatCO->currentText()); + Format const * fmt = getFormat(combo_text); + if (fmt == 0) + return; + + string const & fmt_name = fmt->name(); + form_->movers().set(fmt_name, string()); + + update(); + updateButtons(); } -void QPrefsDialog::select_typewriter(const QString& name) + +PrefFileformats::PrefFileformats(QPrefs * form, QWidget * parent) +: PrefModule(string(), _("File formats"), form, parent) { - screenfontsModule->screenTypewriterFE->set(QFont(name), name); + setupUi(this); + + connect(formatNewPB, SIGNAL(clicked()), this, SLOT(new_format())); + connect(formatRemovePB, SIGNAL(clicked()), this, SLOT(remove_format())); + connect(formatModifyPB, SIGNAL(clicked()), this, SLOT(modify_format())); + connect(formatsLW, SIGNAL(currentRowChanged(int)), + this, SLOT(switch_format(int))); + connect(formatED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); + connect(guiNameED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); + connect(shortcutED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); + connect(extensionED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); + connect(viewerED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); + connect(editorED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed())); + connect(documentCB, SIGNAL(toggled(bool)), this, SLOT(fileformat_changed())); + connect(formatNewPB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(formatRemovePB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(formatModifyPB, SIGNAL(clicked()), + this, SIGNAL(changed())); } -namespace { -string const internal_path(QString const & input) +void PrefFileformats::apply(LyXRC & /*rc*/) const { - return lyx::support::os::internal_path(fromqstr(input)); } -} -void QPrefsDialog::apply(LyXRC & rc) const +void PrefFileformats::update(LyXRC const & /*rc*/) { - // FIXME: remove rtl_support bool - rc.rtl_support = languageModule->rtlCB->isChecked(); - rc.mark_foreign_language = languageModule->markForeignCB->isChecked(); - rc.language_auto_begin = languageModule->autoBeginCB->isChecked(); - rc.language_auto_end = languageModule->autoEndCB->isChecked(); - rc.language_use_babel = languageModule->useBabelCB->isChecked(); - rc.language_global_options = languageModule->globalCB->isChecked(); - rc.language_package = fromqstr(languageModule->languagePackageED->text()); - rc.language_command_begin = fromqstr(languageModule->startCommandED->text()); - rc.language_command_end = fromqstr(languageModule->endCommandED->text()); - rc.default_language = lang_[languageModule->defaultLanguageCO->currentItem()]; - - - rc.ui_file = internal_path(uiModule->uiFileED->text()); - rc.bind_file = internal_path(uiModule->bindFileED->text()); - rc.cursor_follows_scrollbar = uiModule->cursorFollowsCB->isChecked(); - rc.autosave = uiModule->autoSaveSB->value() * 60; - rc.make_backup = uiModule->autoSaveCB->isChecked(); - rc.num_lastfiles = uiModule->lastfilesSB->value(); + update(); +} - // FIXME: can derive CB from the two EDs - rc.use_kbmap = keyboardModule->keymapCB->isChecked(); - rc.primary_kbmap = internal_path(keyboardModule->firstKeymapED->text()); - rc.secondary_kbmap = internal_path(keyboardModule->secondKeymapED->text()); +void PrefFileformats::update() +{ + // save current selection + QString current = guiNameED->text(); + formatsLW->clear(); - rc.ascii_linelen = asciiModule->asciiLinelengthSB->value(); - rc.ascii_roff_command = fromqstr(asciiModule->asciiRoffED->text()); + Formats::const_iterator cit = form_->formats().begin(); + Formats::const_iterator end = form_->formats().end(); + for (; cit != end; ++cit) { + new QListWidgetItem(toqstr(cit->prettyname()), + formatsLW, + form_->formats().getNumber(cit->name()) ); + } + formatsLW->sortItems(Qt::AscendingOrder); + // restore selection + if (!current.isEmpty()) { + QList item = formatsLW->findItems(current, Qt::MatchExactly); + if (item.size()>0) + formatsLW->setCurrentItem(item.at(0)); + } + // select first element if restoring failed + if (formatsLW->currentRow() == -1) + formatsLW->setCurrentRow(0); +} - rc.date_insert_format = fromqstr(dateModule->DateED->text()); +void PrefFileformats::switch_format(int nr) +{ + if (nr<0) + return; -#if defined(__CYGWIN__) || defined(__CYGWIN32__) - rc.cygwin_path_fix = cygwinpathModule->pathCB->isChecked(); -#endif + int const ftype = formatsLW->item(nr)->type(); + Format const f(form_->formats().get(ftype)); + + formatED->setText(toqstr(f.name())); + guiNameED->setText(toqstr(f.prettyname())); + extensionED->setText(toqstr(f.extension())); + shortcutED->setText(toqstr(f.shortcut())); + viewerED->setText(toqstr(f.viewer())); + editorED->setText(toqstr(f.editor())); + documentCB->setChecked((f.documentFormat())); + formatRemovePB->setEnabled( + !form_->converters().formatIsUsed(f.name())); + updateButtons(); +} - rc.fontenc = fromqstr(latexModule->latexEncodingED->text()); - rc.chktex_command = fromqstr(latexModule->latexChecktexED->text()); - rc.bibtex_command = fromqstr(latexModule->latexBibtexED->text()); - rc.index_command = fromqstr(latexModule->latexIndexED->text()); - rc.auto_reset_options = latexModule->latexAutoresetCB->isChecked(); - rc.view_dvi_paper_option = fromqstr(latexModule->latexDviPaperED->text()); - rc.default_papersize = - form_->controller().toPaperSize(latexModule->latexPaperSizeCO->currentItem()); +void PrefFileformats::fileformat_changed() +{ + updateButtons(); +} - switch (displayModule->instantPreviewCO->currentItem()) { - case 0: rc.preview = LyXRC::PREVIEW_OFF; break; - case 1: rc.preview = LyXRC::PREVIEW_NO_MATH; break; - case 2: rc.preview = LyXRC::PREVIEW_ON; break; - } - lyx::graphics::DisplayType dtype; - switch (displayModule->displayGraphicsCO->currentItem()) { - case 3: dtype = lyx::graphics::NoDisplay; break; - case 2: dtype = lyx::graphics::ColorDisplay; break; - case 1: dtype = lyx::graphics::GrayscaleDisplay; break; - case 0: dtype = lyx::graphics::MonochromeDisplay; break; - default: dtype = lyx::graphics::GrayscaleDisplay; +void PrefFileformats::updateButtons() +{ + QString const format = formatED->text(); + QString const gui_name = guiNameED->text(); + int const sel = form_->formats().getNumber(fromqstr(format)); + bool gui_name_known = false; + int where = sel; + for (int i = 0; i < formatsLW->count(); ++i) { + if (formatsLW->item(i)->text() == gui_name) { + gui_name_known = true; + where = formatsLW->item(i)->type(); + } } - rc.display_graphics = dtype; -#ifdef WITH_WARNINGS -#warning FIXME!! The graphics cache no longer has a changeDisplay method. -#endif -#if 0 - if (old_value != rc.display_graphics) { - lyx::graphics::GCache & gc = lyx::graphics::GCache::get(); - gc.changeDisplay(); - } -#endif + // assure that a gui name cannot be chosen twice + bool const known_otherwise = gui_name_known && (where != sel); + bool const known = !(sel < 0); + bool const valid = (!formatED->text().isEmpty() + && !guiNameED->text().isEmpty()); - rc.document_path = internal_path(pathsModule->workingDirED->text()); - rc.template_path = internal_path(pathsModule->templateDirED->text()); - rc.backupdir_path = internal_path(pathsModule->backupDirED->text()); - rc.tempdir_path = internal_path(pathsModule->tempDirED->text()); - rc.path_prefix = fromqstr(pathsModule->pathPrefixED->text()); - // FIXME: should be a checkbox only - rc.lyxpipes = internal_path(pathsModule->lyxserverDirED->text()); + int const ftype = formatsLW->currentItem()->type(); + Format const & f(form_->formats().get(ftype)); + string const old_pretty(f.prettyname()); + string const old_shortcut(f.shortcut()); + string const old_extension(f.extension()); + string const old_viewer(f.viewer()); + string const old_editor(f.editor()); + bool const old_document(f.documentFormat()); + string const new_pretty(fromqstr(gui_name)); + string const new_shortcut(fromqstr(shortcutED->text())); + string const new_extension(fromqstr(extensionED->text())); + string const new_viewer(fromqstr(viewerED->text())); + string const new_editor(fromqstr(editorED->text())); + bool const new_document(documentCB->isChecked()); - switch (spellcheckerModule->spellCommandCO->currentItem()) { - case 0: - case 1: - case 2: - rc.use_spell_lib = false; - rc.isp_command = fromqstr(spellcheckerModule->spellCommandCO->currentText()); - break; - case 3: - rc.use_spell_lib = true; - break; - } + bool modified = ((old_pretty != new_pretty) || (old_shortcut != new_shortcut) + || (old_extension != new_extension) || (old_viewer != new_viewer) + || (old_editor != new_editor) || old_document != new_document); - // FIXME: remove isp_use_alt_lang - rc.isp_alt_lang = fromqstr(spellcheckerModule->altLanguageED->text()); - rc.isp_use_alt_lang = !rc.isp_alt_lang.empty(); - // FIXME: remove isp_use_esc_chars - rc.isp_esc_chars = fromqstr(spellcheckerModule->escapeCharactersED->text()); - rc.isp_use_esc_chars = !rc.isp_esc_chars.empty(); - // FIXME: remove isp_use_pers_dict - rc.isp_pers_dict = internal_path(spellcheckerModule->persDictionaryED->text()); - rc.isp_use_pers_dict = !rc.isp_pers_dict.empty(); - rc.isp_accept_compound = spellcheckerModule->compoundWordCB->isChecked(); - rc.isp_use_input_encoding = spellcheckerModule->inputEncodingCB->isChecked(); + formatModifyPB->setEnabled( + valid && known && modified && !known_otherwise); + formatNewPB->setEnabled(valid && !known && !gui_name_known); + formatRemovePB->setEnabled(known); +} +void PrefFileformats::setConverters(PrefConverters * converters) +{ + converters_ = converters; +} +void PrefFileformats::new_format() +{ + string const name = fromqstr(formatED->text()); + string const prettyname = fromqstr(guiNameED->text()); + string const extension = fromqstr(extensionED->text()); + string const shortcut = fromqstr(shortcutED->text()); + string const viewer = fromqstr(viewerED->text()); + string const editor = fromqstr(editorED->text()); + bool const document = documentCB->isChecked(); + + form_->formats().add(name, extension, prettyname, shortcut, viewer, + editor, document); + form_->formats().sort(); + update(); - rc.print_adapt_output = printerModule->printerAdaptCB->isChecked(); - rc.print_command = fromqstr(printerModule->printerCommandED->text()); - rc.printer = fromqstr(printerModule->printerNameED->text()); + QList const item = + formatsLW->findItems(toqstr(prettyname), Qt::MatchExactly); + if (item.size()>0) + formatsLW->setCurrentItem(item.at(0)); - rc.print_pagerange_flag = fromqstr(printerModule->printerPageRangeED->text()); - rc.print_copies_flag = fromqstr(printerModule->printerCopiesED->text()); - rc.print_reverse_flag = fromqstr(printerModule->printerReverseED->text()); - rc.print_to_printer = fromqstr(printerModule->printerToPrinterED->text()); - rc.print_file_extension = fromqstr(printerModule->printerExtensionED->text()); - rc.print_spool_command = fromqstr(printerModule->printerSpoolCommandED->text()); - rc.print_paper_flag = fromqstr(printerModule->printerPaperTypeED->text()); - rc.print_evenpage_flag = fromqstr(printerModule->printerEvenED->text()); - rc.print_oddpage_flag = fromqstr(printerModule->printerOddED->text()); - rc.print_collcopies_flag = fromqstr(printerModule->printerCollatedED->text()); - rc.print_landscape_flag = fromqstr(printerModule->printerLandscapeED->text()); - rc.print_to_file = internal_path(printerModule->printerToFileED->text()); - rc.print_extra_options = fromqstr(printerModule->printerExtraED->text()); - rc.print_spool_printerprefix = fromqstr(printerModule->printerSpoolPrefixED->text()); - rc.print_paper_dimension_flag = fromqstr(printerModule->printerPaperSizeED->text()); + form_->converters().update(form_->formats()); + converters_->updateGui(); + updateButtons(); +} - rc.user_name = fromqstr(identityModule->nameED->text()); - rc.user_email = fromqstr(identityModule->emailED->text()); +void PrefFileformats::modify_format() +{ + int const current_item = formatsLW->currentItem()->type(); + QString const current_text = + formatsLW->currentItem()->text(); + Format const & oldformat(form_->formats().get(current_item)); + string const oldpretty(oldformat.prettyname()); + string const name(fromqstr(formatED->text())); + form_->formats().erase(oldformat.name()); + string const prettyname = fromqstr(guiNameED->text()); + string const extension = fromqstr(extensionED->text()); + string const shortcut = fromqstr(shortcutED->text()); + string const viewer = fromqstr(viewerED->text()); + string const editor = fromqstr(editorED->text()); + bool const document = documentCB->isChecked(); - LyXRC const oldrc(rc); + form_->formats().add(name, extension, prettyname, shortcut, viewer, + editor, document); + form_->formats().sort(); - boost::tie(rc.roman_font_name, rc.roman_font_foundry) - = parseFontName(fromqstr(screenfontsModule->screenRomanCO->currentText())); - boost::tie(rc.sans_font_name, rc.sans_font_foundry) = - parseFontName(fromqstr(screenfontsModule->screenSansCO->currentText())); - boost::tie(rc.typewriter_font_name, rc.typewriter_font_foundry) = - parseFontName(fromqstr(screenfontsModule->screenTypewriterCO->currentText())); - - rc.zoom = screenfontsModule->screenZoomSB->value(); - rc.dpi = screenfontsModule->screenDpiSB->value(); - rc.font_sizes[LyXFont::SIZE_TINY] = fromqstr(screenfontsModule->screenTinyED->text()); - rc.font_sizes[LyXFont::SIZE_SCRIPT] = fromqstr(screenfontsModule->screenSmallestED->text()); - rc.font_sizes[LyXFont::SIZE_FOOTNOTE] = fromqstr(screenfontsModule->screenSmallerED->text()); - rc.font_sizes[LyXFont::SIZE_SMALL] = fromqstr(screenfontsModule->screenSmallED->text()); - rc.font_sizes[LyXFont::SIZE_NORMAL] = fromqstr(screenfontsModule->screenNormalED->text()); - rc.font_sizes[LyXFont::SIZE_LARGE] = fromqstr(screenfontsModule->screenLargeED->text()); - rc.font_sizes[LyXFont::SIZE_LARGER] = fromqstr(screenfontsModule->screenLargerED->text()); - rc.font_sizes[LyXFont::SIZE_LARGEST] = fromqstr(screenfontsModule->screenLargestED->text()); - rc.font_sizes[LyXFont::SIZE_HUGE] = fromqstr(screenfontsModule->screenHugeED->text()); - rc.font_sizes[LyXFont::SIZE_HUGER] = fromqstr(screenfontsModule->screenHugerED->text()); + formatsLW->setUpdatesEnabled(false); + update(); + formatsLW->setUpdatesEnabled(true); + formatsLW->update(); - if (rc.font_sizes != oldrc.font_sizes - || rc.roman_font_name != oldrc.roman_font_name - || rc.sans_font_name != oldrc.sans_font_name - || rc.typewriter_font_name != oldrc.typewriter_font_name - || rc.zoom != oldrc.zoom || rc.dpi != oldrc.dpi) { - form_->controller().updateScreenFonts(); - } + converters_->updateGui(); + updateButtons(); - - - - unsigned int i; - for (i = 0; i < colorsModule->lyxObjectsLB->count(); ++i) { - Q3ListBoxItem * ib(colorsModule->lyxObjectsLB->item(i)); - QColorItem * ci(static_cast(ib)); + QList const item = + formatsLW->findItems(current_text, Qt::MatchExactly); + if (item.size()>0) + formatsLW->setCurrentItem(item.at(0)); +} - LColor::color const col(colors_[i]); - QColor const & qcol(lcolorcache.get(col)); - // FIXME: dubious, but it's what xforms does - if (qcol != ci->color()) { - ostringstream ostr; +void PrefFileformats::remove_format() +{ + int const nr = formatsLW->currentItem()->type(); + if (nr < 0) + return; + string const current_text = form_->formats().get(nr).name(); + if (form_->converters().formatIsUsed(current_text)) { + Alert::error(_("Format in use"), + _("Cannot remove a Format used by a Converter. " + "Remove the converter first.")); + return; + } - ostr << '#' << std::setbase(16) << setfill('0') - << setw(2) << ci->color().red() - << setw(2) << ci->color().green() - << setw(2) << ci->color().blue(); + form_->formats().erase(current_text); + update(); + form_->converters().update(form_->formats()); - string newhex(ostr.str()); - form_->controller().setColor(col, newhex); - } - } + converters_->updateGui(); + updateButtons(); } -// FIXME: move to helper_funcs.h -namespace { - -template -typename std::vector::size_type -findPos(std::vector const & vec, A const & val) -{ - typedef typename std::vector::const_iterator Cit; - Cit it = std::find(vec.begin(), vec.end(), val); - if (it == vec.end()) - return 0; - return distance(vec.begin(), it); -} -void setComboxFont(QComboBox * cb, string const & family, string const & foundry) +PrefLanguage::PrefLanguage(QWidget * parent) +: PrefModule(string(), _("Language"), 0, parent) { - string const name = makeFontName(family, foundry); - for (int i = 0; i < cb->count(); ++i) { - if (fromqstr(cb->text(i)) == name) { - cb->setCurrentItem(i); - return; - } - } + setupUi(this); - // Try matching without foundry name + connect(rtlCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(markForeignCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(autoBeginCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(autoEndCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(useBabelCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(globalCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(languagePackageED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(startCommandED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(endCommandED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(defaultLanguageCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); + + defaultLanguageCO->clear(); - // We count in reverse in order to prefer the Xft foundry - for (int i = cb->count() - 1; i >= 0; --i) { - pair tmp = parseFontName(fromqstr(cb->text(i))); - if (compare_no_case(tmp.first, family) == 0) { - cb->setCurrentItem(i); - return; - } + // store the lang identifiers for later + using lyx::frontend::LanguagePair; + std::vector const langs = + lyx::frontend::getLanguageData(false); + lang_ = getSecond(langs); + + std::vector::const_iterator lit = langs.begin(); + std::vector::const_iterator lend = langs.end(); + for (; lit != lend; ++lit) { + defaultLanguageCO->insertItem(toqstr(lit->first)); } +} - // family alone can contain e.g. "Helvetica [Adobe]" - pair tmpfam = parseFontName(family); - // We count in reverse in order to prefer the Xft foundry - for (int i = cb->count() - 1; i >= 0; --i) { - pair tmp = parseFontName(fromqstr(cb->text(i))); - if (compare_no_case(tmp.first, tmpfam.first) == 0) { - cb->setCurrentItem(i); - return; - } - } +void PrefLanguage::apply(LyXRC & rc) const +{ + // FIXME: remove rtl_support bool + rc.rtl_support = rtlCB->isChecked(); + rc.mark_foreign_language = markForeignCB->isChecked(); + rc.language_auto_begin = autoBeginCB->isChecked(); + rc.language_auto_end = autoEndCB->isChecked(); + rc.language_use_babel = useBabelCB->isChecked(); + rc.language_global_options = globalCB->isChecked(); + rc.language_package = fromqstr(languagePackageED->text()); + rc.language_command_begin = fromqstr(startCommandED->text()); + rc.language_command_end = fromqstr(endCommandED->text()); + rc.default_language = lang_[defaultLanguageCO->currentItem()]; +} - // Bleh, default fonts, and the names couldn't be found. Hack - // for bug 1063. Qt makes baby Jesus cry. - QFont font; +void PrefLanguage::update(LyXRC const & rc) +{ + // FIXME: remove rtl_support bool + rtlCB->setChecked(rc.rtl_support); + markForeignCB->setChecked(rc.mark_foreign_language); + autoBeginCB->setChecked(rc.language_auto_begin); + autoEndCB->setChecked(rc.language_auto_end); + useBabelCB->setChecked(rc.language_use_babel); + globalCB->setChecked(rc.language_global_options); + languagePackageED->setText(toqstr(rc.language_package)); + startCommandED->setText(toqstr(rc.language_command_begin)); + endCommandED->setText(toqstr(rc.language_command_end)); - if (family == lyx_gui::roman_font_name()) { - font.setStyleHint(QFont::Serif); - font.setFamily(family.c_str()); - } else if (family == lyx_gui::sans_font_name()) { - font.setStyleHint(QFont::SansSerif); - font.setFamily(family.c_str()); - } else if (family == lyx_gui::typewriter_font_name()) { - font.setStyleHint(QFont::TypeWriter); - font.setFamily(family.c_str()); - } else { - lyxerr << "FAILED to find the default font: '" - << foundry << "', '" << family << '\''<< endl; - return; - } + int const pos = int(findPos(lang_, rc.default_language)); + defaultLanguageCO->setCurrentIndex(pos); +} - QFontInfo info(font); - pair tmp = parseFontName(fromqstr(info.family())); - string const & default_font_name = tmp.first; - lyxerr << "Apparent font is " << default_font_name << endl; - for (int i = 0; i < cb->count(); ++i) { - lyxerr << "Looking at " << fromqstr(cb->text(i)) << endl; - if (compare_no_case(fromqstr(cb->text(i)), - default_font_name) == 0) { - cb->setCurrentItem(i); - return; - } - } +PrefPrinter::PrefPrinter(QWidget * parent) +: PrefModule(_(Outputs), _("Printer"), 0, parent) +{ + setupUi(this); - lyxerr << "FAILED to find the font: '" - << foundry << "', '" << family << '\'' <isChecked(); + rc.print_command = fromqstr(printerCommandED->text()); + rc.printer = fromqstr(printerNameED->text()); + + rc.print_pagerange_flag = fromqstr(printerPageRangeED->text()); + rc.print_copies_flag = fromqstr(printerCopiesED->text()); + rc.print_reverse_flag = fromqstr(printerReverseED->text()); + rc.print_to_printer = fromqstr(printerToPrinterED->text()); + rc.print_file_extension = fromqstr(printerExtensionED->text()); + rc.print_spool_command = fromqstr(printerSpoolCommandED->text()); + rc.print_paper_flag = fromqstr(printerPaperTypeED->text()); + rc.print_evenpage_flag = fromqstr(printerEvenED->text()); + rc.print_oddpage_flag = fromqstr(printerOddED->text()); + rc.print_collcopies_flag = fromqstr(printerCollatedED->text()); + rc.print_landscape_flag = fromqstr(printerLandscapeED->text()); + rc.print_to_file = internal_path(printerToFileED->text()); + rc.print_extra_options = fromqstr(printerExtraED->text()); + rc.print_spool_printerprefix = fromqstr(printerSpoolPrefixED->text()); + rc.print_paper_dimension_flag = fromqstr(printerPaperSizeED->text()); +} -QString const external_path(string const & input) + +void PrefPrinter::update(LyXRC const & rc) { - return toqstr(lyx::support::os::external_path(input)); + printerAdaptCB->setChecked(rc.print_adapt_output); + printerCommandED->setText(toqstr(rc.print_command)); + printerNameED->setText(toqstr(rc.printer)); + + printerPageRangeED->setText(toqstr(rc.print_pagerange_flag)); + printerCopiesED->setText(toqstr(rc.print_copies_flag)); + printerReverseED->setText(toqstr(rc.print_reverse_flag)); + printerToPrinterED->setText(toqstr(rc.print_to_printer)); + printerExtensionED->setText(toqstr(rc.print_file_extension)); + printerSpoolCommandED->setText(toqstr(rc.print_spool_command)); + printerPaperTypeED->setText(toqstr(rc.print_paper_flag)); + printerEvenED->setText(toqstr(rc.print_evenpage_flag)); + printerOddED->setText(toqstr(rc.print_oddpage_flag)); + printerCollatedED->setText(toqstr(rc.print_collcopies_flag)); + printerLandscapeED->setText(toqstr(rc.print_landscape_flag)); + printerToFileED->setText(external_path(rc.print_to_file)); + printerExtraED->setText(toqstr(rc.print_extra_options)); + printerSpoolPrefixED->setText(toqstr(rc.print_spool_printerprefix)); + printerPaperSizeED->setText(toqstr(rc.print_paper_dimension_flag)); } + +PrefUserInterface::PrefUserInterface(QPrefs * form, QWidget * parent) +: PrefModule(_(LookAndFeel), _("User interface"), form, parent) +{ + setupUi(this); + + connect(autoSaveCB, SIGNAL( toggled(bool) ), autoSaveLA, SLOT( setEnabled(bool) ) ); + connect(autoSaveCB, SIGNAL( toggled(bool) ), autoSaveSB, SLOT( setEnabled(bool) ) ); + connect(autoSaveCB, SIGNAL( toggled(bool) ), TextLabel1, SLOT( setEnabled(bool) ) ); + connect(uiFilePB, SIGNAL(clicked()), this, SLOT(select_ui())); + connect(bindFilePB, SIGNAL(clicked()), this, SLOT(select_bind())); + connect(uiFileED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(bindFileED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(restoreCursorCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(loadSessionCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(cursorFollowsCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(autoSaveSB, SIGNAL(valueChanged(int)), + this, SIGNAL(changed())); + connect(autoSaveCB, SIGNAL(toggled(bool)), + this, SIGNAL(changed())); + connect(lastfilesSB, SIGNAL(valueChanged(int)), + this, SIGNAL(changed())); + lastfilesSB->setMaxValue(maxlastfiles); } -void QPrefsDialog::update(LyXRC const & rc) + +void PrefUserInterface::apply(LyXRC & rc) const { - // FIXME: remove rtl_support bool - languageModule->rtlCB->setChecked(rc.rtl_support); - languageModule->markForeignCB->setChecked(rc.mark_foreign_language); - languageModule->autoBeginCB->setChecked(rc.language_auto_begin); - languageModule->autoEndCB->setChecked(rc.language_auto_end); - languageModule->useBabelCB->setChecked(rc.language_use_babel); - languageModule->globalCB->setChecked(rc.language_global_options); - languageModule->languagePackageED->setText(toqstr(rc.language_package)); - languageModule->startCommandED->setText(toqstr(rc.language_command_begin)); - languageModule->endCommandED->setText(toqstr(rc.language_command_end)); + rc.ui_file = internal_path(uiFileED->text()); + rc.bind_file = internal_path(bindFileED->text()); + rc.use_lastfilepos = restoreCursorCB->isChecked(); + rc.load_session = loadSessionCB->isChecked(); + rc.cursor_follows_scrollbar = cursorFollowsCB->isChecked(); + rc.autosave = autoSaveSB->value() * 60; + rc.make_backup = autoSaveCB->isChecked(); + rc.num_lastfiles = lastfilesSB->value(); +} - int const pos = int(findPos(lang_, rc.default_language)); - languageModule->defaultLanguageCO->setCurrentItem(pos); - uiModule->uiFileED->setText(external_path(rc.ui_file)); - uiModule->bindFileED->setText(external_path(rc.bind_file)); - uiModule->cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar); +void PrefUserInterface::update(LyXRC const & rc) +{ + uiFileED->setText(external_path(rc.ui_file)); + bindFileED->setText(external_path(rc.bind_file)); + restoreCursorCB->setChecked(rc.use_lastfilepos); + loadSessionCB->setChecked(rc.load_session); + cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar); // convert to minutes int mins(rc.autosave / 60); if (rc.autosave && !mins) mins = 1; - uiModule->autoSaveSB->setValue(mins); - uiModule->autoSaveCB->setChecked(rc.make_backup); - uiModule->lastfilesSB->setValue(rc.num_lastfiles); - - - identityModule->nameED->setText(toqstr(rc.user_name)); - identityModule->emailED->setText(toqstr(rc.user_email)); - - - // FIXME: can derive CB from the two EDs - keyboardModule->keymapCB->setChecked(rc.use_kbmap); - // no idea why we need these. Fscking Qt. - keyboardModule->firstKeymapED->setEnabled(rc.use_kbmap); - keyboardModule->firstKeymapPB->setEnabled(rc.use_kbmap); - keyboardModule->firstKeymapLA->setEnabled(rc.use_kbmap); - keyboardModule->secondKeymapED->setEnabled(rc.use_kbmap); - keyboardModule->secondKeymapPB->setEnabled(rc.use_kbmap); - keyboardModule->secondKeymapLA->setEnabled(rc.use_kbmap); - keyboardModule->firstKeymapED->setText(external_path(rc.primary_kbmap)); - keyboardModule->secondKeymapED->setText(external_path(rc.secondary_kbmap)); + autoSaveSB->setValue(mins); + autoSaveCB->setChecked(rc.make_backup); + lastfilesSB->setValue(rc.num_lastfiles); +} - asciiModule->asciiLinelengthSB->setValue(rc.ascii_linelen); - asciiModule->asciiRoffED->setText(toqstr(rc.ascii_roff_command)); +void PrefUserInterface::select_ui() +{ + string file(form_->controller().browseUI(fromqstr(uiFileED->text()))); + if (!file.empty()) + uiFileED->setText(toqstr(file)); +} +void PrefUserInterface::select_bind() +{ + string file(form_->controller().browsebind(fromqstr(bindFileED->text()))); + if (!file.empty()) + bindFileED->setText(toqstr(file)); +} - dateModule->DateED->setText(toqstr(rc.date_insert_format)); +PrefIdentity::PrefIdentity(QWidget * parent) +: PrefModule(string(), _("Identity"), 0, parent) +{ + setupUi(this); + connect(nameED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); + connect(emailED, SIGNAL(textChanged(const QString&)), + this, SIGNAL(changed())); +} -#if defined(__CYGWIN__) || defined(__CYGWIN32__) - cygwinpathModule->pathCB->setChecked(rc.cygwin_path_fix); -#endif +void PrefIdentity::apply(LyXRC & rc) const +{ + rc.user_name = fromqstr(nameED->text()); + rc.user_email = fromqstr(emailED->text()); +} - latexModule->latexEncodingED->setText(toqstr(rc.fontenc)); - latexModule->latexChecktexED->setText(toqstr(rc.chktex_command)); - latexModule->latexBibtexED->setText(toqstr(rc.bibtex_command)); - latexModule->latexIndexED->setText(toqstr(rc.index_command)); - latexModule->latexAutoresetCB->setChecked(rc.auto_reset_options); - latexModule->latexDviPaperED->setText(toqstr(rc.view_dvi_paper_option)); - latexModule->latexPaperSizeCO->setCurrentItem( - form_->controller().fromPaperSize(rc.default_papersize)); +void PrefIdentity::update(LyXRC const & rc) +{ + nameED->setText(toqstr(rc.user_name)); + emailED->setText(toqstr(rc.user_email)); +} - switch (rc.preview) { - case LyXRC::PREVIEW_OFF: - displayModule->instantPreviewCO->setCurrentItem(0); - break; - case LyXRC::PREVIEW_NO_MATH : - displayModule->instantPreviewCO->setCurrentItem(1); - break; - case LyXRC::PREVIEW_ON : - displayModule->instantPreviewCO->setCurrentItem(2); - break; - } +QPrefsDialog::QPrefsDialog(QPrefs * form) + : form_(form) +{ + setupUi(this); + QDialog::setModal(true); - int item = 2; - switch (rc.display_graphics) { - case lyx::graphics::NoDisplay: item = 3; break; - case lyx::graphics::ColorDisplay: item = 2; break; - case lyx::graphics::GrayscaleDisplay: item = 1; break; - case lyx::graphics::MonochromeDisplay: item = 0; break; - default: break; - } - displayModule->displayGraphicsCO->setCurrentItem(item); + connect(savePB, SIGNAL(clicked()), + form, SLOT(slotOK())); + connect(applyPB, SIGNAL(clicked()), + form, SLOT(slotApply())); + connect(closePB, SIGNAL(clicked()), + form, SLOT(slotClose())); + connect(restorePB, SIGNAL(clicked()), + form, SLOT(slotRestore())); + add(new PrefAscii); + add(new PrefDate); + add(new PrefKeyboard(form_)); + add(new PrefLatex(form_)); + add(new PrefScreenFonts(form_)); + add(new PrefColors(form_)); +#if defined(__CYGWIN__) || defined(_WIN32) + add(new PrefCygwinPath); +#endif - pathsModule->workingDirED->setText(external_path(rc.document_path)); - pathsModule->templateDirED->setText(external_path(rc.template_path)); - pathsModule->backupDirED->setText(external_path(rc.backupdir_path)); - pathsModule->tempDirED->setText(external_path(rc.tempdir_path)); - pathsModule->pathPrefixED->setText(toqstr(rc.path_prefix)); - // FIXME: should be a checkbox only - pathsModule->lyxserverDirED->setText(external_path(rc.lyxpipes)); + add(new PrefDisplay); + add(new PrefPaths(form_)); + add(new PrefSpellchecker(form_)); + PrefConverters * converters = new PrefConverters(form_); + PrefFileformats * formats = new PrefFileformats(form_); + formats->setConverters(converters); + add(converters); + add(formats); + add(new PrefCopiers(form_)); - spellcheckerModule->spellCommandCO->setCurrentItem(0); + add(new PrefLanguage); + add(new PrefPrinter); + add(new PrefUserInterface(form_)); + add(new PrefIdentity); - if (rc.isp_command == "ispell") { - spellcheckerModule->spellCommandCO->setCurrentItem(0); - } else if (rc.isp_command == "aspell") { - spellcheckerModule->spellCommandCO->setCurrentItem(1); - } else if (rc.isp_command == "hspell") { - spellcheckerModule->spellCommandCO->setCurrentItem(2); - } + prefsPS->setCurrentPanel(_("User interface")); - if (rc.use_spell_lib) { -#if defined(USE_ASPELL) || defined(USE_PSPELL) - spellcheckerModule->spellCommandCO->setCurrentItem(3); -#endif - } + form_->bcview().setOK(savePB); + form_->bcview().setApply(applyPB); + form_->bcview().setCancel(closePB); + form_->bcview().setRestore(restorePB); +} - // FIXME: remove isp_use_alt_lang - spellcheckerModule->altLanguageED->setText(toqstr(rc.isp_alt_lang)); - // FIXME: remove isp_use_esc_chars - spellcheckerModule->escapeCharactersED->setText(toqstr(rc.isp_esc_chars)); - // FIXME: remove isp_use_pers_dict - spellcheckerModule->persDictionaryED->setText(external_path(rc.isp_pers_dict)); - spellcheckerModule->compoundWordCB->setChecked(rc.isp_accept_compound); - spellcheckerModule->inputEncodingCB->setChecked(rc.isp_use_input_encoding); +QPrefsDialog::~QPrefsDialog() +{ +} +void QPrefsDialog::add(PrefModule * module) +{ + BOOST_ASSERT(module); - printerModule->printerAdaptCB->setChecked(rc.print_adapt_output); - printerModule->printerCommandED->setText(toqstr(rc.print_command)); - printerModule->printerNameED->setText(toqstr(rc.printer)); +// if (module->category().empty()) +// prefsPS->addPanel(module, module->title()); +// else + prefsPS->addPanel(module, module->title(), module->category()); - printerModule->printerPageRangeED->setText(toqstr(rc.print_pagerange_flag)); - printerModule->printerCopiesED->setText(toqstr(rc.print_copies_flag)); - printerModule->printerReverseED->setText(toqstr(rc.print_reverse_flag)); - printerModule->printerToPrinterED->setText(toqstr(rc.print_to_printer)); - printerModule->printerExtensionED->setText(toqstr(rc.print_file_extension)); - printerModule->printerSpoolCommandED->setText(toqstr(rc.print_spool_command)); - printerModule->printerPaperTypeED->setText(toqstr(rc.print_paper_flag)); - printerModule->printerEvenED->setText(toqstr(rc.print_evenpage_flag)); - printerModule->printerOddED->setText(toqstr(rc.print_oddpage_flag)); - printerModule->printerCollatedED->setText(toqstr(rc.print_collcopies_flag)); - printerModule->printerLandscapeED->setText(toqstr(rc.print_landscape_flag)); - printerModule->printerToFileED->setText(external_path(rc.print_to_file)); - printerModule->printerExtraED->setText(toqstr(rc.print_extra_options)); - printerModule->printerSpoolPrefixED->setText(toqstr(rc.print_spool_printerprefix)); - printerModule->printerPaperSizeED->setText(toqstr(rc.print_paper_dimension_flag)); + connect(module, SIGNAL(changed()), this, SLOT(change_adaptor())); + modules_.push_back(module); +} +void QPrefsDialog::closeEvent(QCloseEvent * e) +{ + form_->slotWMHide(); + e->accept(); +} - setComboxFont(screenfontsModule->screenRomanCO, rc.roman_font_name, - rc.roman_font_foundry); - setComboxFont(screenfontsModule->screenSansCO, rc.sans_font_name, - rc.sans_font_foundry); - setComboxFont(screenfontsModule->screenTypewriterCO, rc.typewriter_font_name, - rc.typewriter_font_foundry); +void QPrefsDialog::change_adaptor() +{ + form_->changed(); +} - select_roman(screenfontsModule->screenRomanCO->currentText()); - select_sans(screenfontsModule->screenSansCO->currentText()); - select_typewriter(screenfontsModule->screenTypewriterCO->currentText()); - screenfontsModule->screenZoomSB->setValue(rc.zoom); - screenfontsModule->screenDpiSB->setValue(rc.dpi); - screenfontsModule->screenTinyED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_TINY])); - screenfontsModule->screenSmallestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SCRIPT])); - screenfontsModule->screenSmallerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_FOOTNOTE])); - screenfontsModule->screenSmallED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SMALL])); - screenfontsModule->screenNormalED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_NORMAL])); - screenfontsModule->screenLargeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGE])); - screenfontsModule->screenLargerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGER])); - screenfontsModule->screenLargestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGEST])); - screenfontsModule->screenHugeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGE])); - screenfontsModule->screenHugerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGER])); +void QPrefsDialog::apply(LyXRC & rc) const +{ + size_t end = modules_.size(); + for (size_t i = 0; i != end; ++i) + modules_[i]->apply(rc); +} - updateFormats(); - updateConverters(); - updateCopiers(); +void QPrefsDialog::update(LyXRC const & rc) +{ + size_t end = modules_.size(); + for (size_t i = 0; i != end; ++i) + modules_[i]->update(rc); } } // namespace frontend } // namespace lyx + +#include "QPrefsDialog_moc.cpp"