#include "Buffer.h"
#include "BufferParams.h"
-#include "support/debug.h"
#include "ui_BibtexAddUi.h"
#include "qt_helpers.h"
#include "Validator.h"
#include "LyXRC.h"
-#include "support/gettext.h"
#include "ButtonPolicy.h"
+#include "support/debug.h"
+#include "support/FileFilterList.h"
#include "support/filetools.h" // changeExtension
+#include "support/gettext.h"
#include "support/lstrings.h"
-#include "support/FileFilterList.h"
#include <QPushButton>
#include <QListWidget>
#include <QCheckBox>
-#include <QCloseEvent>
#include <QLineEdit>
using namespace std;
GuiBibtex::GuiBibtex(GuiView & lv)
- : GuiCommand(lv, "bibtex")
+ : GuiCommand(lv, "bibtex", qt_("BibTeX Bibliography"))
{
setupUi(this);
- setViewTitle( _("BibTeX Bibliography"));
-
QDialog::setModal(true);
connect(okPB, SIGNAL(clicked()),
this, SLOT(browsePressed()));
connect(deletePB, SIGNAL(clicked()),
this, SLOT(deletePressed()));
+ connect(upPB, SIGNAL(clicked()),
+ this, SLOT(upPressed()));
+ connect(downPB, SIGNAL(clicked()),
+ this, SLOT(downPressed()));
connect(styleCB, SIGNAL(editTextChanged(QString)),
this, SLOT(change_adaptor()));
- connect(databaseLW, SIGNAL(itemSelectionChanged()),
+ connect(databaseLW, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
this, SLOT(databaseChanged()));
connect(bibtocCB, SIGNAL(clicked()),
this, SLOT(change_adaptor()));
this, SLOT(addDatabase()));
connect(add_->bibLW, SIGNAL(itemActivated(QListWidgetItem *)),
add_, SLOT(accept()));
- connect(add_->bibLW, SIGNAL(itemSelectionChanged()),
+ connect(add_->bibLW, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
this, SLOT(availableChanged()));
connect(add_->browsePB, SIGNAL(clicked()),
this, SLOT(browseBibPressed()));
bc().addReadOnly(styleCB);
bc().addReadOnly(bibtocCB);
bc().addReadOnly(addBibPB);
- bc().addReadOnly(deletePB);
+ // Delete/Up/Down are handled with more conditions in
+ // databaseChanged().
+
+ // Make sure the delete/up/down buttons are disabled if necessary.
+ databaseChanged();
}
add_->bibLW->setItemSelected(item, false);
QList<QListWidgetItem *> matches =
databaseLW->findItems(item->text(), Qt::MatchExactly);
- if (matches.empty())
- databaseLW->addItem(item->text());
+ if (matches.empty()) {
+ QString label = item->text();
+ QListWidgetItem * db = new QListWidgetItem(label);
+ db->setFlags(db->flags() | Qt::ItemIsSelectable
+ | Qt::ItemIsUserCheckable);
+ db->setCheckState(Qt::Checked);
+ databaseLW->addItem(db);
+ }
}
}
QString const f = toqstr(from_utf8(changeExtension(to_utf8(file), "")));
QList<QListWidgetItem *> matches =
databaseLW->findItems(f, Qt::MatchExactly);
- if (matches.empty())
- databaseLW->addItem(f);
+ if (matches.empty()) {
+ QListWidgetItem * db = new QListWidgetItem(f);
+ db->setFlags(db->flags() | Qt::ItemIsSelectable
+ | Qt::ItemIsUserCheckable);
+ db->setCheckState(Qt::Checked);
+ databaseLW->addItem(db);
+ }
}
+ databaseChanged();
changed();
}
void GuiBibtex::deletePressed()
{
- databaseLW->takeItem(databaseLW->currentRow());
- changed();
+ QListWidgetItem *cur = databaseLW->takeItem(databaseLW->currentRow());
+ if (cur) {
+ delete cur;
+ databaseChanged();
+ changed();
+ }
}
+void GuiBibtex::upPressed()
+{
+ int row = databaseLW->currentRow();
+ QListWidgetItem *cur = databaseLW->takeItem(row);
+ databaseLW->insertItem(row - 1, cur);
+ databaseLW->setCurrentItem(cur);
+ changed();
+}
-void GuiBibtex::databaseChanged()
+
+void GuiBibtex::downPressed()
{
- deletePB->setEnabled(!isBufferReadonly() && databaseLW->currentRow() != -1);
+ int row = databaseLW->currentRow();
+ QListWidgetItem *cur = databaseLW->takeItem(row);
+ databaseLW->insertItem(row + 1, cur);
+ databaseLW->setCurrentItem(cur);
+ changed();
}
-void GuiBibtex::availableChanged()
+void GuiBibtex::databaseChanged()
{
- add_bc_.setValid(true);
+ bool readOnly = isBufferReadonly();
+ int count = databaseLW->count();
+ int row = databaseLW->currentRow();
+ deletePB->setEnabled(!readOnly && row != -1);
+ upPB->setEnabled(!readOnly && count > 1 && row > 0);
+ downPB->setEnabled(!readOnly && count > 1 && row < count - 1);
}
-void GuiBibtex::closeEvent(QCloseEvent *e)
+void GuiBibtex::availableChanged()
{
- slotClose();
- e->accept();
+ add_bc_.setValid(true);
}
databaseLW->clear();
docstring bibs = params_["bibfiles"];
+ docstring embs = params_["embed"];
docstring bib;
+ docstring emb;
while (!bibs.empty()) {
bibs = split(bibs, bib, ',');
+ embs = split(embs, emb, ',');
bib = trim(bib);
- if (!bib.empty())
- databaseLW->addItem(toqstr(bib));
+ if (!bib.empty()) {
+ QListWidgetItem * db = new QListWidgetItem(toqstr(bib));
+ db->setFlags(db->flags() | Qt::ItemIsSelectable
+ | Qt::ItemIsUserCheckable);
+ db->setCheckState(emb.empty() ? Qt::Unchecked : Qt::Checked);
+ databaseLW->addItem(db);
+ }
}
add_->bibLW->clear();
void GuiBibtex::applyView()
{
docstring dbs = qstring_to_ucs4(databaseLW->item(0)->text());
+ docstring emb = databaseLW->item(0)->checkState() == Qt::Checked ? _("true") : _("false");
unsigned int maxCount = databaseLW->count();
for (unsigned int i = 1; i < maxCount; i++) {
dbs += ',';
dbs += qstring_to_ucs4(databaseLW->item(i)->text());
+ emb += ',';
+ emb += databaseLW->item(i)->checkState() == Qt::Checked ? _("true") : _("false");
}
params_["bibfiles"] = dbs;
+ params_["embed"] = emb;
docstring const bibstyle = qstring_to_ucs4(styleCB->currentText());
bool const bibtotoc = bibtocCB->isChecked();