3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Angus Leeming
7 * \author Kalle Dalheimer
9 * Full author contact details are available in file CREDITS
15 #pragma implementation
18 #include "QCitationDialog.h"
19 #include "QCitation.h"
21 #include <qcheckbox.h>
22 #include <qcombobox.h>
23 #include <qlineedit.h>
25 #include <qmultilineedit.h>
26 #include <qpushbutton.h>
28 #include "QtLyXView.h"
30 #include "ControlCitation.h"
33 #include "support/lstrings.h"
34 #include "helper_funcs.h"
44 typedef Qt2CB<ControlCitation, Qt2DB<QCitationDialog> > base_class;
47 QCitation::QCitation()
48 : base_class(_("Citation"))
52 void QCitation::apply()
54 vector<biblio::CiteStyle> const & styles =
55 ControlCitation::getCiteStyles();
57 int const choice = dialog_->citationStyleCO->currentItem();
58 bool const full = dialog_->fulllistCB->isChecked();
59 bool const force = dialog_->forceuppercaseCB->isChecked();
61 string const command =
62 biblio::getCiteCommand(styles[choice], full, force);
64 controller().params().setCmdName(command);
65 controller().params().setContents(getStringFromVector(citekeys));
67 string const after = dialog_->textAfterED->text().latin1();
68 controller().params().setOptions(after);
72 void QCitation::hide()
81 void QCitation::build_dialog()
83 dialog_.reset(new QCitationDialog(this));
85 dialog_->searchTypeCB->setChecked(false);
86 dialog_->searchCaseCB->setChecked(false);
88 // Manage the ok, apply, restore and cancel/close buttons
89 bc().setOK(dialog_->okPB);
90 bc().setApply(dialog_->applyPB);
91 bc().setCancel(dialog_->closePB);
92 bc().setRestore(dialog_->restorePB);
94 bc().addReadOnly(dialog_->addPB);
95 bc().addReadOnly(dialog_->delPB);
96 bc().addReadOnly(dialog_->upPB);
97 bc().addReadOnly(dialog_->downPB);
98 bc().addReadOnly(dialog_->citationStyleCO);
99 bc().addReadOnly(dialog_->forceuppercaseCB);
100 bc().addReadOnly(dialog_->fulllistCB);
101 // add when enabled !
102 //bc().addReadOnly(dialog_->textBeforeED);
103 bc().addReadOnly(dialog_->textAfterED);
107 void QCitation::fillStyles()
112 if (!citekeys.empty())
115 dialog_->citationStyleCO->clear();
116 vector<string> const & sty = controller().getCiteStrings(key);
118 for (vector<string>::const_iterator it = sty.begin();
119 it != sty.end(); ++it) {
120 dialog_->citationStyleCO->insertItem(it->c_str());
125 void QCitation::updateStyle()
127 string const & command = controller().params().getCmdName();
129 // Find the style of the citekeys
130 vector<biblio::CiteStyle> const & styles =
131 ControlCitation::getCiteStyles();
132 biblio::CitationStyle cs = biblio::getCitationStyle(command);
134 vector<biblio::CiteStyle>::const_iterator cit =
135 find(styles.begin(), styles.end(), cs.style);
137 dialog_->citationStyleCO->setCurrentItem(0);
138 dialog_->fulllistCB->setChecked(false);
139 dialog_->forceuppercaseCB->setChecked(false);
141 if (cit != styles.end()) {
142 int const i = int(cit - styles.begin());
143 dialog_->citationStyleCO->setCurrentItem(i);
144 dialog_->fulllistCB->setChecked(cs.full);
145 dialog_->forceuppercaseCB->setChecked(cs.forceUCase);
148 bool const natbib = controller().usingNatbib();
149 dialog_->citationStyleCO->setEnabled(natbib);
150 dialog_->fulllistCB->setEnabled(natbib);
151 dialog_->forceuppercaseCB->setEnabled(natbib);
155 void QCitation::update_contents()
157 // Make the list of all available bibliography keys
158 bibkeys = biblio::getKeys(controller().bibkeysInfo());
159 updateBrowser(dialog_->bibLB, bibkeys);
161 // Ditto for the keys cited in this inset
162 citekeys = getVectorFromString(controller().params().getContents());
163 updateBrowser(dialog_->citeLB, citekeys);
165 // No keys have been selected yet, so...
166 dialog_->infoML->clear();
170 dialog_->textAfterED->setText(controller().params().getOptions().c_str());
178 void QCitation::updateBrowser(QListBox * browser,
179 vector<string> const & keys) const
183 for (vector<string>::const_iterator it = keys.begin();
184 it < keys.end(); ++it) {
185 string const key = trim(*it);
186 // FIXME: why the .empty() test ?
188 browser->insertItem(key.c_str());
193 void QCitation::setBibButtons(State status) const
195 dialog_->addPB->setEnabled((status == ON));
199 void QCitation::setCiteButtons(State status) const
201 int const sel = dialog_->citeLB->currentItem();
202 int const maxline = dialog_->citeLB->count() - 1;
203 bool const activate = (status == ON);
204 bool const activate_up = (activate && sel != 0);
205 bool const activate_down = (activate && sel != maxline);
207 dialog_->delPB->setEnabled(activate);
208 dialog_->upPB->setEnabled(activate_up);
209 dialog_->downPB->setEnabled(activate_down);