3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS
15 #include "support/lstrings.h"
17 #include "ControlBibtex.h"
18 #include "qt_helpers.h"
21 #include "support/filetools.h" // ChangeExtension
22 #include "support/lstrings.h" // getVectorFromString
24 #include <qlineedit.h>
25 #include <qcombobox.h>
26 #include <qpushbutton.h>
28 #include <qcheckbox.h>
30 #include "ui/QBibtexAddDialogBase.h"
31 #include "QBibtexDialog.h"
35 using namespace lyx::support;
39 typedef QController<ControlBibtex, QView<QBibtexDialog> > base_class;
42 QBibtex::QBibtex(Dialog & parent)
43 : base_class(parent, _("BibTeX"))
48 void QBibtex::build_dialog()
50 dialog_.reset(new QBibtexDialog(this));
52 bcview().setOK(dialog_->okPB);
53 bcview().setCancel(dialog_->closePB);
54 bcview().addReadOnly(dialog_->databaseLB);
55 bcview().addReadOnly(dialog_->stylePB);
56 bcview().addReadOnly(dialog_->styleCB);
57 bcview().addReadOnly(dialog_->bibtocCB);
58 bcview().addReadOnly(dialog_->addBibPB);
59 bcview().addReadOnly(dialog_->deletePB);
63 void QBibtex::update_contents()
65 dialog_->databaseLB->clear();
67 string bibs(controller().params().getContents());
70 while (!bibs.empty()) {
71 bibs = split(bibs, bib, ',');
74 dialog_->databaseLB->insertItem(toqstr(bib));
77 dialog_->add_->bibLB->clear();
79 vector<string> bib_str;
80 controller().getBibFiles(bib_str);
81 for (vector<string>::const_iterator it = bib_str.begin();
82 it != bib_str.end(); ++it) {
83 string bibItem(ChangeExtension(*it, ""));
84 dialog_->add_->bibLB->insertItem(toqstr(bibItem));
87 string bibtotoc = "bibtotoc";
88 string bibstyle(controller().params().getOptions());
91 if (prefixIs(bibstyle, bibtotoc)) {
92 dialog_->bibtocCB->setChecked(true);
95 if (contains(bibstyle,','))
96 bibstyle = split(bibstyle, bibtotoc, ',');
100 dialog_->bibtocCB->setChecked(false);
103 dialog_->styleCB->clear();
108 controller().getBibStyles(str);
109 for (vector<string>::const_iterator it = str.begin();
110 it != str.end(); ++it) {
111 string item(ChangeExtension(*it, ""));
112 if (item == bibstyle)
113 item_nr = int(it - str.begin());
114 dialog_->styleCB->insertItem(toqstr(item));
118 dialog_->styleCB->insertItem(toqstr(bibstyle));
119 item_nr = dialog_->styleCB->count() - 1;
122 dialog_->styleCB->setCurrentItem(item_nr);
126 void QBibtex::apply()
128 string dbs(fromqstr(dialog_->databaseLB->text(0)));
130 unsigned int maxCount = dialog_->databaseLB->count();
131 for (unsigned int i = 1; i < maxCount; i++) {
133 dbs += fromqstr(dialog_->databaseLB->text(i));
136 controller().params().setContents(dbs);
138 string const bibstyle(fromqstr(dialog_->styleCB->currentText()));
139 bool const bibtotoc(dialog_->bibtocCB->isChecked());
141 if (bibtotoc && (!bibstyle.empty())) {
142 // both bibtotoc and style
143 controller().params().setOptions("bibtotoc," + bibstyle);
144 } else if (bibtotoc) {
145 // bibtotoc and no style
146 controller().params().setOptions("bibtotoc");
148 // only style. An empty one is valid, because some
149 // documentclasses have an own \bibliographystyle{}
151 controller().params().setOptions(bibstyle);
156 bool QBibtex::isValid()
158 return dialog_->databaseLB->count() != 0;