]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/QBibtex.C
the qtclean-2 patch with some very small changes
[lyx.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  *
8  * Full author contact details are available in file CREDITS
9  */
10
11 #include <config.h>
12
13 #ifdef __GNUG__
14 #pragma implementation
15 #endif
16
17 #include "support/lstrings.h"
18
19 #include "ControlBibtex.h"
20 #include "gettext.h"
21 #include "debug.h"
22
23 #include "support/filetools.h" // ChangeExtension
24 #include "support/lstrings.h" // getVectorFromString
25
26 #include <qlineedit.h>
27 #include <qcombobox.h>
28 #include <qpushbutton.h>
29 #include <qlistbox.h>
30 #include <qcheckbox.h>
31
32 #include "QBibtexDialog.h"
33 #include "QBibtex.h"
34 #include "Qt2BC.h"
35
36 using std::vector;
37
38 typedef Qt2CB<ControlBibtex, Qt2DB<QBibtexDialog> > base_class;
39
40
41 QBibtex::QBibtex()
42         : base_class(_("BibTeX"))
43 {
44 }
45
46
47 void QBibtex::build_dialog()
48 {
49         dialog_.reset(new QBibtexDialog(this));
50
51         bc().setOK(dialog_->okPB);
52         bc().setCancel(dialog_->closePB);
53         bc().addReadOnly(dialog_->databaseLB);
54         bc().addReadOnly(dialog_->databasePB);
55         bc().addReadOnly(dialog_->stylePB);
56         bc().addReadOnly(dialog_->styleCB);
57         bc().addReadOnly(dialog_->bibtocCB);
58         bc().addReadOnly(dialog_->databasePB);
59         bc().addReadOnly(dialog_->deletePB);
60 }
61
62
63 void QBibtex::update_contents()
64 {
65         dialog_->databaseLB->clear();
66
67         string bibs(controller().params().getContents());
68         string bib;
69
70         while (!bibs.empty()) {
71                 bibs = split(bibs, bib, ',');
72                 bib = trim(bib);
73                 if (!bib.empty())
74                         dialog_->databaseLB->inSort(bib.c_str());
75         }
76
77         string bibtotoc = "bibtotoc";
78         string bibstyle(controller().params().getOptions().c_str());
79
80         // bibtotoc exists?
81         if (prefixIs(bibstyle,bibtotoc)) {
82                 dialog_->bibtocCB->setChecked(true);
83
84                 // bibstyle exists?
85                 if (contains(bibstyle,','))
86                         bibstyle = split(bibstyle, bibtotoc, ',');
87                 else
88                         bibstyle.erase();
89         } else
90                 dialog_->bibtocCB->setChecked(false);
91
92
93         vector<string> const str = getVectorFromString(
94                 controller().getBibStyles(),"\n");
95         for (vector<string>::const_iterator it = str.begin();
96                 it != str.end(); ++it) {
97                 dialog_->styleCB->insertItem(ChangeExtension(*it, "").c_str());
98         }
99         dialog_->styleCB->insertItem(bibstyle.c_str(),0);
100 }
101
102
103 void QBibtex::apply()
104 {
105         string dbs;
106
107         for (unsigned int i = 0; i < dialog_->databaseLB->count(); ++i) {
108                 dbs += dialog_->databaseLB->text(i).latin1();
109                 if (i != dialog_->databaseLB->count())
110                         dbs += ",";
111         }
112         controller().params().setContents(dbs);
113
114         string bibstyle(dialog_->styleCB->text(0).latin1());
115
116         bool const bibtotoc(dialog_->bibtocCB->isChecked());
117
118         if (bibtotoc && (!bibstyle.empty())) {
119                 // both bibtotoc and style
120                 controller().params().setOptions("bibtotoc," + bibstyle);
121         } else if (bibtotoc) {
122                 // bibtotoc and no style
123                 controller().params().setOptions("bibtotoc");
124         } else if (!bibstyle.empty()){
125                 // only style
126                 controller().params().setOptions(bibstyle);
127         }
128 }
129
130
131 bool QBibtex::isValid()
132 {
133         return dialog_->databaseLB->count() != 0 &&
134                 !string(dialog_->styleCB->text(0)).empty();
135 }