X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiDocument.cpp;h=0a96469935b7f29f82ae6c92a6cb962ae837c754;hb=bbfc419c10010c1ebf6ab59adf2eaf6f63104a9e;hp=917a4fb10201004c5f083a93a372b713bb4536e0;hpb=a7d719fbac285423ada14ffae213622a135a26f3;p=features.git diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index 917a4fb102..0a96469935 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -15,6 +15,7 @@ #include "GuiApplication.h" #include "GuiBranches.h" +#include "GuiIndices.h" #include "GuiSelectionManager.h" #include "LaTeXHighlighter.h" #include "LengthCombo.h" @@ -28,10 +29,12 @@ #include "BufferParams.h" #include "BufferView.h" #include "Color.h" +#include "ColorCache.h" #include "Encoding.h" #include "FloatPlacement.h" #include "Format.h" #include "FuncRequest.h" +#include "IndicesList.h" #include "Language.h" #include "LaTeXFeatures.h" #include "Layout.h" @@ -54,6 +57,8 @@ #include "frontends/alert.h" #include +#include +#include #include #include #include @@ -67,6 +72,19 @@ #endif +// a style sheet for buttons +// this is for example used for the background color setting button +static inline QString colorButtonStyleSheet(QColor const & bgColor) +{ + if (bgColor.isValid()) { + QString rc = QLatin1String("background:"); + rc += bgColor.name(); + return rc; + } + return QString(); +} + + using namespace std; using namespace lyx::support; @@ -157,6 +175,8 @@ vector > pagestyles; namespace lyx { +RGBColor set_backgroundcolor; + namespace { // used when sorting the textclass list. class less_textclass_avail_desc @@ -661,6 +681,10 @@ GuiDocument::GuiDocument(GuiView & lv) this, SLOT(change_adaptor())); connect(pageLayoutModule->pagestyleCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); + connect(pageLayoutModule->backgroundPB, SIGNAL(clicked()), + this, SLOT(changeBackgroundColor())); + connect(pageLayoutModule->delbackgroundTB, SIGNAL(clicked()), + this, SLOT(deleteBackgroundColor())); pageLayoutModule->pagestyleCO->addItem(qt_("Default")); pageLayoutModule->pagestyleCO->addItem(qt_("empty")); @@ -835,10 +859,28 @@ GuiDocument::GuiDocument(GuiView & lv) this, SLOT(change_adaptor())); connect(biblioModule->bibtopicCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); + connect(biblioModule->bibtexCO, SIGNAL(activated(int)), + this, SLOT(bibtexChanged(int))); + connect(biblioModule->bibtexOptionsED, SIGNAL(textChanged(QString)), + this, SLOT(change_adaptor())); // biblio biblioModule->citeStyleCO->addItem(qt_("Author-year")); biblioModule->citeStyleCO->addItem(qt_("Numerical")); biblioModule->citeStyleCO->setCurrentIndex(0); + + biblioModule->bibtexCO->clear(); + + biblioModule->bibtexCO->addItem(qt_("Default"), QString("default")); + for (set::const_iterator it = lyxrc.bibtex_alternatives.begin(); + it != lyxrc.bibtex_alternatives.end(); ++it) { + QString const command = toqstr(*it).left(toqstr(*it).indexOf(" ")); + biblioModule->bibtexCO->addItem(command, command); + } + + // indices + indicesModule = new GuiIndices; + connect(indicesModule, SIGNAL(changed()), + this, SLOT(change_adaptor())); mathsModule = new UiWidget; @@ -904,6 +946,9 @@ GuiDocument::GuiDocument(GuiView & lv) branchesModule = new GuiBranches; connect(branchesModule, SIGNAL(changed()), this, SLOT(change_adaptor())); + connect(branchesModule, SIGNAL(renameBranches(docstring const &, docstring const &)), + this, SLOT(branchesRename(docstring const &, docstring const &))); + updateUnknownBranches(); // preamble preambleModule = new PreambleModule; @@ -984,6 +1029,7 @@ GuiDocument::GuiDocument(GuiView & lv) docPS->addPanel(langModule, qt_("Language")); docPS->addPanel(numberingModule, qt_("Numbering & TOC")); docPS->addPanel(biblioModule, qt_("Bibliography")); + docPS->addPanel(indicesModule, qt_("Indexes")); docPS->addPanel(pdfSupportModule, qt_("PDF Properties")); docPS->addPanel(mathsModule, qt_("Math Options")); docPS->addPanel(floatModule, qt_("Float Placement")); @@ -1165,6 +1211,31 @@ void GuiDocument::setCustomMargins(bool custom) marginsModule->columnsepUnit->setEnabled(enableColSep); } +void GuiDocument::changeBackgroundColor() +{ + QColor const & newColor = QColorDialog::getColor( + rgb2qcolor(set_backgroundcolor), asQWidget()); + if (!newColor.isValid()) + return; + // set the button color + pageLayoutModule->backgroundPB->setStyleSheet( + colorButtonStyleSheet(newColor)); + // save color + set_backgroundcolor = rgbFromHexName(fromqstr(newColor.name())); + changed(); +} + + +void GuiDocument::deleteBackgroundColor() +{ + // set the button color back to white + pageLayoutModule->backgroundPB->setStyleSheet( + colorButtonStyleSheet(QColor(Qt::white))); + // save white as the set color + set_backgroundcolor = rgbFromHexName("#ffffff"); + changed(); +} + void GuiDocument::xetexChanged(bool xetex) { @@ -1443,6 +1514,13 @@ void GuiDocument::classChanged() } +void GuiDocument::bibtexChanged(int n) +{ + biblioModule->bibtexOptionsED->setEnabled(n != 0); + changed(); +} + + namespace { // This is an insanely complicated attempt to make this sort of thing // work with RTL languages. @@ -1666,6 +1744,19 @@ void GuiDocument::applyView() bp_.use_bibtopic = biblioModule->bibtopicCB->isChecked(); + string const bibtex_command = + fromqstr(biblioModule->bibtexCO->itemData( + biblioModule->bibtexCO->currentIndex()).toString()); + string const bibtex_options = + fromqstr(biblioModule->bibtexOptionsED->text()); + if (bibtex_command == "default" || bibtex_options.empty()) + bp_.bibtex_command = bibtex_command; + else + bp_.bibtex_command = bibtex_command + " " + bibtex_options; + + // Indices + indicesModule->apply(bp_); + // language & quotes if (langModule->defaultencodingRB->isChecked()) { bp_.inputenc = "auto"; @@ -1719,7 +1810,7 @@ void GuiDocument::applyView() QString const lang = langModule->languageCO->itemData( langModule->languageCO->currentIndex()).toString(); - bp_.language = lyx::languages.getLanguage(fromqstr(lang)); + bp_.language = languages.getLanguage(fromqstr(lang)); // numbering if (bp_.documentClass().hasTocLevels()) { @@ -1786,7 +1877,7 @@ void GuiDocument::applyView() break; case 3: bp_.spacing().set(Spacing::Other, - fromqstr(textLayoutModule->lspacingLE->text())); + widgetToDoubleStr(textLayoutModule->lspacingLE)); break; } @@ -1928,6 +2019,8 @@ void GuiDocument::applyView() else bp_.orientation = ORIENTATION_PORTRAIT; + bp_.backgroundcolor = set_backgroundcolor; + // margins bp_.use_geometry = !marginsModule->marginCB->isChecked() || geom_papersize; @@ -1943,6 +2036,7 @@ void GuiDocument::applyView() bp_.footskip = widgetsToLength(m->footskipLE, m->footskipUnit); bp_.columnsep = widgetsToLength(m->columnsepLE, m->columnsepUnit); + // branches branchesModule->apply(bp_); // PDF support @@ -1998,6 +2092,24 @@ void GuiDocument::paramsToDialog() biblioModule->bibtopicCB->setChecked( bp_.use_bibtopic); + string command; + string options = + split(bp_.bibtex_command, command, ' '); + + int const bpos = biblioModule->bibtexCO->findData(toqstr(command)); + if (bpos != -1) { + biblioModule->bibtexCO->setCurrentIndex(bpos); + biblioModule->bibtexOptionsED->setText(toqstr(options).trimmed()); + } else { + biblioModule->bibtexCO->setCurrentIndex(0); + biblioModule->bibtexOptionsED->clear(); + } + biblioModule->bibtexOptionsED->setEnabled( + biblioModule->bibtexCO->currentIndex() != 0); + + // indices + indicesModule->update(bp_); + // language & quotes int const pos = langModule->languageCO->findData(toqstr( bp_.language->lang())); @@ -2089,8 +2201,8 @@ void GuiDocument::paramsToDialog() textLayoutModule->lspacingCO->setCurrentIndex(nitem); if (bp_.spacing().getSpace() == Spacing::Other) { - textLayoutModule->lspacingLE->setText( - toqstr(bp_.spacing().getValueAsString())); + doubleToWidget(textLayoutModule->lspacingLE, + bp_.spacing().getValueAsString()); } setLSpacing(nitem); @@ -2267,10 +2379,12 @@ void GuiDocument::paramsToDialog() pageLayoutModule->facingPagesCB->setChecked( bp_.sides == TwoSides); + pageLayoutModule->backgroundPB->setStyleSheet( + colorButtonStyleSheet(rgb2qcolor(bp_.backgroundcolor))); + set_backgroundcolor = bp_.backgroundcolor; lengthToWidgets(pageLayoutModule->paperwidthLE, pageLayoutModule->paperwidthUnitCO, bp_.paperwidth, defaultUnit); - lengthToWidgets(pageLayoutModule->paperheightLE, pageLayoutModule->paperheightUnitCO, bp_.paperheight, defaultUnit); @@ -2303,6 +2417,8 @@ void GuiDocument::paramsToDialog() lengthToWidgets(m->columnsepLE, m->columnsepUnit, bp_.columnsep, defaultUnit); + // branches + updateUnknownBranches(); branchesModule->update(bp_); // PDF support @@ -2337,6 +2453,9 @@ void GuiDocument::paramsToDialog() // Make sure that the bc is in the INITIAL state if (bc().policy().buttonStatus(ButtonPolicy::RESTORE)) bc().restore(); + + // clear changed branches cache + changedBranches_.clear(); } @@ -2567,6 +2686,25 @@ void GuiDocument::dispatchParams() dispatch(FuncRequest(LFUN_ALL_INSETS_TOGGLE, "assign branch")); } + // rename branches in the document + executeBranchRenaming(); + // and clear changed branches cache + changedBranches_.clear(); + + // Generate the colours requested by indices. + IndicesList & indiceslist = params().indiceslist(); + if (!indiceslist.empty()) { + IndicesList::const_iterator it = indiceslist.begin(); + IndicesList::const_iterator const end = indiceslist.end(); + for (; it != end; ++it) { + docstring const & current_index = it->shortcut(); + Index const * index = indiceslist.findShortcut(current_index); + string const x11hexname = X11hexname(index->color()); + // display the new color + docstring const str = current_index + ' ' + from_ascii(x11hexname); + dispatch(FuncRequest(LFUN_SET_COLOR, str)); + } + } // FIXME: If we used an LFUN, we would not need those two lines: BufferView * bv = const_cast(bufferview()); bv->processUpdateFlags(Update::Force | Update::FitCursor); @@ -2671,6 +2809,45 @@ void GuiDocument::loadModuleInfo() } +void GuiDocument::updateUnknownBranches() +{ + list used_branches; + buffer().getUsedBranches(used_branches); + list::const_iterator it = used_branches.begin(); + QStringList unknown_branches; + for (; it != used_branches.end() ; ++it) { + if (!buffer().params().branchlist().find(*it)) + unknown_branches.append(toqstr(*it)); + } + branchesModule->setUnknownBranches(unknown_branches); +} + + +void GuiDocument::branchesRename(docstring const & oldname, docstring const & newname) +{ + map::iterator it = changedBranches_.begin(); + for (; it != changedBranches_.end() ; ++it) { + if (it->second == oldname) { + // branch has already been renamed + it->second = newname; + return; + } + } + // store new name + changedBranches_[oldname] = newname; +} + + +void GuiDocument::executeBranchRenaming() const +{ + map::const_iterator it = changedBranches_.begin(); + for (; it != changedBranches_.end() ; ++it) { + docstring const arg = '"' + it->first + '"' + " " + '"' + it->second + '"'; + dispatch(FuncRequest(LFUN_BRANCHES_RENAME, arg)); + } +} + + Dialog * createGuiDocument(GuiView & lv) { return new GuiDocument(lv); }