]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/QBibtex.C
Texinfo path issue repaired, Bibtex style combo, Citation, External re-layout.
[lyx.git] / src / frontends / qt2 / QBibtex.C
1 /**
2  * \file QBibtex.C
3  * Copyright 2001 the LyX Team
4  * Read the file COPYING
5  *
6  * \author John Levon <moz@compsoc.man.ac.uk>
7  */
8
9 #include <config.h>
10
11 #include "support/lstrings.h"
12
13 #include "ControlBibtex.h"
14 #include "gettext.h"
15 #include "debug.h"
16 #include "support/filetools.h" // ChangeExtension
17 #include "support/lstrings.h" // getVectorFromString
18 #include <qlineedit.h>
19 #include <qcombobox.h>
20 #include <qpushbutton.h>
21 #include <qlistbox.h>
22 #include <qcheckbox.h>
23
24 #include "QBibtexDialog.h"
25 #include "QBibtex.h"
26 #include "Qt2BC.h"
27  
28 typedef Qt2CB<ControlBibtex, Qt2DB<QBibtexDialog> > base_class;
29
30 QBibtex::QBibtex(ControlBibtex & c, Dialogs &)
31         : base_class(c, _("BibTeX"))
32 {
33 }
34
35
36 void QBibtex::build_dialog()
37 {
38         dialog_.reset(new QBibtexDialog(this));
39
40         bc().setOK(dialog_->okPB);
41         bc().setCancel(dialog_->closePB);
42         bc().addReadOnly(dialog_->databaseLB);
43         bc().addReadOnly(dialog_->databasePB);
44         bc().addReadOnly(dialog_->stylePB);
45         bc().addReadOnly(dialog_->styleCB);
46         bc().addReadOnly(dialog_->bibtocCB);
47         bc().addReadOnly(dialog_->databasePB);
48         bc().addReadOnly(dialog_->deletePB);
49 }
50
51
52 void QBibtex::update_contents()
53 {
54         dialog_->databaseLB->clear();
55
56         string bibs(controller().params().getContents());
57         string bib;
58
59         while (!bibs.empty()) {
60                 bibs = split(bibs, bib, ',');
61                 bib = frontStrip(strip(bib));
62                 if (!bib.empty())
63                         dialog_->databaseLB->inSort(bib.c_str());
64         }
65
66         string bibtotoc = "bibtotoc";
67         string bibstyle(controller().params().getOptions().c_str());
68
69         // bibtotoc exists?
70         if (prefixIs(bibstyle,bibtotoc)) {
71                 dialog_->bibtocCB->setChecked(true);
72
73                 // bibstyle exists?
74                 if (contains(bibstyle,','))
75                         bibstyle = split(bibstyle, bibtotoc, ',');
76                 else
77                         bibstyle = "";
78         } else
79                 dialog_->bibtocCB->setChecked(false);
80         
81
82         vector<string> const str = getVectorFromString(
83                 controller().getBibStyles(),"\n");
84         for (vector<string>::const_iterator it = str.begin();
85                 it != str.end(); ++it) {
86                 dialog_->styleCB->insertItem(ChangeExtension(*it,"").c_str());
87         }
88         dialog_->styleCB->insertItem(bibstyle.c_str(),0);
89 }
90
91
92 void QBibtex::apply()
93 {
94         string dbs;
95
96         for (unsigned int i = 0; i < dialog_->databaseLB->count(); ++i) {
97                 dbs += dialog_->databaseLB->text(i).latin1();
98                 if (i != dialog_->databaseLB->count())
99                         dbs += ",";
100         }
101         controller().params().setContents(dbs);
102
103         string bibstyle(dialog_->styleCB->text(0).latin1());
104
105         bool const bibtotoc(dialog_->bibtocCB->isChecked());
106
107         if (bibtotoc && (!bibstyle.empty())) {
108                 // both bibtotoc and style
109                 controller().params().setOptions("bibtotoc," + bibstyle);
110         } else if (bibtotoc) {
111                 // bibtotoc and no style
112                 controller().params().setOptions("bibtotoc");
113         } else if (!bibstyle.empty()){
114                 // only style
115                 controller().params().setOptions(bibstyle);
116         }
117 }
118
119
120 bool QBibtex::isValid()
121 {
122         return dialog_->databaseLB->count() != 0 &&
123                 !string(dialog_->styleCB->text(0)).empty();
124 }