[LyX/master] child documents: allow inheritance of bibliography file list (#4427)
Juergen Spitzmueller
spitz at lyx.org
Sat Feb 19 12:38:13 UTC 2022
commit 8fa7e27e7ef78f3529be63c5c98c6ad4beb541ef
Author: Juergen Spitzmueller <spitz at 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>
More information about the lyx-cvs
mailing list