]> git.lyx.org Git - features.git/blob - src/frontends/qt2/QBibtex.C
7925a9ba11f511e85fcb821ac0e6dab100b92a1d
[features.git] / src / frontends / qt2 / QBibtex.C
1 /**
2  * \file QBibtex.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Levon
7  * \author Herbert Voss
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #include <config.h>
13
14
15 #include "support/lstrings.h"
16
17 #include "ControlBibtex.h"
18 #include "qt_helpers.h"
19 #include "debug.h"
20
21 #include "support/filetools.h" // ChangeExtension
22 #include "support/lstrings.h" // getVectorFromString
23
24 #include <qlineedit.h>
25 #include <qcombobox.h>
26 #include <qpushbutton.h>
27 #include <qlistbox.h>
28 #include <qcheckbox.h>
29
30 #include "ui/QBibtexAddDialogBase.h"
31 #include "QBibtexDialog.h"
32 #include "QBibtex.h"
33 #include "Qt2BC.h"
34
35 using std::vector;
36
37 typedef QController<ControlBibtex, QView<QBibtexDialog> > base_class;
38
39
40 QBibtex::QBibtex(Dialog & parent)
41         : base_class(parent, _("BibTeX"))
42 {
43 }
44
45
46 void QBibtex::build_dialog()
47 {
48         dialog_.reset(new QBibtexDialog(this));
49
50         bcview().setOK(dialog_->okPB);
51         bcview().setCancel(dialog_->closePB);
52         bcview().addReadOnly(dialog_->databaseLB);
53         bcview().addReadOnly(dialog_->stylePB);
54         bcview().addReadOnly(dialog_->styleCB);
55         bcview().addReadOnly(dialog_->bibtocCB);
56         bcview().addReadOnly(dialog_->addBibPB);
57         bcview().addReadOnly(dialog_->deletePB);
58 }
59
60
61 void QBibtex::update_contents()
62 {
63         dialog_->databaseLB->clear();
64
65         string bibs(controller().params().getContents());
66         string bib;
67
68         while (!bibs.empty()) {
69                 bibs = split(bibs, bib, ',');
70                 bib = trim(bib);
71                 if (!bib.empty())
72                         dialog_->databaseLB->insertItem(toqstr(bib));
73         }
74
75         dialog_->add_->bibLB->clear();
76
77         vector<string> bib_str;
78         controller().getBibFiles(bib_str);
79         for (vector<string>::const_iterator it = bib_str.begin();
80                 it != bib_str.end(); ++it) {
81                 string bibItem(ChangeExtension(*it, ""));
82                 dialog_->add_->bibLB->insertItem(toqstr(bibItem));
83         }
84
85         string bibtotoc = "bibtotoc";
86         string bibstyle(controller().params().getOptions());
87
88         // bibtotoc exists?
89         if (prefixIs(bibstyle, bibtotoc)) {
90                 dialog_->bibtocCB->setChecked(true);
91
92                 // bibstyle exists?
93                 if (contains(bibstyle,','))
94                         bibstyle = split(bibstyle, bibtotoc, ',');
95                 else
96                         bibstyle.erase();
97         } else
98                 dialog_->bibtocCB->setChecked(false);
99
100
101         dialog_->styleCB->clear();
102
103         int item_nr(-1);
104
105         vector<string> str;
106         controller().getBibStyles(str);
107         for (vector<string>::const_iterator it = str.begin();
108                 it != str.end(); ++it) {
109                 string item(ChangeExtension(*it, ""));
110                 if (item == bibstyle)
111                         item_nr = int(it - str.begin());
112                 dialog_->styleCB->insertItem(toqstr(item));
113         }
114
115         if (item_nr == -1) {
116                 dialog_->styleCB->insertItem(toqstr(bibstyle));
117                 item_nr = dialog_->styleCB->count() - 1;
118         }
119
120         dialog_->styleCB->setCurrentItem(item_nr);
121 }
122
123
124 void QBibtex::apply()
125 {
126         string dbs(fromqstr(dialog_->databaseLB->text(0)));
127
128         unsigned int maxCount = dialog_->databaseLB->count();
129         for (unsigned int i = 1; i < maxCount; i++) {
130                 dbs += ',';
131                 dbs += fromqstr(dialog_->databaseLB->text(i));
132         }
133
134         controller().params().setContents(dbs);
135
136         string const bibstyle(fromqstr(dialog_->styleCB->currentText()));
137         bool const bibtotoc(dialog_->bibtocCB->isChecked());
138
139         if (bibtotoc && (!bibstyle.empty())) {
140                 // both bibtotoc and style
141                 controller().params().setOptions("bibtotoc," + bibstyle);
142         } else if (bibtotoc) {
143                 // bibtotoc and no style
144                 controller().params().setOptions("bibtotoc");
145         } else {
146                 // only style. An empty one is valid, because some
147                 // documentclasses have an own \bibliographystyle{}
148                 // command!
149                 controller().params().setOptions(bibstyle);
150         }
151 }
152
153
154 bool QBibtex::isValid()
155 {
156         return dialog_->databaseLB->count() != 0;
157 }