QMap<QString, QString> ttfonts_;
QMap<QString, QString> mathfonts_;
+enum EncodingSets {
+ unicode = 0,
+ legacy = 1,
+ custom = 2
+};
} // anonymous namespace
// initialize the length validator
bc().addCheckedLineEdit(textLayoutModule->indentLE);
bc().addCheckedLineEdit(textLayoutModule->skipLE);
-
+
textLayoutModule->tableStyleCO->addItem(qt_("Default"), toqstr("default"));
getTableStyles();
this, SLOT(change_adaptor()));
connect(langModule->languageCO, SIGNAL(activated(int)),
this, SLOT(languageChanged(int)));
- connect(langModule->defaultencodingRB, SIGNAL(clicked()),
- this, SLOT(change_adaptor()));
- connect(langModule->otherencodingRB, SIGNAL(clicked()),
+ connect(langModule->encodingCO, SIGNAL(activated(int)),
this, SLOT(change_adaptor()));
connect(langModule->encodingCO, SIGNAL(activated(int)),
+ this, SLOT(encodingSwitched(int)));
+ connect(langModule->unicodeEncodingCO, SIGNAL(activated(int)),
+ this, SLOT(change_adaptor()));
+ connect(langModule->customEncodingCO, SIGNAL(activated(int)),
+ this, SLOT(change_adaptor()));
+ connect(langModule->noInputencCB, SIGNAL(clicked()),
this, SLOT(change_adaptor()));
connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
this, SLOT(change_adaptor()));
langModule->languageCO->setModel(language_model);
langModule->languageCO->setModelColumn(0);
- // Always put the default encoding in the first position.
- langModule->encodingCO->addItem(qt_("Language Default (no inputenc)"));
- QStringList encodinglist;
+ langModule->encodingCO->addItem(qt_("Unicode (utf8)"));
+ langModule->encodingCO->addItem(qt_("Traditional (auto-selected)"));
+ langModule->encodingCO->addItem(qt_("Custom"));
+ langModule->encodingCO->setItemData(EncodingSets::unicode,
+ "Use Unicode (utf8) for the latex source.", Qt::ToolTipRole);
+ langModule->encodingCO->setItemData(EncodingSets::legacy,
+ "Use legacy default encodings depending on text language.", Qt::ToolTipRole);
+ langModule->encodingCO->setItemData(EncodingSets::custom,
+ "Select a custom, document-wide encoding.", Qt::ToolTipRole);
+
+ QMap<QString,QString> encodingmap_utf8;
+ for (auto const & encvar : encodings) {
+ if (!encvar.unsafe() && !encvar.guiName().empty()
+ && std::string(encvar.name()).find("utf8") == 0)
+ encodingmap_utf8.insert(qt_(encvar.guiName()), qt_(encvar.name()));
+ }
+ QMap<QString, QString>::const_iterator it8 = encodingmap_utf8.constBegin();
+ while (it8 != encodingmap_utf8.constEnd()) {
+ langModule->unicodeEncodingCO->addItem(it8.key(), it8.value());
+ ++it8;
+ }
+
+ QMap<QString,QString> encodingmap;
for (auto const & encvar : encodings) {
- if (!encvar.unsafe() && !encvar.guiName().empty())
- encodinglist.append(qt_(encvar.guiName()));
+ if (!encvar.unsafe() && !encvar.guiName().empty()
+ && std::string(encvar.name()).find("utf8") != 0)
+ encodingmap.insert(qt_(encvar.guiName()), qt_(encvar.name()));
+ }
+ QMap<QString, QString>::const_iterator it = encodingmap.constBegin();
+ while (it != encodingmap.constEnd()) {
+ langModule->customEncodingCO->addItem(it.key(), it.value());
+ ++it;
}
- encodinglist.sort();
- langModule->encodingCO->addItems(encodinglist);
+ // equalise the width of encoding selectors
+ langModule->unicodeEncodingCO->setMinimumSize(
+ langModule->customEncodingCO->minimumSizeHint());
+ langModule->noInputencCB->setMinimumSize(
+ langModule->customEncodingCO->minimumSizeHint());
langModule->languagePackageCO->addItem(
qt_("Default"), toqstr("default"));
numberingModule->tocTW->headerItem()->setText(1, qt_("Numbered"));
numberingModule->tocTW->headerItem()->setText(2, qt_("Appears in TOC"));
setSectionResizeMode(numberingModule->tocTW->header(), QHeaderView::ResizeToContents);
+ connect(numberingModule->linenoCB, SIGNAL(toggled(bool)),
+ this, SLOT(linenoToggled(bool)));
+ connect(numberingModule->linenoCB, SIGNAL(clicked()),
+ this, SLOT(change_adaptor()));
+ connect(numberingModule->linenoLE, SIGNAL(textChanged(QString)),
+ this, SLOT(change_adaptor()));
+
// biblio
biblioModule = new UiWidget<Ui::BiblioUi>(this);
// some languages only work with Polyglossia
Language const * lang = lyx::languages.getLanguage(
fromqstr(langModule->languageCO->itemData(i).toString()));
- if (lang->babel().empty() && !lang->polyglossia().empty()) {
+ if (lang->babel().empty() && !lang->polyglossia().empty()
+ && lang->requires() != "CJK" && lang->requires() != "japanese") {
// If we force to switch fontspec on, store
// current state (#8717)
if (fontModule->osFontsCB->isEnabled())
fontModule->font_sf_scale = font_sf_scale;
fontModule->font_tt_scale = font_tt_scale;
- langModule->encodingCO->setEnabled(tex_fonts &&
- !langModule->defaultencodingRB->isChecked());
- langModule->defaultencodingRB->setEnabled(tex_fonts);
- langModule->otherencodingRB->setEnabled(tex_fonts);
+ // non-tex fonts override the "\inputencoding" option with "utf8-plain"
+ langModule->encodingCO->setEnabled(tex_fonts);
+ inputencodingToDialog();
fontModule->fontsDefaultCO->setEnabled(tex_fonts);
fontModule->fontsDefaultLA->setEnabled(tex_fonts);
}
+void GuiDocument::encodingSwitched(int i)
+{
+ bool const tex_fonts = !fontModule->osFontsCB->isChecked();
+ langModule->unicodeEncodingCO->setEnabled(tex_fonts);
+ langModule->customEncodingCO->setEnabled(tex_fonts);
+ langModule->noInputencCB->setEnabled(tex_fonts);
+ langModule->unicodeEncodingCO->setVisible(i == EncodingSets::unicode);
+ langModule->noInputencCB->setVisible(i == EncodingSets::legacy);
+ langModule->customEncodingCO->setVisible(i == EncodingSets::custom);
+}
+
+void GuiDocument::inputencodingToDialog()
+{
+ QString inputenc = toqstr(bp_.inputenc);
+ int p;
+ if (fontModule->osFontsCB->isChecked()) { // non-tex fonts require utf8-plain
+ langModule->encodingCO->setCurrentIndex(EncodingSets::unicode);
+ langModule->unicodeEncodingCO->setCurrentIndex(
+ langModule->unicodeEncodingCO->findData("utf8-plain"));
+ } else if (inputenc.startsWith("utf8")) {
+ langModule->encodingCO->setCurrentIndex(EncodingSets::unicode);
+ p = langModule->unicodeEncodingCO->findData(inputenc);
+ if (p != -1)
+ langModule->unicodeEncodingCO->setCurrentIndex(p);
+ } else if (inputenc.startsWith("auto")) {
+ langModule->encodingCO->setCurrentIndex(EncodingSets::legacy);
+ langModule->noInputencCB->setChecked(inputenc == "auto-legacy-plain");
+ } else {
+ langModule->encodingCO->setCurrentIndex(EncodingSets::custom);
+ p = langModule->customEncodingCO->findData(inputenc);
+ if (p != -1)
+ langModule->customEncodingCO->setCurrentIndex(p);
+ else
+ langModule->encodingCO->setCurrentIndex(EncodingSets::unicode);
+ }
+ encodingSwitched(langModule->encodingCO->currentIndex());
+}
+
+
void GuiDocument::mathFontChanged(int)
{
updateFontOptions();
}
-
void GuiDocument::fontOsfToggled(bool state)
{
if (fontModule->osFontsCB->isChecked())
indicesModule->apply(bp_);
// language & quotes
- if (langModule->defaultencodingRB->isChecked()) {
- bp_.inputenc = "auto-legacy";
- } else {
- int i = langModule->encodingCO->currentIndex();
- if (i == 0)
- bp_.inputenc = "auto-legacy-plain";
- else {
- QString const enc_gui =
- langModule->encodingCO->currentText();
- Encodings::const_iterator it = encodings.begin();
- Encodings::const_iterator const end = encodings.end();
- bool found = false;
- for (; it != end; ++it) {
- if (qt_(it->guiName()) == enc_gui &&
- !it->unsafe()) {
- bp_.inputenc = it->name();
- found = true;
- break;
- }
- }
- if (!found) {
- // should not happen
- lyxerr << "GuiDocument::apply: Unknown encoding! Resetting to utf8" << endl;
- bp_.inputenc = "utf8";
- }
+ switch (langModule->encodingCO->currentIndex()) {
+ case EncodingSets::unicode: {
+ bp_.inputenc = fromqstr(langModule->unicodeEncodingCO->itemData(
+ langModule->unicodeEncodingCO->currentIndex()).toString());
+ break;
+ }
+ case EncodingSets::legacy: {
+ bp_.inputenc = "auto-legacy";
+ if (langModule->noInputencCB->isChecked())
+ bp_.inputenc = "auto-legacy-plain";
+ break;
+ }
+ case EncodingSets::custom: {
+ bp_.inputenc = fromqstr(langModule->customEncodingCO->itemData(
+ langModule->customEncodingCO->currentIndex()).toString());
+ break;
}
+ default:
+ // this should never happen
+ bp_.inputenc = "utf8";
}
-
bp_.quotes_style = (InsetQuotesParams::QuoteStyle) langModule->quoteStyleCO->itemData(
langModule->quoteStyleCO->currentIndex()).toInt();
bp_.dynamic_quotes = langModule->dynamicQuotesCB->isChecked();
bp_.tocdepth = numberingModule->tocSL->value();
bp_.secnumdepth = numberingModule->depthSL->value();
}
+ bp_.use_lineno = numberingModule->linenoCB->isChecked();
+ bp_.lineno_opts = fromqstr(numberingModule->linenoLE->text());
// bullets
bp_.user_defined_bullet(0) = bulletsModule->bullet(0);
langModule->quoteStyleCO->findData(bp_.quotes_style));
langModule->dynamicQuotesCB->setChecked(bp_.dynamic_quotes);
- bool default_enc = true;
- if (bp_.inputenc != "auto-legacy") {
- default_enc = false;
- if (bp_.inputenc == "auto-legacy-plain") {
- langModule->encodingCO->setCurrentIndex(0);
- } else {
- string enc_gui;
- Encodings::const_iterator it = encodings.begin();
- Encodings::const_iterator const end = encodings.end();
- for (; it != end; ++it) {
- if (it->name() == bp_.inputenc &&
- !it->unsafe()) {
- enc_gui = it->guiName();
- break;
- }
- }
- int const i = langModule->encodingCO->findText(
- qt_(enc_gui));
- if (i >= 0)
- langModule->encodingCO->setCurrentIndex(i);
- else
- // unknown encoding. Set to default.
- default_enc = true;
- }
- }
- langModule->defaultencodingRB->setChecked(default_enc);
- langModule->otherencodingRB->setChecked(!default_enc);
+ // LaTeX input encoding: set after the fonts (see below)
- int const p = langModule->languagePackageCO->findData(toqstr(bp_.lang_package));
+ int p = langModule->languagePackageCO->findData(toqstr(bp_.lang_package));
if (p == -1) {
langModule->languagePackageCO->setCurrentIndex(
langModule->languagePackageCO->findData("custom"));
numberingModule->tocTW->clear();
}
+ numberingModule->linenoCB->setChecked(bp_.use_lineno);
+ numberingModule->linenoLE->setEnabled(bp_.use_lineno);
+ numberingModule->linenoLA->setEnabled(bp_.use_lineno);
+ numberingModule->linenoLE->setText(toqstr(bp_.lineno_opts));
+
// bullets
bulletsModule->setBullet(0, bp_.user_defined_bullet(0));
bulletsModule->setBullet(1, bp_.user_defined_bullet(1));
fromqstr(langModule->languageCO->itemData(
langModule->languageCO->currentIndex()).toString()));
bool const need_fontspec =
- lang->babel().empty() && !lang->polyglossia().empty();
+ lang->babel().empty() && !lang->polyglossia().empty()
+ && lang->requires() != "CJK" && lang->requires() != "japanese";
bool const os_fonts_available =
bp_.baseClass()->outputType() == lyx::LATEX
&& LaTeXFeatures::isAvailable("fontspec");
fontModule->fontencLE->setText(toqstr(bp_.fontenc));
}
+ // LaTeX input encoding
+ // Set after fonts because non-tex fonts override "\inputencoding".
+ inputencodingToDialog();
+
// Formats
// This must be set _after_ fonts since updateDefaultFormat()
// checks osFontsCB settings.
}
+void GuiDocument::linenoToggled(bool on)
+{
+ numberingModule->linenoLE->setEnabled(on);
+ numberingModule->linenoLA->setEnabled(on);
+}
+
+
+
Dialog * createGuiDocument(GuiView & lv) { return new GuiDocument(lv); }