#include "BufferList.h"
#include "Color.h"
+#include "ColorSet.h"
#include "ConverterCache.h"
#include "FontEnums.h"
#include "FuncRequest.h"
#include "KeySequence.h"
#include "Language.h"
#include "LyXAction.h"
+#include "LyX.h"
#include "PanelStack.h"
#include "paper.h"
#include "Session.h"
+#include "SpellChecker.h"
#include "support/debug.h"
#include "support/FileName.h"
QString const & label1 = QString(),
QString const & dir1 = QString(),
QString const & label2 = QString(),
- QString const & dir2 = QString())
+ QString const & dir2 = QString(),
+ QString const & fallback_dir = QString())
{
QString lastPath = ".";
if (!filename.isEmpty())
lastPath = onlyPath(filename);
+ else if(!fallback_dir.isEmpty())
+ lastPath = fallback_dir;
FileDialog dlg(title, LFUN_SELECT_FILE_SYNC);
dlg.setButton2(label1, dir1);
FileDialog::Result result;
if (save)
- result = dlg.save(lastPath, filters, onlyFilename(filename));
+ result = dlg.save(lastPath, filters, onlyFileName(filename));
else
- result = dlg.open(lastPath, filters, onlyFilename(filename));
+ result = dlg.open(lastPath, filters, onlyFileName(filename));
return result.second;
}
// FIXME UNICODE
QString const label1 = qt_("System files|#S#s");
QString const dir1 =
- toqstr(addName(package().system_support().absFilename(), fromqstr(dir)));
+ toqstr(addName(package().system_support().absFileName(), fromqstr(dir)));
QString const label2 = qt_("User files|#U#u");
QString const dir2 =
- toqstr(addName(package().user_support().absFilename(), fromqstr(dir)));
+ toqstr(addName(package().user_support().absFileName(), fromqstr(dir)));
QString const result = browseFile(toqstr(
- libFileSearch(dir, name, ext).absFilename()),
- title, filters, false, dir1, dir2);
+ libFileSearch(dir, name, ext).absFileName()),
+ title, filters, false, dir1, dir2, QString(), QString(), dir1);
// remove the extension if it is the default one
QString noextresult;
noextresult = result;
// remove the directory, if it is the default one
- QString const file = onlyFilename(noextresult);
- if (toqstr(libFileSearch(dir, file, ext).absFilename()) == result)
+ QString const file = onlyFileName(noextresult);
+ if (toqstr(libFileSearch(dir, file, ext).absFileName()) == result)
return file;
else
return noextresult;
dlg.setButton2(label2, dir2);
FileDialog::Result const result =
- dlg.opendir(lastPath, onlyFilename(pathname));
+ dlg.opendir(lastPath, onlyFileName(pathname));
return result.second;
}
}
-
/////////////////////////////////////////////////////////////////////
//
-// PrefPlaintext
+// StrftimeValidator
//
/////////////////////////////////////////////////////////////////////
-PrefPlaintext::PrefPlaintext(GuiPreferences * form)
- : PrefModule(qt_(catOutput), qt_("Plain text"), form)
+class StrftimeValidator : public QValidator
{
- setupUi(this);
- connect(plaintextLinelengthSB, SIGNAL(valueChanged(int)),
- this, SIGNAL(changed()));
- connect(plaintextRoffED, SIGNAL(textChanged(QString)),
- this, SIGNAL(changed()));
-}
+public:
+ StrftimeValidator(QWidget *);
+ QValidator::State validate(QString & input, int & pos) const;
+};
-void PrefPlaintext::apply(LyXRC & rc) const
+StrftimeValidator::StrftimeValidator(QWidget * parent)
+ : QValidator(parent)
{
- rc.plaintext_linelen = plaintextLinelengthSB->value();
- rc.plaintext_roff_command = fromqstr(plaintextRoffED->text());
}
-void PrefPlaintext::update(LyXRC const & rc)
+QValidator::State StrftimeValidator::validate(QString & input, int & /*pos*/) const
{
- plaintextLinelengthSB->setValue(rc.plaintext_linelen);
- plaintextRoffED->setText(toqstr(rc.plaintext_roff_command));
+ if (is_valid_strftime(fromqstr(input)))
+ return QValidator::Acceptable;
+ else
+ return QValidator::Intermediate;
}
/////////////////////////////////////////////////////////////////////
//
-// PrefDate
+// PrefOutput
//
/////////////////////////////////////////////////////////////////////
-PrefDate::PrefDate(GuiPreferences * form)
- : PrefModule(qt_(catOutput), qt_("Date format"), form)
+PrefOutput::PrefOutput(GuiPreferences * form)
+ : PrefModule(qt_(catOutput), qt_("General"), form)
{
setupUi(this);
+ DateED->setValidator(new StrftimeValidator(DateED));
connect(DateED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
+ connect(plaintextLinelengthSB, SIGNAL(valueChanged(int)),
+ this, SIGNAL(changed()));
+ connect(overwriteCO, SIGNAL(activated(int)),
+ this, SIGNAL(changed()));
+ connect(dviCB, SIGNAL(editTextChanged(QString)),
+ this, SIGNAL(changed()));
+ connect(pdfCB, SIGNAL(editTextChanged(QString)),
+ this, SIGNAL(changed()));
+ dviCB->addItem("");
+ dviCB->addItem("xdvi -sourceposition $$n:$$t $$o");
+ dviCB->addItem("yap -1 -s $$n$$t $$o");
+ dviCB->addItem("okular --unique $$o#src:$$n$$t");
+ dviCB->addItem("synctex view -i $$n:0:$$t -o $$o -x \"evince -p %{page+1} $$o\"");
+ pdfCB->addItem("");
+ pdfCB->addItem("CMCDDE SUMATRA control [ForwardSearch(\\\"$$o\\\",\\\"$$t\\\",$$n,0,0,1)]");
+ pdfCB->addItem("synctex view -i $$n:0:$$t -o $$o -x \"xpdf -raise -remote $$t.tmp $$o %{page+1}\"");
+ pdfCB->addItem("okular --unique $$o#src:$$n$$t");
+ pdfCB->addItem("synctex view -i $$n:0:$$t -o $$o -x \"evince -p %{page+1} $$o\"");
+ pdfCB->addItem("/Applications/Skim.app/Contents/SharedSupport/displayline $$n $$o $$t");
}
-void PrefDate::apply(LyXRC & rc) const
+void PrefOutput::on_DateED_textChanged(const QString &)
+{
+ QString t = DateED->text();
+ int p = 0;
+ bool valid = DateED->validator()->validate(t, p)
+ == QValidator::Acceptable;
+ setValid(DateLA, valid);
+}
+
+
+void PrefOutput::apply(LyXRC & rc) const
{
rc.date_insert_format = fromqstr(DateED->text());
+ rc.plaintext_linelen = plaintextLinelengthSB->value();
+ rc.forward_search_dvi = fromqstr(dviCB->currentText());
+ rc.forward_search_pdf = fromqstr(pdfCB->currentText());
+
+ switch (overwriteCO->currentIndex()) {
+ case 0:
+ rc.export_overwrite = NO_FILES;
+ break;
+ case 1:
+ rc.export_overwrite = MAIN_FILE;
+ break;
+ case 2:
+ rc.export_overwrite = ALL_FILES;
+ break;
+ }
}
-void PrefDate::update(LyXRC const & rc)
+void PrefOutput::update(LyXRC const & rc)
{
DateED->setText(toqstr(rc.date_insert_format));
+ plaintextLinelengthSB->setValue(rc.plaintext_linelen);
+ dviCB->setEditText(toqstr(rc.forward_search_dvi));
+ pdfCB->setEditText(toqstr(rc.forward_search_pdf));
+
+ switch (rc.export_overwrite) {
+ case NO_FILES:
+ overwriteCO->setCurrentIndex(0);
+ break;
+ case MAIN_FILE:
+ overwriteCO->setCurrentIndex(1);
+ break;
+ case ALL_FILES:
+ overwriteCO->setCurrentIndex(2);
+ break;
+ }
}
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()),
}
+void PrefCompletion::on_inlineTextCB_clicked()
+{
+ enableCB();
+}
+
+
+void PrefCompletion::on_popupTextCB_clicked()
+{
+ enableCB();
+}
+
+
+void PrefCompletion::enableCB()
+{
+ cursorTextCB->setEnabled(
+ popupTextCB->isChecked() || inlineTextCB->isChecked());
+}
+
+
void PrefCompletion::apply(LyXRC & rc) const
{
rc.completion_inline_delay = inlineDelaySB->value();
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 =
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);
+ enableCB();
}
: 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)),
this, SIGNAL(changed()));
+ connect(latexBibtexCO, SIGNAL(activated(int)),
+ this, SIGNAL(changed()));
connect(latexBibtexED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
+ connect(latexJBibtexED, SIGNAL(textChanged(QString)),
+ this, SIGNAL(changed()));
+ connect(latexIndexCO, SIGNAL(activated(int)),
+ this, SIGNAL(changed()));
connect(latexIndexED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
+ connect(latexJIndexED, SIGNAL(textChanged(QString)),
+ this, SIGNAL(changed()));
connect(latexAutoresetCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
connect(latexDviPaperED, SIGNAL(textChanged(QString)),
}
+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_("Co&mmand:"));
+ return;
+ }
+ for (LyXRC::CommandSet::const_iterator it = bibtex_alternatives.begin();
+ it != bibtex_alternatives.end(); ++it) {
+ QString const bib = toqstr(*it);
+ int ind = bib.indexOf(" ");
+ QString sel_command = bib.left(ind);
+ QString sel_options = ind < 0 ? QString() : bib.mid(ind + 1);
+ if (bibtex == sel_command) {
+ if (ind < 0)
+ latexBibtexED->clear();
+ else
+ latexBibtexED->setText(sel_options.trimmed());
+ }
+ }
+ latexBibtexOptionsLA->setText(qt_("&Options:"));
+}
+
+
+void PrefLatex::on_latexIndexCO_activated(int n)
+{
+ QString const index = latexIndexCO->itemData(n).toString();
+ if (index.isEmpty()) {
+ latexIndexED->clear();
+ latexIndexOptionsLA->setText(qt_("Co&mmand:"));
+ return;
+ }
+ for (LyXRC::CommandSet::const_iterator it = index_alternatives.begin();
+ it != index_alternatives.end(); ++it) {
+ QString const idx = toqstr(*it);
+ int ind = idx.indexOf(" ");
+ QString sel_command = idx.left(ind);
+ QString sel_options = ind < 0 ? QString() : idx.mid(ind + 1);
+ if (index == sel_command) {
+ if (ind < 0)
+ latexIndexED->clear();
+ else
+ latexIndexED->setText(sel_options.trimmed());
+ }
+ }
+ latexIndexOptionsLA->setText(qt_("Op&tions:"));
+}
+
+
void PrefLatex::apply(LyXRC & rc) const
{
- rc.fontenc = fromqstr(latexEncodingED->text());
+ // If bibtex is not empty, bibopt contains the options, otherwise
+ // it is a customized bibtex command with options.
+ QString const bibtex = latexBibtexCO->itemData(
+ latexBibtexCO->currentIndex()).toString();
+ QString const bibopt = latexBibtexED->text();
+ if (bibtex.isEmpty())
+ rc.bibtex_command = fromqstr(bibopt);
+ else if (bibopt.isEmpty())
+ rc.bibtex_command = fromqstr(bibtex);
+ else
+ rc.bibtex_command = fromqstr(bibtex) + " " + fromqstr(bibopt);
+
+ // If index is not empty, idxopt contains the options, otherwise
+ // it is a customized index command with options.
+ QString const index = latexIndexCO->itemData(
+ latexIndexCO->currentIndex()).toString();
+ QString const idxopt = latexIndexED->text();
+ if (index.isEmpty())
+ rc.index_command = fromqstr(idxopt);
+ else if (idxopt.isEmpty())
+ rc.index_command = fromqstr(index);
+ else
+ rc.index_command = fromqstr(index) + " " + fromqstr(idxopt);
+
+ if (latexEncodingCB->isChecked())
+ rc.fontenc = fromqstr(latexEncodingED->text());
+ else
+ rc.fontenc = "default";
rc.chktex_command = fromqstr(latexChecktexED->text());
- rc.bibtex_command = fromqstr(latexBibtexED->text());
- rc.index_command = fromqstr(latexIndexED->text());
+ rc.jbibtex_command = fromqstr(latexJBibtexED->text());
+ rc.jindex_command = fromqstr(latexJIndexED->text());
+ rc.nomencl_command = fromqstr(latexNomenclED->text());
rc.auto_reset_options = latexAutoresetCB->isChecked();
rc.view_dvi_paper_option = fromqstr(latexDviPaperED->text());
rc.default_papersize =
void PrefLatex::update(LyXRC const & rc)
{
- latexEncodingED->setText(toqstr(rc.fontenc));
+ latexBibtexCO->clear();
+
+ latexBibtexCO->addItem(qt_("Custom"), QString());
+ 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);
+ }
+
+ bibtex_alternatives = rc.bibtex_alternatives;
+
+ QString const bib = toqstr(rc.bibtex_command);
+ int ind = bib.indexOf(" ");
+ QString sel_command = bib.left(ind);
+ QString sel_options = ind < 0 ? QString() : bib.mid(ind + 1);
+
+ int pos = latexBibtexCO->findData(sel_command);
+ if (pos != -1) {
+ latexBibtexCO->setCurrentIndex(pos);
+ latexBibtexED->setText(sel_options.trimmed());
+ latexBibtexOptionsLA->setText(qt_("&Options:"));
+ } else {
+ latexBibtexED->setText(toqstr(rc.bibtex_command));
+ latexBibtexCO->setCurrentIndex(0);
+ latexBibtexOptionsLA->setText(qt_("Co&mmand:"));
+ }
+
+ latexIndexCO->clear();
+
+ latexIndexCO->addItem(qt_("Custom"), QString());
+ 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);
+ }
+
+ index_alternatives = rc.index_alternatives;
+
+ QString const idx = toqstr(rc.index_command);
+ ind = idx.indexOf(" ");
+ sel_command = idx.left(ind);
+ sel_options = ind < 0 ? QString() : idx.mid(ind + 1);
+
+ pos = latexIndexCO->findData(sel_command);
+ if (pos != -1) {
+ latexIndexCO->setCurrentIndex(pos);
+ latexIndexED->setText(sel_options.trimmed());
+ latexIndexOptionsLA->setText(qt_("Op&tions:"));
+ } else {
+ latexIndexED->setText(toqstr(rc.index_command));
+ latexIndexCO->setCurrentIndex(0);
+ latexIndexOptionsLA->setText(qt_("Co&mmand:"));
+ }
+
+ 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));
- latexBibtexED->setText(toqstr(rc.bibtex_command));
- latexIndexED->setText(toqstr(rc.index_command));
+ latexJBibtexED->setText(toqstr(rc.jbibtex_command));
+ latexJIndexED->setText(toqstr(rc.jindex_command));
+ latexNomenclED->setText(toqstr(rc.nomencl_command));
latexAutoresetCB->setChecked(rc.auto_reset_options);
latexDviPaperED->setText(toqstr(rc.view_dvi_paper_option));
latexPaperSizeCO->setCurrentIndex(
setupUi(this);
connect(screenRomanCO, SIGNAL(activated(QString)),
- this, SLOT(select_roman(QString)));
+ this, SLOT(selectRoman(QString)));
connect(screenSansCO, SIGNAL(activated(QString)),
- this, SLOT(select_sans(QString)));
+ this, SLOT(selectSans(QString)));
connect(screenTypewriterCO, SIGNAL(activated(QString)),
- this, SLOT(select_typewriter(QString)));
+ this, SLOT(selectTypewriter(QString)));
QFontDatabase fontdb;
QStringList families(fontdb.families());
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
setComboxFont(screenTypewriterCO, rc.typewriter_font_name,
rc.typewriter_font_foundry);
- select_roman(screenRomanCO->currentText());
- select_sans(screenSansCO->currentText());
- select_typewriter(screenTypewriterCO->currentText());
+ selectRoman(screenRomanCO->currentText());
+ selectSans(screenSansCO->currentText());
+ selectTypewriter(screenTypewriterCO->currentText());
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)
}
-void PrefScreenFonts::select_roman(const QString & name)
+void PrefScreenFonts::selectRoman(const QString & name)
{
screenRomanFE->set(QFont(name), name);
}
-void PrefScreenFonts::select_sans(const QString & name)
+void PrefScreenFonts::selectSans(const QString & name)
{
screenSansFE->set(QFont(name), name);
}
-void PrefScreenFonts::select_typewriter(const QString & name)
+void PrefScreenFonts::selectTypewriter(const QString & name)
{
screenTypewriterFE->set(QFont(name), name);
}
struct ColorSorter
{
bool operator()(ColorCode lhs, ColorCode rhs) const {
- return lcolor.getGUIName(lhs) < lcolor.getGUIName(rhs);
+ return
+ compare_no_case(lcolor.getGUIName(lhs), lcolor.getGUIName(rhs)) < 0;
}
};
|| lc == Color_magenta
|| lc == Color_yellow
|| lc == Color_inherit
- || lc == Color_ignore) continue;
+ || lc == Color_ignore
+ || lc == Color_greyedouttext
+ || lc == Color_shadedbg) continue;
lcolors_.push_back(lc);
}
vector<ColorCode>::const_iterator cit = lcolors_.begin();
vector<ColorCode>::const_iterator const end = lcolors_.end();
for (; cit != end; ++cit) {
- (void) new QListWidgetItem(QIcon(icon),
+ (void) new QListWidgetItem(QIcon(icon),
toqstr(lcolor.getGUIName(*cit)), lyxObjectsLW);
}
curcolors_.resize(lcolors_.size());
// End initialization
connect(colorChangePB, SIGNAL(clicked()),
- this, SLOT(change_color()));
+ this, SLOT(changeColor()));
connect(lyxObjectsLW, SIGNAL(itemSelectionChanged()),
- this, SLOT(change_lyxObjects_selection()));
+ this, SLOT(changeLyxObjectsSelection()));
connect(lyxObjectsLW, SIGNAL(itemActivated(QListWidgetItem*)),
- this, SLOT(change_color()));
+ this, SLOT(changeColor()));
}
lyxObjectsLW->item(i)->setIcon(QIcon(coloritem));
newcolors_[i] = curcolors_[i] = color.name();
}
- change_lyxObjects_selection();
+ changeLyxObjectsSelection();
}
-void PrefColors::change_color()
+void PrefColors::changeColor()
{
int const row = lyxObjectsLW->currentRow();
}
}
-void PrefColors::change_lyxObjects_selection()
+void PrefColors::changeLyxObjectsSelection()
{
colorChangePB->setDisabled(lyxObjectsLW->currentRow() < 0);
}
/////////////////////////////////////////////////////////////////////
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);
}
}
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
displayGraphicsCB->setChecked(rc.display_graphics);
instantPreviewCO->setEnabled(rc.display_graphics);
+ previewSizeSB->setValue(rc.preview_scale_factor);
+ paragraphMarkerCB->setChecked(rc.paragraph_markers);
}
: PrefModule(QString(), qt_("Paths"), form)
{
setupUi(this);
- connect(exampleDirPB, SIGNAL(clicked()), this, SLOT(select_exampledir()));
- 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(workingDirPB, SIGNAL(clicked()), this, SLOT(selectWorkingdir()));
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(exampleDirPB, SIGNAL(clicked()), this, SLOT(selectExampledir()));
+ connect(exampleDirED, SIGNAL(textChanged(QString)),
+ this, SIGNAL(changed()));
+
+ 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(lyxserverDirED, SIGNAL(textChanged(QString)),
+
+ connect(hunspellDirPB, SIGNAL(clicked()), this, SLOT(selectHunspelldir()));
+ connect(hunspellDirED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
+
connect(pathPrefixED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
}
rc.template_path = internal_path(fromqstr(templateDirED->text()));
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()));
templateDirED->setText(toqstr(external_path(rc.template_path)));
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)));
}
-void PrefPaths::select_exampledir()
+void PrefPaths::selectExampledir()
{
QString file = browseDir(internalPath(exampleDirED->text()),
qt_("Select directory for example files"));
}
-void PrefPaths::select_templatedir()
+void PrefPaths::selectTemplatedir()
{
QString file = browseDir(internalPath(templateDirED->text()),
qt_("Select a document templates directory"));
}
-void PrefPaths::select_tempdir()
+void PrefPaths::selectTempdir()
{
QString file = browseDir(internalPath(tempDirED->text()),
qt_("Select a temporary directory"));
}
-void PrefPaths::select_backupdir()
+void PrefPaths::selectBackupdir()
{
QString file = browseDir(internalPath(backupDirED->text()),
qt_("Select a backups directory"));
}
-void PrefPaths::select_workingdir()
+void PrefPaths::selectWorkingdir()
{
QString file = browseDir(internalPath(workingDirED->text()),
qt_("Select a document directory"));
}
-void PrefPaths::select_lyxpipe()
+void PrefPaths::selectThesaurusdir()
+{
+ QString file = browseDir(internalPath(thesaurusDirED->text()),
+ qt_("Set the path to the thesaurus dictionaries"));
+ if (!file.isEmpty())
+ thesaurusDirED->setText(file);
+}
+
+
+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()),
qt_("Give a filename for the LyX server pipe"));
{
setupUi(this);
- connect(persDictionaryPB, SIGNAL(clicked()), this, SLOT(select_dict()));
-#if defined (USE_ISPELL)
- connect(spellCommandCO, SIGNAL(activated(int)),
- this, SIGNAL(changed()));
-#else
- spellCommandCO->setEnabled(false);
+#if defined(USE_ASPELL)
+ spellcheckerCB->addItem(qt_("aspell"), QString("aspell"));
#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()));
-
- spellCommandCO->addItem(qt_("ispell"));
- spellCommandCO->addItem(qt_("aspell"));
- spellCommandCO->addItem(qt_("hspell"));
-#ifdef USE_PSPELL
- spellCommandCO->addItem(qt_("pspell (library)"));
-#else
-#ifdef USE_ASPELL
- spellCommandCO->addItem(qt_("aspell (library)"));
+#if defined(USE_ENCHANT)
+ spellcheckerCB->addItem(qt_("enchant"), QString("enchant"));
#endif
+#if defined(USE_HUNSPELL)
+ spellcheckerCB->addItem(qt_("hunspell"), QString("hunspell"));
#endif
+
+ #if defined(USE_ASPELL) || defined(USE_ENCHANT) || defined(USE_HUNSPELL)
+ 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()));
+ connect(spellcheckNotesCB, SIGNAL(clicked()),
+ this, SIGNAL(changed()));
+ #else
+ spellcheckerCB->setEnabled(false);
+ altLanguageED->setEnabled(false);
+ escapeCharactersED->setEnabled(false);
+ compoundWordCB->setEnabled(false);
+ spellcheckContinuouslyCB->setEnabled(false);
+ spellcheckNotesCB->setEnabled(false);
+ #endif
}
void PrefSpellchecker::apply(LyXRC & rc) const
{
- switch (spellCommandCO->currentIndex()) {
- 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;
- }
-
- // 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(fromqstr(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();
+ rc.spellchecker = fromqstr(spellcheckerCB->itemData(
+ spellcheckerCB->currentIndex()).toString());
+ rc.spellchecker_alt_lang = fromqstr(altLanguageED->text());
+ rc.spellchecker_esc_chars = fromqstr(escapeCharactersED->text());
+ rc.spellchecker_accept_compound = compoundWordCB->isChecked();
+ rc.spellcheck_continuously = spellcheckContinuouslyCB->isChecked();
+ rc.spellcheck_notes = spellcheckNotesCB->isChecked();
}
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
- }
-
- // 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(toqstr(external_path(rc.isp_pers_dict)));
- compoundWordCB->setChecked(rc.isp_accept_compound);
- inputEncodingCB->setChecked(rc.isp_use_input_encoding);
-}
-
-
-void PrefSpellchecker::select_dict()
-{
- QString file = form_->browsedict(internalPath(persDictionaryED->text()));
- if (!file.isEmpty())
- persDictionaryED->setText(file);
+ spellcheckerCB->setCurrentIndex(
+ spellcheckerCB->findData(toqstr(rc.spellchecker)));
+ altLanguageED->setText(toqstr(rc.spellchecker_alt_lang));
+ escapeCharactersED->setText(toqstr(rc.spellchecker_esc_chars));
+ compoundWordCB->setChecked(rc.spellchecker_accept_compound);
+ spellcheckContinuouslyCB->setChecked(rc.spellcheck_continuously);
+ spellcheckNotesCB->setChecked(rc.spellcheck_notes);
}
setupUi(this);
connect(converterNewPB, SIGNAL(clicked()),
- this, SLOT(update_converter()));
+ this, SLOT(updateConverter()));
connect(converterRemovePB, SIGNAL(clicked()),
- this, SLOT(remove_converter()));
+ this, SLOT(removeConverter()));
connect(converterModifyPB, SIGNAL(clicked()),
- this, SLOT(update_converter()));
+ this, SLOT(updateConverter()));
connect(convertersLW, SIGNAL(currentRowChanged(int)),
- this, SLOT(switch_converter()));
+ this, SLOT(switchConverter()));
connect(converterFromCO, SIGNAL(activated(QString)),
- this, SLOT(converter_changed()));
+ this, SLOT(changeConverter()));
connect(converterToCO, SIGNAL(activated(QString)),
- this, SLOT(converter_changed()));
+ this, SLOT(changeConverter()));
connect(converterED, SIGNAL(textEdited(QString)),
- this, SLOT(converter_changed()));
+ this, SLOT(changeConverter()));
connect(converterFlagED, SIGNAL(textEdited(QString)),
- this, SLOT(converter_changed()));
+ this, SLOT(changeConverter()));
connect(converterNewPB, SIGNAL(clicked()),
this, SIGNAL(changed()));
connect(converterRemovePB, SIGNAL(clicked()),
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);
}
{
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();
}
}
// currentRowChanged(int) is also triggered when updating the listwidget
- // block signals to avoid unnecessary calls to switch_converter()
+ // block signals to avoid unnecessary calls to switchConverter()
convertersLW->blockSignals(true);
convertersLW->clear();
}
-void PrefConverters::switch_converter()
+void PrefConverters::switchConverter()
{
int const cnr = convertersLW->currentItem()->type();
Converter const & c(form_->converters().get(cnr));
}
-void PrefConverters::converter_changed()
+void PrefConverters::changeConverter()
{
updateButtons();
}
void PrefConverters::updateButtons()
{
+ if (form_->formats().size() == 0)
+ return;
Format const & from = form_->formats().get(converterFromCO->currentIndex());
Format const & to = form_->formats().get(converterToCO->currentIndex());
int const sel = form_->converters().getNumber(from.name(), to.name());
// FIXME: user must
// specify unique from/to or it doesn't appear. This is really bad UI
// this is why we can use the same function for both new and modify
-void PrefConverters::update_converter()
+void PrefConverters::updateConverter()
{
Format const & from = form_->formats().get(converterFromCO->currentIndex());
Format const & to = form_->formats().get(converterToCO->currentIndex());
}
-void PrefConverters::remove_converter()
+void PrefConverters::removeConverter()
{
Format const & from = form_->formats().get(converterFromCO->currentIndex());
Format const & to = form_->formats().get(converterToCO->currentIndex());
this, SLOT(updatePrettyname()));
connect(formatsCB->lineEdit(), SIGNAL(textEdited(QString)),
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()));
}
}; // namespace anon
-void PrefFileformats::apply(LyXRC & /*rc*/) const
+void PrefFileformats::apply(LyXRC & rc) const
{
+ QString const default_format = defaultFormatCB->itemData(
+ defaultFormatCB->currentIndex()).toString();
+ rc.default_view_format = fromqstr(default_format);
}
-void PrefFileformats::update(LyXRC const & /*rc*/)
+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));
+ defaultFormatCB->setCurrentIndex(pos);
+ }
}
void PrefFileformats::updateView()
{
QString const current = formatsCB->currentText();
+ QString const current_def = defaultFormatCB->currentText();
- // update combobox with formats
+ // update comboboxes with formats
formatsCB->blockSignals(true);
+ defaultFormatCB->blockSignals(true);
formatsCB->clear();
+ defaultFormatCB->clear();
form_->formats().sort();
Formats::const_iterator cit = form_->formats().begin();
Formats::const_iterator end = form_->formats().end();
- for (; cit != end; ++cit)
+ for (; cit != end; ++cit) {
formatsCB->addItem(qt_(cit->prettyname()),
- QVariant(form_->formats().getNumber(cit->name())));
+ QVariant(form_->formats().getNumber(cit->name())));
+ if (form_->converters().isReachable("latex", cit->name())
+ || form_->converters().isReachable("pdflatex", cit->name()))
+ defaultFormatCB->addItem(qt_(cit->prettyname()),
+ QVariant(toqstr(cit->name())));
+ }
// restore selection
- int const item = formatsCB->findText(current, Qt::MatchExactly);
+ int item = formatsCB->findText(current, Qt::MatchExactly);
formatsCB->setCurrentIndex(item < 0 ? 0 : item);
on_formatsCB_currentIndexChanged(item < 0 ? 0 : item);
+ item = defaultFormatCB->findText(current_def, Qt::MatchExactly);
+ defaultFormatCB->setCurrentIndex(item < 0 ? 0 : item);
formatsCB->blockSignals(false);
+ defaultFormatCB->blockSignals(false);
}
void PrefFileformats::on_formatsCB_currentIndexChanged(int i)
{
+ if (form_->formats().size() == 0)
+ return;
int const nr = formatsCB->itemData(i).toInt();
Format const f = form_->formats().get(nr);
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();
}
}
+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();
this, SIGNAL(changed()));
connect(endCommandED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
- connect(defaultLanguageCO, SIGNAL(activated(int)),
- this, SIGNAL(changed()));
connect(uiLanguageCO, SIGNAL(activated(int)),
this, SIGNAL(changed()));
+ connect(defaultDecimalPointLE, SIGNAL(textChanged(QString)),
+ this, SIGNAL(changed()));
- defaultLanguageCO->clear();
uiLanguageCO->clear();
QAbstractItemModel * language_model = guiApp->languageModel();
// FIXME: it would be nice if sorting was enabled/disabled via a checkbox.
language_model->sort(0);
- defaultLanguageCO->setModel(language_model);
// FIXME: This is wrong, we need filter this list based on the available
// translation.
rc.language_package = fromqstr(languagePackageED->text());
rc.language_command_begin = fromqstr(startCommandED->text());
rc.language_command_end = fromqstr(endCommandED->text());
- rc.default_language = fromqstr(
- defaultLanguageCO->itemData(defaultLanguageCO->currentIndex()).toString());
rc.gui_language = fromqstr(
uiLanguageCO->itemData(uiLanguageCO->currentIndex()).toString());
+ rc.default_decimal_point = fromqstr(defaultDecimalPointLE->text());
}
languagePackageED->setText(toqstr(rc.language_package));
startCommandED->setText(toqstr(rc.language_command_begin));
endCommandED->setText(toqstr(rc.language_command_end));
+ defaultDecimalPointLE->setText(toqstr(rc.default_decimal_point));
- int pos = defaultLanguageCO->findData(toqstr(rc.default_language));
- defaultLanguageCO->setCurrentIndex(pos);
- pos = uiLanguageCO->findData(toqstr(rc.gui_language));
+ int pos = uiLanguageCO->findData(toqstr(rc.gui_language));
uiLanguageCO->blockSignals(true);
uiLanguageCO->setCurrentIndex(pos);
uiLanguageCO->blockSignals(false);
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(select_ui()));
+ this, SLOT(selectUi()));
connect(uiFileED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
connect(restoreCursorCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
connect(autoSaveCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
+ connect(backupCB, SIGNAL(clicked()),
+ this, SIGNAL(changed()));
+ connect(saveCompressedCB, SIGNAL(clicked()),
+ this, SIGNAL(changed()));
connect(lastfilesSB, SIGNAL(valueChanged(int)),
this, SIGNAL(changed()));
connect(tooltipCB, SIGNAL(toggled(bool)),
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.save_compressed = saveCompressedCB->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
}
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);
+ saveCompressedCB->setChecked(rc.save_compressed);
lastfilesSB->setValue(rc.num_lastfiles);
tooltipCB->setChecked(rc.use_tooltip);
openDocumentsInTabsCB->setChecked(rc.open_buffers_in_tabs);
+ singleCloseTabButtonCB->setChecked(rc.single_close_tab_button);
}
-void PrefUserInterface::select_ui()
+void PrefUserInterface::selectUi()
{
QString file = form_->browseUI(internalPath(uiFileED->text()));
if (!file.isEmpty())
}
+void PrefUserInterface::on_clearSessionPB_clicked()
+{
+ guiApp->clearSession();
+}
+
+
+
/////////////////////////////////////////////////////////////////////
//
// PrefEdit
connect(cursorFollowsCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
+ connect(scrollBelowCB, SIGNAL(clicked()),
+ this, SIGNAL(changed()));
connect(sortEnvironmentsCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
connect(groupEnvironmentsCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
connect(toggleTabbarCB, SIGNAL(toggled(bool)),
this, SIGNAL(changed()));
+ connect(toggleMenubarCB, SIGNAL(toggled(bool)),
+ this, SIGNAL(changed()));
connect(toggleScrollbarCB, SIGNAL(toggled(bool)),
this, SIGNAL(changed()));
connect(toggleToolbarsCB, SIGNAL(toggled(bool)),
void PrefEdit::apply(LyXRC & rc) const
{
rc.cursor_follows_scrollbar = cursorFollowsCB->isChecked();
+ rc.scroll_below_document = scrollBelowCB->isChecked();
rc.sort_layouts = sortEnvironmentsCB->isChecked();
rc.group_layouts = groupEnvironmentsCB->isChecked();
switch (macroEditStyleCO->currentIndex()) {
rc.full_screen_toolbars = toggleToolbarsCB->isChecked();
rc.full_screen_scrollbar = toggleScrollbarCB->isChecked();
rc.full_screen_tabbar = toggleTabbarCB->isChecked();
+ rc.full_screen_menubar = toggleMenubarCB->isChecked();
rc.full_screen_width = fullscreenWidthSB->value();
rc.full_screen_limit = fullscreenLimitGB->isChecked();
}
void PrefEdit::update(LyXRC const & rc)
{
cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar);
+ scrollBelowCB->setChecked(rc.scroll_below_document);
sortEnvironmentsCB->setChecked(rc.sort_layouts);
groupEnvironmentsCB->setChecked(rc.group_layouts);
macroEditStyleCO->setCurrentIndex(rc.macro_edit_style);
toggleScrollbarCB->setChecked(rc.full_screen_scrollbar);
toggleToolbarsCB->setChecked(rc.full_screen_toolbars);
toggleTabbarCB->setChecked(rc.full_screen_tabbar);
+ toggleMenubarCB->setChecked(rc.full_screen_menubar);
fullscreenWidthSB->setValue(rc.full_screen_width);
fullscreenLimitGB->setChecked(rc.full_screen_limit);
}
// shortcutsTW->setSelectionMode(QAbstractItemView::MultiSelection);
connect(bindFilePB, SIGNAL(clicked()),
- this, SLOT(select_bind()));
+ this, SLOT(selectBind()));
connect(bindFileED, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
- connect(removePB, SIGNAL(clicked()),
- this, SIGNAL(changed()));
shortcut_ = new GuiShortcutDialog(this);
shortcut_bc_.setPolicy(ButtonPolicy::OkCancelPolicy);
connect(shortcut_->cancelPB, SIGNAL(clicked()),
shortcut_, SLOT(reject()));
connect(shortcut_->clearPB, SIGNAL(clicked()),
- this, SLOT(shortcut_clearPB_pressed()));
+ this, SLOT(shortcutClearPressed()));
+ connect(shortcut_->removePB, SIGNAL(clicked()),
+ this, SLOT(shortcutRemovePressed()));
connect(shortcut_->okPB, SIGNAL(clicked()),
- this, SLOT(shortcut_okPB_pressed()));
+ this, SLOT(shortcutOkPressed()));
+ connect(shortcut_->cancelPB, SIGNAL(clicked()),
+ this, SLOT(shortcutCancelPressed()));
}
{
rc.bind_file = internal_path(fromqstr(bindFileED->text()));
// write user_bind and user_unbind to .lyx/bind/user.bind
- FileName bind_dir(addPath(package().user_support().absFilename(), "bind"));
+ FileName bind_dir(addPath(package().user_support().absFileName(), "bind"));
if (!bind_dir.exists() && !bind_dir.createDirectory(0777)) {
lyxerr << "LyX could not create the user bind directory '"
<< bind_dir << "'. All user-defined key bindings will be lost." << endl;
<< bind_dir << "'. All user-defined key bindings will be lost." << endl;
return;
}
- FileName user_bind_file(bind_dir.absFilename() + "/user.bind");
- user_bind_.write(user_bind_file.toFilesystemEncoding(), false, false);
- user_unbind_.write(user_bind_file.toFilesystemEncoding(), true, true);
+ FileName user_bind_file(bind_dir.absFileName() + "/user.bind");
+ user_unbind_.write(user_bind_file.toFilesystemEncoding(), false, true);
+ user_bind_.write(user_bind_file.toFilesystemEncoding(), true, false);
// immediately apply the keybindings. Why this is not done before?
// 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);
}
system_bind_.clear();
user_bind_.clear();
user_unbind_.clear();
+ 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();
}
// listBindings(unbound=true) lists all bound and unbound lfuns
// Items in this list is tagged by its source.
KeyMap::BindingList bindinglist = system_bind_.listBindings(true,
- static_cast<int>(System));
+ KeyMap::System);
KeyMap::BindingList user_bindinglist = user_bind_.listBindings(false,
- static_cast<int>(UserBind));
+ KeyMap::UserBind);
KeyMap::BindingList user_unbindinglist = user_unbind_.listBindings(false,
- static_cast<int>(UserUnbind));
+ KeyMap::UserUnbind);
bindinglist.insert(bindinglist.end(), user_bindinglist.begin(),
user_bindinglist.end());
bindinglist.insert(bindinglist.end(), user_unbindinglist.begin(),
KeyMap::BindingList::const_iterator it = bindinglist.begin();
KeyMap::BindingList::const_iterator it_end = bindinglist.end();
for (; it != it_end; ++it)
- insertShortcutItem(it->request, it->sequence, ItemType(it->tag));
+ insertShortcutItem(it->request, it->sequence, KeyMap::ItemType(it->tag));
shortcutsTW->sortItems(0, Qt::AscendingOrder);
QList<QTreeWidgetItem*> items = shortcutsTW->selectedItems();
}
-void PrefShortcuts::setItemType(QTreeWidgetItem * item, ItemType tag)
+void PrefShortcuts::setItemType(QTreeWidgetItem * item, KeyMap::ItemType tag)
{
item->setData(0, Qt::UserRole, QVariant(tag));
QFont font;
switch (tag) {
- case System:
+ case KeyMap::System:
break;
- case UserBind:
+ case KeyMap::UserBind:
font.setBold(true);
break;
- case UserUnbind:
+ case KeyMap::UserUnbind:
font.setStrikeOut(true);
break;
// this item is not displayed now.
- case UserExtraUnbind:
+ case KeyMap::UserExtraUnbind:
font.setStrikeOut(true);
break;
}
QTreeWidgetItem * PrefShortcuts::insertShortcutItem(FuncRequest const & lfun,
- KeySequence const & seq, ItemType tag)
+ KeySequence const & seq, KeyMap::ItemType tag)
{
- FuncCode action = lfun.action;
+ FuncCode const action = lfun.action();
string const action_name = lyxaction.getActionName(action);
QString const lfun_name = toqstr(from_utf8(action_name)
+ ' ' + lfun.argument());
QString const shortcut = toqstr(seq.print(KeySequence::ForGui));
- ItemType item_tag = tag;
+ KeyMap::ItemType item_tag = tag;
QTreeWidgetItem * newItem = 0;
// for unbind items, try to find an existing item in the system bind list
- if (tag == UserUnbind) {
+ if (tag == KeyMap::UserUnbind) {
QList<QTreeWidgetItem*> const items = shortcutsTW->findItems(lfun_name,
Qt::MatchFlags(Qt::MatchExactly | Qt::MatchRecursive), 0);
for (int i = 0; i < items.size(); ++i) {
newItem = items[i];
break;
}
- // if not found, this unbind item is UserExtraUnbind
+ // if not found, this unbind item is KeyMap::UserExtraUnbind
// Such an item is not displayed to avoid confusion (what is
// unmatched removed?).
if (!newItem) {
- item_tag = UserExtraUnbind;
+ item_tag = KeyMap::UserExtraUnbind;
return 0;
}
}
if (items.isEmpty())
return;
- ItemType tag = static_cast<ItemType>(items[0]->data(0, Qt::UserRole).toInt());
- if (tag == UserUnbind)
+ KeyMap::ItemType tag =
+ static_cast<KeyMap::ItemType>(items[0]->data(0, Qt::UserRole).toInt());
+ if (tag == KeyMap::UserUnbind)
removePB->setText(qt_("Res&tore"));
else
removePB->setText(qt_("Remo&ve"));
QTreeWidgetItem * item = shortcutsTW->currentItem();
if (item->flags() & Qt::ItemIsSelectable) {
shortcut_->lfunLE->setText(item->text(0));
- shortcut_->shortcutLE->setText(item->text(1));
- shortcut_->shortcutLE->setFocus();
+ save_lfun_ = item->text(0).trimmed();
+ shortcut_->shortcutWG->setText(item->text(1));
+ KeySequence seq;
+ seq.parse(fromqstr(item->data(1, Qt::UserRole).toString()));
+ shortcut_->shortcutWG->setKeySequence(seq);
+ shortcut_->shortcutWG->setFocus();
shortcut_->exec();
}
}
-void PrefShortcuts::select_bind()
-{
- QString file = form_->browsebind(internalPath(bindFileED->text()));
- if (!file.isEmpty()) {
- bindFileED->setText(file);
- system_bind_ = KeyMap();
- system_bind_.read(fromqstr(file));
- updateShortcutsTW();
- }
-}
-
-
-void PrefShortcuts::on_modifyPB_pressed()
-{
- modifyShortcut();
-}
-
-
-void PrefShortcuts::on_newPB_pressed()
-{
- shortcut_->lfunLE->clear();
- shortcut_->shortcutLE->reset();
- shortcut_->exec();
-}
-
-
-void PrefShortcuts::on_removePB_pressed()
+void PrefShortcuts::removeShortcut()
{
// it seems that only one item can be selected, but I am
// removing all selected items anyway.
string shortcut = fromqstr(items[i]->data(1, Qt::UserRole).toString());
string lfun = fromqstr(items[i]->text(0));
FuncRequest func = lyxaction.lookupFunc(lfun);
- ItemType tag = static_cast<ItemType>(items[i]->data(0, Qt::UserRole).toInt());
+ KeyMap::ItemType tag =
+ static_cast<KeyMap::ItemType>(items[i]->data(0, Qt::UserRole).toInt());
switch (tag) {
- case System: {
+ case KeyMap::System: {
// for system bind, we do not touch the item
// but add an user unbind item
user_unbind_.bind(shortcut, func);
- setItemType(items[i], UserUnbind);
+ setItemType(items[i], KeyMap::UserUnbind);
removePB->setText(qt_("Res&tore"));
break;
}
- case UserBind: {
+ case KeyMap::UserBind: {
// for user_bind, we remove this bind
QTreeWidgetItem * parent = items[i]->parent();
int itemIdx = parent->indexOfChild(items[i]);
user_bind_.unbind(shortcut, func);
break;
}
- case UserUnbind: {
+ case KeyMap::UserUnbind: {
// for user_unbind, we remove the unbind, and the item
- // become System again.
+ // become KeyMap::System again.
user_unbind_.unbind(shortcut, func);
- setItemType(items[i], System);
+ setItemType(items[i], KeyMap::System);
removePB->setText(qt_("Remo&ve"));
break;
}
- case UserExtraUnbind: {
+ case KeyMap::UserExtraUnbind: {
// for user unbind that is not in system bind file,
// remove this unbind file
QTreeWidgetItem * parent = items[i]->parent();
}
+void PrefShortcuts::selectBind()
+{
+ QString file = form_->browsebind(internalPath(bindFileED->text()));
+ if (!file.isEmpty()) {
+ bindFileED->setText(file);
+ system_bind_ = KeyMap();
+ system_bind_.read(fromqstr(file));
+ updateShortcutsTW();
+ }
+}
+
+
+void PrefShortcuts::on_modifyPB_pressed()
+{
+ modifyShortcut();
+}
+
+
+void PrefShortcuts::on_newPB_pressed()
+{
+ shortcut_->lfunLE->clear();
+ shortcut_->shortcutWG->reset();
+ save_lfun_ = QString();
+ shortcut_->exec();
+}
+
+
+void PrefShortcuts::on_removePB_pressed()
+{
+ changed();
+ removeShortcut();
+}
+
+
void PrefShortcuts::on_searchLE_textEdited()
{
if (searchLE->text().isEmpty()) {
}
-void PrefShortcuts::shortcut_okPB_pressed()
+docstring makeCmdString(FuncRequest const & f)
{
- string lfun = fromqstr(shortcut_->lfunLE->text());
- FuncRequest func = lyxaction.lookupFunc(lfun);
+ docstring actionStr = from_ascii(lyxaction.getActionName(f.action()));
+ if (!f.argument().empty())
+ actionStr += " " + f.argument();
+ return actionStr;
+}
+
- if (func.action == LFUN_UNKNOWN_ACTION) {
+void PrefShortcuts::shortcutOkPressed()
+{
+ QString const new_lfun = shortcut_->lfunLE->text();
+ FuncRequest func = lyxaction.lookupFunc(fromqstr(new_lfun));
+
+ if (func.action() == LFUN_UNKNOWN_ACTION) {
Alert::error(_("Failed to create shortcut"),
_("Unknown or invalid LyX function"));
return;
}
- KeySequence k = shortcut_->shortcutLE->getKeySequence();
+ KeySequence k = shortcut_->shortcutWG->getKeySequence();
if (k.length() == 0) {
Alert::error(_("Failed to create shortcut"),
_("Invalid or empty key sequence"));
return;
}
- // if both lfun and shortcut is valid
- if (user_bind_.hasBinding(k, func) || system_bind_.hasBinding(k, func)) {
+ // check to see if there's been any change
+ FuncRequest oldBinding = system_bind_.getBinding(k);
+ if (oldBinding.action() == LFUN_UNKNOWN_ACTION)
+ oldBinding = user_bind_.getBinding(k);
+ if (oldBinding == func)
+ // nothing has changed
+ return;
+
+ // make sure this key isn't already bound---and, if so, not unbound
+ FuncCode const unbind = user_unbind_.getBinding(k).action();
+ docstring const action_string = makeCmdString(oldBinding);
+ if (oldBinding.action() > LFUN_NOACTION && unbind == LFUN_UNKNOWN_ACTION
+ && save_lfun_ != toqstr(action_string)) {
+ // FIXME Perhaps we should offer to over-write the old shortcut?
+ // If so, we'll need to remove it from our list, etc.
Alert::error(_("Failed to create shortcut"),
- _("Shortcut is already defined"));
+ bformat(_("Shortcut `%1$s' is already bound to:\n%2$s\n"
+ "You need to remove that binding before creating a new one."),
+ k.print(KeySequence::ForGui), action_string));
return;
}
- QTreeWidgetItem * item = insertShortcutItem(func, k, UserBind);
+ if (!save_lfun_.isEmpty())
+ // real modification of the lfun's shortcut,
+ // so remove the previous one
+ removeShortcut();
+
+ QTreeWidgetItem * item = insertShortcutItem(func, k, KeyMap::UserBind);
if (item) {
user_bind_.bind(&k, func);
shortcutsTW->sortItems(0, Qt::AscendingOrder);
}
-void PrefShortcuts::shortcut_clearPB_pressed()
+void PrefShortcuts::shortcutCancelPressed()
{
- shortcut_->shortcutLE->reset();
- shortcut_->shortcutLE->setFocus();
+ shortcut_->shortcutWG->reset();
+}
+
+
+void PrefShortcuts::shortcutClearPressed()
+{
+ shortcut_->shortcutWG->reset();
+}
+
+
+void PrefShortcuts::shortcutRemovePressed()
+{
+ shortcut_->shortcutWG->removeFromSequence();
}
addModule(new PrefLanguage(this));
addModule(new PrefSpellchecker(this));
+ //for strftime validator
+ PrefOutput * output = new PrefOutput(this);
+ addModule(output);
addModule(new PrefPrinter(this));
- addModule(new PrefDate(this));
- addModule(new PrefPlaintext(this));
addModule(new PrefLatex(this));
PrefConverters * converters = new PrefConverters(this);
bc().setApply(applyPB);
bc().setCancel(closePB);
bc().setRestore(restorePB);
+
+ // initialize the strftime validator
+ bc().addCheckedLineEdit(output->DateED);
}
void GuiPreferences::addModule(PrefModule * module)
{
- LASSERT(module, /**/);
+ LASSERT(module, return);
if (module->category().isEmpty())
prefsPS->addPanel(module, module->title());
else
apply(rc());
}
-
-void GuiPreferences::updateContents()
-{
- updateRc(rc());
-}
-
-
bool GuiPreferences::initialiseParams(string const &)
{
rc_ = lyxrc;
movers_ = theMovers();
colors_.clear();
update_screen_font_ = false;
+
+ updateRc(rc_);
+ // Make sure that the bc is in the INITIAL state
+ if (bc().policy().buttonStatus(ButtonPolicy::RESTORE))
+ bc().restore();
return true;
}
}
-QString GuiPreferences::browsedict(QString const & file) const
-{
- return browseFile(file, qt_("Choose personal dictionary"),
- QStringList(lyxrc.use_spell_lib ? qt_("*.pws") : qt_("*.ispell")));
-}
-
-
QString GuiPreferences::browse(QString const & file,
- QString const & title) const
+ QString const & title) const
{
return browseFile(file, title, QStringList(), true);
}
} // namespace frontend
} // namespace lyx
-#include "GuiPrefs_moc.cpp"
+#include "moc_GuiPrefs.cpp"