X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiPrefs.cpp;h=4518838456d131f635df510acedb43869c3f44fb;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=48388bbd2ff9d2fb70668af387759ff4f74f5a77;hpb=3e18652f8e2ed4777de927f0442068e1827e8acf;p=lyx.git diff --git a/src/frontends/qt4/GuiPrefs.cpp b/src/frontends/qt4/GuiPrefs.cpp index 48388bbd2f..4518838456 100644 --- a/src/frontends/qt4/GuiPrefs.cpp +++ b/src/frontends/qt4/GuiPrefs.cpp @@ -34,6 +34,7 @@ #include "PanelStack.h" #include "paper.h" #include "Session.h" +#include "SpellChecker.h" #include "support/debug.h" #include "support/FileName.h" @@ -516,6 +517,8 @@ PrefCompletion::PrefCompletion(GuiPreferences * form) this, SIGNAL(changed())); connect(popupMathCB, SIGNAL(clicked()), this, SIGNAL(changed())); + connect(autocorrectionCB, SIGNAL(clicked()), + this, SIGNAL(changed())); connect(popupTextCB, SIGNAL(clicked()), this, SIGNAL(changed())); connect(popupAfterCompleteCB, SIGNAL(clicked()), @@ -552,6 +555,7 @@ void PrefCompletion::apply(LyXRC & rc) const rc.completion_inline_dots = inlineDotsCB->isChecked() ? 13 : -1; rc.completion_popup_delay = popupDelaySB->value(); rc.completion_popup_math = popupMathCB->isChecked(); + rc.autocorrection_math = autocorrectionCB->isChecked(); rc.completion_popup_text = popupTextCB->isChecked(); rc.completion_cursor_text = cursorTextCB->isChecked(); rc.completion_popup_after_complete = @@ -567,6 +571,7 @@ void PrefCompletion::update(LyXRC const & rc) inlineDotsCB->setChecked(rc.completion_inline_dots != -1); popupDelaySB->setValue(rc.completion_popup_delay); popupMathCB->setChecked(rc.completion_popup_math); + autocorrectionCB->setChecked(rc.autocorrection_math); popupTextCB->setChecked(rc.completion_popup_text); cursorTextCB->setChecked(rc.completion_cursor_text); popupAfterCompleteCB->setChecked(rc.completion_popup_after_complete); @@ -585,6 +590,8 @@ PrefLatex::PrefLatex(GuiPreferences * form) : PrefModule(qt_(catOutput), qt_("LaTeX"), form) { setupUi(this); + connect(latexEncodingCB, SIGNAL(clicked()), + this, SIGNAL(changed())); connect(latexEncodingED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); connect(latexChecktexED, SIGNAL(textChanged(QString)), @@ -618,15 +625,21 @@ PrefLatex::PrefLatex(GuiPreferences * form) } +void PrefLatex::on_latexEncodingCB_stateChanged(int state) +{ + latexEncodingED->setEnabled(state == Qt::Checked); +} + + void PrefLatex::on_latexBibtexCO_activated(int n) { QString const bibtex = latexBibtexCO->itemData(n).toString(); if (bibtex.isEmpty()) { latexBibtexED->clear(); - latexBibtexOptionsLA->setText(qt_("C&ommand:")); + latexBibtexOptionsLA->setText(qt_("Co&mmand:")); return; } - for (set::const_iterator it = bibtex_alternatives.begin(); + for (LyXRC::CommandSet::const_iterator it = bibtex_alternatives.begin(); it != bibtex_alternatives.end(); ++it) { QString const bib = toqstr(*it); int ind = bib.indexOf(" "); @@ -651,7 +664,7 @@ void PrefLatex::on_latexIndexCO_activated(int n) latexIndexOptionsLA->setText(qt_("Co&mmand:")); return; } - for (set::const_iterator it = index_alternatives.begin(); + for (LyXRC::CommandSet::const_iterator it = index_alternatives.begin(); it != index_alternatives.end(); ++it) { QString const idx = toqstr(*it); int ind = idx.indexOf(" "); @@ -694,7 +707,10 @@ void PrefLatex::apply(LyXRC & rc) const else rc.index_command = fromqstr(index) + " " + fromqstr(idxopt); - rc.fontenc = fromqstr(latexEncodingED->text()); + if (latexEncodingCB->isChecked()) + rc.fontenc = fromqstr(latexEncodingED->text()); + else + rc.fontenc = "default"; rc.chktex_command = fromqstr(latexChecktexED->text()); rc.jbibtex_command = fromqstr(latexJBibtexED->text()); rc.jindex_command = fromqstr(latexJIndexED->text()); @@ -714,7 +730,7 @@ void PrefLatex::update(LyXRC const & rc) latexBibtexCO->clear(); latexBibtexCO->addItem(qt_("Custom"), QString()); - for (set::const_iterator it = rc.bibtex_alternatives.begin(); + for (LyXRC::CommandSet::const_iterator it = rc.bibtex_alternatives.begin(); it != rc.bibtex_alternatives.end(); ++it) { QString const command = toqstr(*it).left(toqstr(*it).indexOf(" ")); latexBibtexCO->addItem(command, command); @@ -735,13 +751,13 @@ void PrefLatex::update(LyXRC const & rc) } else { latexBibtexED->setText(toqstr(rc.bibtex_command)); latexBibtexCO->setCurrentIndex(0); - latexBibtexOptionsLA->setText(qt_("C&ommand:")); + latexBibtexOptionsLA->setText(qt_("Co&mmand:")); } latexIndexCO->clear(); latexIndexCO->addItem(qt_("Custom"), QString()); - for (set::const_iterator it = rc.index_alternatives.begin(); + for (LyXRC::CommandSet::const_iterator it = rc.index_alternatives.begin(); it != rc.index_alternatives.end(); ++it) { QString const command = toqstr(*it).left(toqstr(*it).indexOf(" ")); latexIndexCO->addItem(command, command); @@ -765,7 +781,14 @@ void PrefLatex::update(LyXRC const & rc) latexIndexOptionsLA->setText(qt_("Co&mmand:")); } - latexEncodingED->setText(toqstr(rc.fontenc)); + if (rc.fontenc == "default") { + latexEncodingCB->setChecked(false); + latexEncodingED->setEnabled(false); + } else { + latexEncodingCB->setChecked(true); + latexEncodingED->setEnabled(true); + latexEncodingED->setText(toqstr(rc.fontenc)); + } latexChecktexED->setText(toqstr(rc.chktex_command)); latexJBibtexED->setText(toqstr(rc.jbibtex_command)); latexJIndexED->setText(toqstr(rc.jindex_command)); @@ -864,16 +887,16 @@ void PrefScreenFonts::apply(LyXRC & rc) const rc.zoom = screenZoomSB->value(); rc.dpi = screenDpiSB->value(); - rc.font_sizes[FONT_SIZE_TINY] = fromqstr(screenTinyED->text()); - rc.font_sizes[FONT_SIZE_SCRIPT] = fromqstr(screenSmallestED->text()); - rc.font_sizes[FONT_SIZE_FOOTNOTE] = fromqstr(screenSmallerED->text()); - rc.font_sizes[FONT_SIZE_SMALL] = fromqstr(screenSmallED->text()); - rc.font_sizes[FONT_SIZE_NORMAL] = fromqstr(screenNormalED->text()); - rc.font_sizes[FONT_SIZE_LARGE] = fromqstr(screenLargeED->text()); - rc.font_sizes[FONT_SIZE_LARGER] = fromqstr(screenLargerED->text()); - rc.font_sizes[FONT_SIZE_LARGEST] = fromqstr(screenLargestED->text()); - rc.font_sizes[FONT_SIZE_HUGE] = fromqstr(screenHugeED->text()); - rc.font_sizes[FONT_SIZE_HUGER] = fromqstr(screenHugerED->text()); + rc.font_sizes[FONT_SIZE_TINY] = widgetToDoubleStr(screenTinyED); + rc.font_sizes[FONT_SIZE_SCRIPT] = widgetToDoubleStr(screenSmallestED); + rc.font_sizes[FONT_SIZE_FOOTNOTE] = widgetToDoubleStr(screenSmallerED); + rc.font_sizes[FONT_SIZE_SMALL] = widgetToDoubleStr(screenSmallED); + rc.font_sizes[FONT_SIZE_NORMAL] = widgetToDoubleStr(screenNormalED); + rc.font_sizes[FONT_SIZE_LARGE] = widgetToDoubleStr(screenLargeED); + rc.font_sizes[FONT_SIZE_LARGER] = widgetToDoubleStr(screenLargerED); + rc.font_sizes[FONT_SIZE_LARGEST] = widgetToDoubleStr(screenLargestED); + rc.font_sizes[FONT_SIZE_HUGE] = widgetToDoubleStr(screenHugeED); + rc.font_sizes[FONT_SIZE_HUGER] = widgetToDoubleStr(screenHugerED); rc.use_pixmap_cache = pixmapCacheCB->isChecked(); if (rc.font_sizes != oldrc.font_sizes @@ -906,16 +929,16 @@ void PrefScreenFonts::update(LyXRC const & rc) screenZoomSB->setValue(rc.zoom); screenDpiSB->setValue(rc.dpi); - screenTinyED->setText(toqstr(rc.font_sizes[FONT_SIZE_TINY])); - screenSmallestED->setText(toqstr(rc.font_sizes[FONT_SIZE_SCRIPT])); - screenSmallerED->setText(toqstr(rc.font_sizes[FONT_SIZE_FOOTNOTE])); - screenSmallED->setText(toqstr(rc.font_sizes[FONT_SIZE_SMALL])); - screenNormalED->setText(toqstr(rc.font_sizes[FONT_SIZE_NORMAL])); - screenLargeED->setText(toqstr(rc.font_sizes[FONT_SIZE_LARGE])); - screenLargerED->setText(toqstr(rc.font_sizes[FONT_SIZE_LARGER])); - screenLargestED->setText(toqstr(rc.font_sizes[FONT_SIZE_LARGEST])); - screenHugeED->setText(toqstr(rc.font_sizes[FONT_SIZE_HUGE])); - screenHugerED->setText(toqstr(rc.font_sizes[FONT_SIZE_HUGER])); + doubleToWidget(screenTinyED, rc.font_sizes[FONT_SIZE_TINY]); + doubleToWidget(screenSmallestED, rc.font_sizes[FONT_SIZE_SCRIPT]); + doubleToWidget(screenSmallerED, rc.font_sizes[FONT_SIZE_FOOTNOTE]); + doubleToWidget(screenSmallED, rc.font_sizes[FONT_SIZE_SMALL]); + doubleToWidget(screenNormalED, rc.font_sizes[FONT_SIZE_NORMAL]); + doubleToWidget(screenLargeED, rc.font_sizes[FONT_SIZE_LARGE]); + doubleToWidget(screenLargerED, rc.font_sizes[FONT_SIZE_LARGER]); + doubleToWidget(screenLargestED, rc.font_sizes[FONT_SIZE_LARGEST]); + doubleToWidget(screenHugeED, rc.font_sizes[FONT_SIZE_HUGE]); + doubleToWidget(screenHugerED, rc.font_sizes[FONT_SIZE_HUGER]); pixmapCacheCB->setChecked(rc.use_pixmap_cache); #if defined(Q_WS_X11) @@ -1061,11 +1084,26 @@ void PrefColors::changeLyxObjectsSelection() ///////////////////////////////////////////////////////////////////// PrefDisplay::PrefDisplay(GuiPreferences * form) - : PrefModule(qt_(catLookAndFeel), qt_("Graphics"), form) + : PrefModule(qt_(catLookAndFeel), qt_("Display"), form) { setupUi(this); connect(displayGraphicsCB, SIGNAL(toggled(bool)), this, SIGNAL(changed())); connect(instantPreviewCO, SIGNAL(activated(int)), this, SIGNAL(changed())); + connect(previewSizeSB, SIGNAL(valueChanged(double)), this, SIGNAL(changed())); + connect(paragraphMarkerCB, SIGNAL(toggled(bool)), this, SIGNAL(changed())); + if (instantPreviewCO->currentIndex() == 0) + previewSizeSB->setEnabled(false); + else + previewSizeSB->setEnabled(true); +} + + +void PrefDisplay::on_instantPreviewCO_currentIndexChanged(int index) +{ + if (index == 0) + previewSizeSB->setEnabled(false); + else + previewSizeSB->setEnabled(true); } @@ -1078,6 +1116,8 @@ void PrefDisplay::apply(LyXRC & rc) const } rc.display_graphics = displayGraphicsCB->isChecked(); + rc.preview_scale_factor = previewSizeSB->value(); + rc.paragraph_markers = paragraphMarkerCB->isChecked(); // FIXME!! The graphics cache no longer has a changeDisplay method. #if 0 @@ -1105,6 +1145,8 @@ void PrefDisplay::update(LyXRC const & rc) displayGraphicsCB->setChecked(rc.display_graphics); instantPreviewCO->setEnabled(rc.display_graphics); + previewSizeSB->setValue(rc.preview_scale_factor); + paragraphMarkerCB->setChecked(rc.paragraph_markers); } @@ -1118,27 +1160,39 @@ PrefPaths::PrefPaths(GuiPreferences * form) : PrefModule(QString(), qt_("Paths"), form) { setupUi(this); - connect(exampleDirPB, SIGNAL(clicked()), this, SLOT(selectExampledir())); - connect(templateDirPB, SIGNAL(clicked()), this, SLOT(selectTemplatedir())); - connect(tempDirPB, SIGNAL(clicked()), this, SLOT(selectTempdir())); - connect(backupDirPB, SIGNAL(clicked()), this, SLOT(selectBackupdir())); + connect(workingDirPB, SIGNAL(clicked()), this, SLOT(selectWorkingdir())); - connect(lyxserverDirPB, SIGNAL(clicked()), this, SLOT(selectLyxPipe())); - connect(thesaurusDirPB, SIGNAL(clicked()), this, SLOT(selectThesaurusdir())); connect(workingDirED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); - connect(exampleDirED, SIGNAL(textChanged(QString)), - this, SIGNAL(changed())); + + connect(templateDirPB, SIGNAL(clicked()), this, SLOT(selectTemplatedir())); connect(templateDirED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); - connect(backupDirED, SIGNAL(textChanged(QString)), + + connect(exampleDirPB, SIGNAL(clicked()), this, SLOT(selectExampledir())); + connect(exampleDirED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); - connect(tempDirED, SIGNAL(textChanged(QString)), + + connect(backupDirPB, SIGNAL(clicked()), this, SLOT(selectBackupdir())); + connect(backupDirED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); + + connect(lyxserverDirPB, SIGNAL(clicked()), this, SLOT(selectLyxPipe())); connect(lyxserverDirED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); + + connect(thesaurusDirPB, SIGNAL(clicked()), this, SLOT(selectThesaurusdir())); connect(thesaurusDirED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); + + connect(tempDirPB, SIGNAL(clicked()), this, SLOT(selectTempdir())); + connect(tempDirED, SIGNAL(textChanged(QString)), + this, SIGNAL(changed())); + + connect(hunspellDirPB, SIGNAL(clicked()), this, SLOT(selectHunspelldir())); + connect(hunspellDirED, SIGNAL(textChanged(QString)), + this, SIGNAL(changed())); + connect(pathPrefixED, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); } @@ -1152,6 +1206,7 @@ void PrefPaths::apply(LyXRC & rc) const rc.backupdir_path = internal_path(fromqstr(backupDirED->text())); rc.tempdir_path = internal_path(fromqstr(tempDirED->text())); rc.thesaurusdir_path = internal_path(fromqstr(thesaurusDirED->text())); + rc.hunspelldir_path = internal_path(fromqstr(hunspellDirED->text())); rc.path_prefix = internal_path_list(fromqstr(pathPrefixED->text())); // FIXME: should be a checkbox only rc.lyxpipes = internal_path(fromqstr(lyxserverDirED->text())); @@ -1166,6 +1221,7 @@ void PrefPaths::update(LyXRC const & rc) backupDirED->setText(toqstr(external_path(rc.backupdir_path))); tempDirED->setText(toqstr(external_path(rc.tempdir_path))); thesaurusDirED->setText(toqstr(external_path(rc.thesaurusdir_path))); + hunspellDirED->setText(toqstr(external_path(rc.hunspelldir_path))); pathPrefixED->setText(toqstr(external_path_list(rc.path_prefix))); // FIXME: should be a checkbox only lyxserverDirED->setText(toqstr(external_path(rc.lyxpipes))); @@ -1226,6 +1282,15 @@ void PrefPaths::selectThesaurusdir() } +void PrefPaths::selectHunspelldir() +{ + QString file = browseDir(internalPath(hunspellDirED->text()), + qt_("Set the path to the Hunspell dictionaries")); + if (!file.isEmpty()) + hunspellDirED->setText(file); +} + + void PrefPaths::selectLyxPipe() { QString file = form_->browse(internalPath(lyxserverDirED->text()), @@ -1246,62 +1311,59 @@ PrefSpellchecker::PrefSpellchecker(GuiPreferences * form) { setupUi(this); - connect(persDictionaryPB, SIGNAL(clicked()), this, SLOT(selectDict())); +#if defined(USE_ASPELL) + spellcheckerCB->addItem(qt_("aspell"), QString("aspell")); +#endif +#if defined(USE_ENCHANT) + spellcheckerCB->addItem(qt_("enchant"), QString("enchant")); +#endif +#if defined(USE_HUNSPELL) + spellcheckerCB->addItem(qt_("hunspell"), QString("hunspell")); +#endif - connect(altLanguageED, SIGNAL(textChanged(QString)), - this, SIGNAL(changed())); - connect(escapeCharactersED, SIGNAL(textChanged(QString)), - this, SIGNAL(changed())); - connect(persDictionaryED, SIGNAL(textChanged(QString)), - this, SIGNAL(changed())); - connect(compoundWordCB, SIGNAL(clicked()), - this, SIGNAL(changed())); - connect(inputEncodingCB, SIGNAL(clicked()), - this, SIGNAL(changed())); - connect(spellcheckContinuouslyCB, SIGNAL(clicked()), - this, SIGNAL(changed())); + if (theSpellChecker()) { + connect(spellcheckerCB, SIGNAL(currentIndexChanged(int)), + this, SIGNAL(changed())); + connect(altLanguageED, SIGNAL(textChanged(QString)), + this, SIGNAL(changed())); + connect(escapeCharactersED, SIGNAL(textChanged(QString)), + this, SIGNAL(changed())); + connect(compoundWordCB, SIGNAL(clicked()), + this, SIGNAL(changed())); + connect(spellcheckContinuouslyCB, SIGNAL(clicked()), + this, SIGNAL(changed())); + } else { + spellcheckerCB->setEnabled(false); + altLanguageED->setEnabled(false); + escapeCharactersED->setEnabled(false); + compoundWordCB->setEnabled(false); + spellcheckContinuouslyCB->setEnabled(false); + } } void PrefSpellchecker::apply(LyXRC & rc) const { - // FIXME: remove spellchecker_use_alt_lang + rc.spellchecker = fromqstr(spellcheckerCB->itemData( + spellcheckerCB->currentIndex()).toString()); rc.spellchecker_alt_lang = fromqstr(altLanguageED->text()); - rc.spellchecker_use_alt_lang = !rc.spellchecker_alt_lang.empty(); - // FIXME: remove spellchecker_use_esc_chars rc.spellchecker_esc_chars = fromqstr(escapeCharactersED->text()); - rc.spellchecker_use_esc_chars = !rc.spellchecker_esc_chars.empty(); - // FIXME: remove spellchecker_use_pers_dict - rc.spellchecker_pers_dict = internal_path(fromqstr(persDictionaryED->text())); - rc.spellchecker_use_pers_dict = !rc.spellchecker_pers_dict.empty(); rc.spellchecker_accept_compound = compoundWordCB->isChecked(); - rc.spellchecker_use_input_encoding = inputEncodingCB->isChecked(); rc.spellcheck_continuously = spellcheckContinuouslyCB->isChecked(); } void PrefSpellchecker::update(LyXRC const & rc) { - // FIXME: remove spellchecker_use_alt_lang + spellcheckerCB->setCurrentIndex( + spellcheckerCB->findData(toqstr(rc.spellchecker))); altLanguageED->setText(toqstr(rc.spellchecker_alt_lang)); - // FIXME: remove spellchecker_use_esc_chars escapeCharactersED->setText(toqstr(rc.spellchecker_esc_chars)); - // FIXME: remove spellchecker_use_pers_dict - persDictionaryED->setText(toqstr(external_path(rc.spellchecker_pers_dict))); compoundWordCB->setChecked(rc.spellchecker_accept_compound); - inputEncodingCB->setChecked(rc.spellchecker_use_input_encoding); spellcheckContinuouslyCB->setChecked(rc.spellcheck_continuously); } -void PrefSpellchecker::selectDict() -{ - QString file = form_->browsedict(internalPath(persDictionaryED->text())); - if (!file.isEmpty()) - persDictionaryED->setText(file); -} - - ///////////////////////////////////////////////////////////////////// // @@ -1348,7 +1410,7 @@ PrefConverters::PrefConverters(GuiPreferences * form) void PrefConverters::apply(LyXRC & rc) const { rc.use_converter_cache = cacheCB->isChecked(); - rc.converter_cache_maxage = int(maxAgeLE->text().toDouble() * 86400.0); + rc.converter_cache_maxage = int(widgetToDouble(maxAgeLE) * 86400.0); } @@ -1356,8 +1418,7 @@ void PrefConverters::update(LyXRC const & rc) { cacheCB->setChecked(rc.use_converter_cache); QString max_age; - max_age.setNum(double(rc.converter_cache_maxage) / 86400.0, 'g', 6); - maxAgeLE->setText(max_age); + doubleToWidget(maxAgeLE, (double(rc.converter_cache_maxage) / 86400.0), 'g', 6); updateGui(); } @@ -1632,6 +1693,10 @@ PrefFileformats::PrefFileformats(GuiPreferences * form) this, SIGNAL(changed())); connect(defaultFormatCB, SIGNAL(activated(QString)), this, SIGNAL(changed())); + connect(viewerCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); + connect(editorCO, SIGNAL(activated(int)), + this, SIGNAL(changed())); } @@ -1660,11 +1725,13 @@ void PrefFileformats::apply(LyXRC & rc) const void PrefFileformats::update(LyXRC const & rc) { + viewer_alternatives = rc.viewer_alternatives; + editor_alternatives = rc.editor_alternatives; bool const init = defaultFormatCB->currentText().isEmpty(); updateView(); if (init) { - int const pos = defaultFormatCB->findData(toqstr( - rc.default_view_format)); + int const pos = + defaultFormatCB->findData(toqstr(rc.default_view_format)); defaultFormatCB->setCurrentIndex(pos); } } @@ -1713,10 +1780,10 @@ void PrefFileformats::on_formatsCB_currentIndexChanged(int i) extensionED->setText(toqstr(f.extension())); shortcutED->setText( toqstr(l10n_shortcut(f.prettyname(), f.shortcut()))); - viewerED->setText(toqstr(f.viewer())); - editorED->setText(toqstr(f.editor())); documentCB->setChecked((f.documentFormat())); vectorCB->setChecked((f.vectorFormat())); + updateViewers(); + updateEditors(); } @@ -1813,6 +1880,91 @@ void PrefFileformats::updatePrettyname() } +namespace { + void updateComboBox(LyXRC::Alternatives const & alts, + string const & fmt, QComboBox * combo) + { + LyXRC::Alternatives::const_iterator it = + alts.find(fmt); + if (it != alts.end()) { + LyXRC::CommandSet const & cmds = it->second; + LyXRC::CommandSet::const_iterator sit = + cmds.begin(); + LyXRC::CommandSet::const_iterator const sen = + cmds.end(); + for (; sit != sen; ++sit) { + QString const qcmd = toqstr(*sit); + combo->addItem(qcmd, qcmd); + } + } + } +} + + +void PrefFileformats::updateViewers() +{ + Format const f = currentFormat(); + viewerCO->blockSignals(true); + viewerCO->clear(); + viewerCO->addItem(qt_("None"), QString()); + updateComboBox(viewer_alternatives, f.name(), viewerCO); + viewerCO->addItem(qt_("Custom"), QString("custom viewer")); + viewerCO->blockSignals(false); + + int pos = viewerCO->findData(toqstr(f.viewer())); + if (pos != -1) { + viewerED->clear(); + viewerED->setEnabled(false); + viewerCO->setCurrentIndex(pos); + } else { + viewerED->setEnabled(true); + viewerED->setText(toqstr(f.viewer())); + viewerCO->setCurrentIndex(viewerCO->findData(toqstr("custom viewer"))); + } +} + + +void PrefFileformats::updateEditors() +{ + Format const f = currentFormat(); + editorCO->blockSignals(true); + editorCO->clear(); + editorCO->addItem(qt_("None"), QString()); + updateComboBox(editor_alternatives, f.name(), editorCO); + editorCO->addItem(qt_("Custom"), QString("custom editor")); + editorCO->blockSignals(false); + + int pos = editorCO->findData(toqstr(f.editor())); + if (pos != -1) { + editorED->clear(); + editorED->setEnabled(false); + editorCO->setCurrentIndex(pos); + } else { + editorED->setEnabled(true); + editorED->setText(toqstr(f.editor())); + editorCO->setCurrentIndex(editorCO->findData(toqstr("custom editor"))); + } +} + + +void PrefFileformats::on_viewerCO_currentIndexChanged(int i) +{ + bool const custom = viewerCO->itemData(i).toString() == "custom viewer"; + viewerED->setEnabled(custom); + if (!custom) + currentFormat().setViewer(fromqstr(viewerCO->itemData(i).toString())); +} + + +void PrefFileformats::on_editorCO_currentIndexChanged(int i) +{ + bool const custom = editorCO->itemData(i).toString() == "custom editor"; + editorED->setEnabled(custom); + if (!custom) + currentFormat().setEditor(fromqstr(editorCO->itemData(i).toString())); +} + + Format & PrefFileformats::currentFormat() { int const i = formatsCB->currentIndex(); @@ -2070,6 +2222,11 @@ PrefUserInterface::PrefUserInterface(GuiPreferences * form) TextLabel1, SLOT(setEnabled(bool))); connect(openDocumentsInTabsCB, SIGNAL(clicked()), this, SIGNAL(changed())); +#if QT_VERSION < 0x040500 + singleCloseTabButtonCB->setEnabled(false); +#endif + connect(singleCloseTabButtonCB, SIGNAL(clicked()), + this, SIGNAL(changed())); connect(uiFilePB, SIGNAL(clicked()), this, SLOT(selectUi())); connect(uiFileED, SIGNAL(textChanged(QString)), @@ -2084,6 +2241,8 @@ PrefUserInterface::PrefUserInterface(GuiPreferences * form) this, SIGNAL(changed())); connect(autoSaveCB, SIGNAL(clicked()), this, SIGNAL(changed())); + connect(backupCB, SIGNAL(clicked()), + this, SIGNAL(changed())); connect(lastfilesSB, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); connect(tooltipCB, SIGNAL(toggled(bool)), @@ -2098,11 +2257,15 @@ void PrefUserInterface::apply(LyXRC & rc) const rc.use_lastfilepos = restoreCursorCB->isChecked(); rc.load_session = loadSessionCB->isChecked(); rc.allow_geometry_session = allowGeometrySessionCB->isChecked(); - rc.autosave = autoSaveSB->value() * 60; - rc.make_backup = autoSaveCB->isChecked(); + rc.autosave = autoSaveCB->isChecked()? autoSaveSB->value() * 60 : 0; + rc.make_backup = backupCB->isChecked(); rc.num_lastfiles = lastfilesSB->value(); rc.use_tooltip = tooltipCB->isChecked(); rc.open_buffers_in_tabs = openDocumentsInTabsCB->isChecked(); + rc.single_close_tab_button = singleCloseTabButtonCB->isChecked(); +#if QT_VERSION < 0x040500 + rc.single_close_tab_button = true; +#endif } @@ -2113,14 +2276,18 @@ void PrefUserInterface::update(LyXRC const & rc) loadSessionCB->setChecked(rc.load_session); allowGeometrySessionCB->setChecked(rc.allow_geometry_session); // convert to minutes - int mins(rc.autosave / 60); - if (rc.autosave && !mins) - mins = 1; + bool autosave = rc.autosave > 0; + int mins = rc.autosave / 60; + if (!mins) + mins = 5; autoSaveSB->setValue(mins); - autoSaveCB->setChecked(rc.make_backup); + autoSaveCB->setChecked(autosave); + autoSaveSB->setEnabled(autosave); + backupCB->setChecked(rc.make_backup); lastfilesSB->setValue(rc.num_lastfiles); tooltipCB->setChecked(rc.use_tooltip); openDocumentsInTabsCB->setChecked(rc.open_buffers_in_tabs); + singleCloseTabButtonCB->setChecked(rc.single_close_tab_button); } @@ -2288,8 +2455,8 @@ void PrefShortcuts::apply(LyXRC & rc) const // The good thing is that the menus are updated automatically. theTopLevelKeymap().clear(); theTopLevelKeymap().read("site"); - theTopLevelKeymap().read(rc.bind_file); - theTopLevelKeymap().read("user"); + theTopLevelKeymap().read(rc.bind_file, 0, KeyMap::Fallback); + theTopLevelKeymap().read("user", 0, KeyMap::MissingOK); } @@ -2303,7 +2470,7 @@ void PrefShortcuts::update(LyXRC const & rc) system_bind_.read("site"); system_bind_.read(rc.bind_file); // \unbind in user.bind is added to user_unbind_ - user_bind_.read("user", &user_unbind_); + user_bind_.read("user", &user_unbind_, KeyMap::MissingOK); updateShortcutsTW(); } @@ -2910,13 +3077,6 @@ QString GuiPreferences::browsekbmap(QString const & file) const } -QString GuiPreferences::browsedict(QString const & file) const -{ - return browseFile(file, qt_("Choose personal dictionary"), - QStringList(qt_("*.pws"))); -} - - QString GuiPreferences::browse(QString const & file, QString const & title) const {