]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/QBibtexDialog.C
260ca756fc96122cccf5bd8ad82418ad398ab73f
[lyx.git] / src / frontends / qt2 / QBibtexDialog.C
1 /**
2  * \file QBibtexDialog.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
14 #include "ControlBibtex.h"
15 #include "qt_helpers.h"
16 #include "debug.h"
17
18 #include "support/filetools.h"
19 #include "support/lyxalgo.h" // eliminate_duplicates
20
21 #include <qwidget.h>
22 #include <qpushbutton.h>
23 #include <qcombobox.h>
24 #include <qlineedit.h>
25 #include <qlistbox.h>
26 #include <qcheckbox.h>
27 #include <qfiledialog.h>
28
29 #include "QBibtexDialog.h"
30 #include "QBibtex.h"
31
32 #include <vector>
33
34
35 QBibtexDialog::QBibtexDialog(QBibtex * form)
36         : QBibtexDialogBase(0, 0, false, 0),
37         form_(form)
38 {
39         connect(okPB, SIGNAL(clicked()),
40                 form, SLOT(slotOK()));
41         connect(closePB, SIGNAL(clicked()),
42                 form, SLOT(slotClose()));
43 }
44
45
46 void QBibtexDialog::change_adaptor()
47 {
48         form_->changed();
49 }
50
51
52 void QBibtexDialog::browsePressed()
53 {
54         QString const file =
55                 QFileDialog::getOpenFileName(QString::null,
56                                              qt_("BibTeX style files (*.bst)"),
57                                              this,
58                                              0,
59                                              qt_("Select a BibTeX style"));
60         if (!file.isNull()) {
61                 string const filen = ChangeExtension(fromqstr(file), "");
62                 bool present = false;
63                 int pres = 0;
64
65                 for (unsigned int i = 0; i != styleCB->count(); i++) {
66                         if (fromqstr(styleCB->text(i)) == filen) {
67                                 present = true;
68                                 pres = i;
69                         }
70                 }
71
72                 if (!present) 
73                         styleCB->insertItem(toqstr(filen),0);
74                 
75                 styleCB->setCurrentItem(pres);
76                 form_->changed();
77         }
78 }
79
80 void QBibtexDialog::browseBibPressed()
81 {
82         QString const file = QFileDialog::getOpenFileName(QString::null,
83                 qt_("BibTeX database files (*.bib)"), this, 0, qt_("Select a BibTeX database to add"));
84
85         if (!file.isNull()) {
86                 string const f = ChangeExtension(fromqstr(file), "");
87                 bool present = false;
88
89                 for (unsigned int i = 0; i != databaseLB->count(); i++) {
90                         if (fromqstr(databaseLB->text(i)) == f)
91                                 present = true;
92                 }
93
94                 if (!present) {
95                         databaseLB->insertItem(toqstr(f));
96                         form_->changed();
97                 }
98         }
99 }
100
101 void QBibtexDialog::addPressed()
102 {
103         QString const file = addBibED->text();
104         if (!file.isNull()) {
105                 string const f = ChangeExtension(file.latin1(), "");
106                 bool present = false;
107                 for(unsigned int i = 0; i != databaseLB->count(); ++i) {
108                         if (databaseLB->text(i).latin1() == f)
109                                 present = true;
110
111                 }
112                 if (!present) {
113                         databaseLB->insertItem(f.c_str());
114                         form_->changed();
115                 }
116         }
117 }
118
119 void QBibtexDialog::deletePressed()
120 {
121         databaseLB->removeItem(databaseLB->currentItem());
122 }
123
124
125 void QBibtexDialog::styleChanged(QString const & sel)
126 {
127         styleCB->insertItem(sel,0);
128 }
129
130
131 void QBibtexDialog::databaseChanged()
132 {
133         deletePB->setEnabled(!form_->readOnly() && databaseLB->currentItem() != -1);
134 }
135
136
137 void QBibtexDialog::closeEvent(QCloseEvent *e)
138 {
139         form_->slotWMHide();
140         e->accept();
141 }