commit 8fa7e27e7ef78f3529be63c5c98c6ad4beb541ef Author: Juergen Spitzmueller <sp...@lyx.org> Date: Sat Feb 19 14:09:59 2022 +0100
child documents: allow inheritance of bibliography file list (#4427) --- src/Buffer.h | 8 +++--- src/frontends/qt/GuiBibtex.cpp | 49 +++++++++++++++++++++++++++++++++++++++ src/frontends/qt/GuiBibtex.h | 3 ++ src/frontends/qt/ui/BibtexUi.ui | 14 +++++++++- 4 files changed, 68 insertions(+), 6 deletions(-) diff --git a/src/Buffer.h b/src/Buffer.h index 332ef86..0d79ffa 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -784,6 +784,10 @@ public: void registerBibfiles(docstring_list const & bf) const; /// support::FileName getBibfilePath(docstring const & bibid) const; + /// Return the list with all bibfiles in use (including bibfiles + /// of loaded child documents). + docstring_list const & + getBibfiles(UpdateScope scope = UpdateMaster) const; /// routines for dealing with possible self-inclusion void pushIncludedBuffer(Buffer const * buf) const; @@ -807,10 +811,6 @@ private: /// last time we loaded the cache. Note that this does NOT update the /// cached information. void checkIfBibInfoCacheIsValid() const; - /// Return the list with all bibfiles in use (including bibfiles - /// of loaded child documents). - docstring_list const & - getBibfiles(UpdateScope scope = UpdateMaster) const; /// void collectChildren(ListOfBuffers & children, bool grand_children) const; diff --git a/src/frontends/qt/GuiBibtex.cpp b/src/frontends/qt/GuiBibtex.cpp index 64bb987..3c71884 100644 --- a/src/frontends/qt/GuiBibtex.cpp +++ b/src/frontends/qt/GuiBibtex.cpp @@ -34,6 +34,7 @@ #include "insets/InsetBibtex.h" #include "support/debug.h" +#include "support/docstring_list.h" #include "support/ExceptionMessage.h" #include "support/FileName.h" #include "support/filetools.h" // changeExtension @@ -88,6 +89,8 @@ GuiBibtex::GuiBibtex(GuiView & lv) this, SLOT(change_adaptor())); connect(browseBibPB, SIGNAL(clicked()), this, SLOT(browseBibPressed())); + connect(inheritPB, SIGNAL(clicked()), + this, SLOT(inheritPressed())); selected_model_.insertColumns(0, 1); selectionManager = new GuiSelectionManager(this, availableLV, selectedLV, @@ -178,6 +181,7 @@ void GuiBibtex::setButtons() int const srows = selectedLV->model()->rowCount(); buttonBox->button(QDialogButtonBox::Apply)->setEnabled(srows > 0); buttonBox->button(QDialogButtonBox::Ok)->setEnabled(srows > 0); + inheritPB->setEnabled(hasInherits()); } @@ -240,6 +244,49 @@ void GuiBibtex::browseBibPressed() } +bool GuiBibtex::hasInherits() +{ + if (!buffer().parent()) + return false; + + docstring_list const mbibs = buffer().masterBuffer()->getBibfiles(); + if (mbibs.empty()) + return false; + + for (auto const & f : mbibs) { + if (!selected_bibs_.contains(toqstr(f))) + return true; + } + return false; +} + + +void GuiBibtex::inheritPressed() +{ + docstring_list const mbibs = buffer().masterBuffer()->getBibfiles(); + bool chng = false; + vector<docstring> nfe; + for (auto const & f : mbibs) { + if (!selected_bibs_.contains(toqstr(f))) { + selected_bibs_.append(toqstr(f)); + setSelectedBibs(selected_bibs_); + string enc; + if (usingBiblatex()) { + string const bfe = buffer().masterParams().bibFileEncoding(to_utf8(f)); + if (!bfe.empty()) + nfe.push_back(f + " " + from_utf8(bfe)); + } + chng = true; + } + } + if (chng) { + if (!nfe.empty()) + setFileEncodings(nfe); + change_adaptor(); + } +} + + void GuiBibtex::on_editPB_clicked() { QModelIndexList selIdx = @@ -351,6 +398,8 @@ void GuiBibtex::updateContents() bibtocCB->setChecked((bibtotoc() && !bibtopic) || hasbibintoc); bibtocCB->setEnabled(!bibtopic && !hasbibintoc); + inheritPB->setEnabled(hasInherits()); + btPrintCO->clear(); btPrintCO->addItem(qt_("all cited references"), toqstr("btPrintCited")); if (bibtopic) diff --git a/src/frontends/qt/GuiBibtex.h b/src/frontends/qt/GuiBibtex.h index 2258ec9..5d54be7 100644 --- a/src/frontends/qt/GuiBibtex.h +++ b/src/frontends/qt/GuiBibtex.h @@ -40,6 +40,7 @@ private Q_SLOTS: void on_buttonBox_accepted(); void browseBstPressed(); void browseBibPressed(); + void inheritPressed(); void on_editPB_clicked(); void databaseChanged(); void rescanClicked(); @@ -99,6 +100,8 @@ private: void dispatchParams() override; /// bool isBufferDependent() const override { return true; } + /// Is his a child which can inherit bibs from its master? + bool hasInherits(); private: /// diff --git a/src/frontends/qt/ui/BibtexUi.ui b/src/frontends/qt/ui/BibtexUi.ui index ac41646..ab2769d 100644 --- a/src/frontends/qt/ui/BibtexUi.ui +++ b/src/frontends/qt/ui/BibtexUi.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>523</width> - <height>617</height> + <width>542</width> + <height>702</height> </rect> </property> <property name="windowTitle"> @@ -86,6 +86,16 @@ </widget> </item> <item> + <widget class="QPushButton" name="inheritPB"> + <property name="toolTip"> + <string>Inherit bibliography databases from the master document</string> + </property> + <property name="text"> + <string>&Inherit from Master</string> + </property> + </widget> + </item> + <item> <widget class="QPushButton" name="deletePB"> <property name="toolTip"> <string>Remove the selected database</string> -- lyx-cvs mailing list lyx-cvs@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-cvs