3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
6 * \author Angus Leeming <a.leeming@ic.ac.uk>
7 * \author Kalle Dalheimer <kalle@klaralvdalens-datakonsult.se>
13 #pragma implementation
16 #include "QCitationDialog.h"
17 #include "QCitation.h"
19 #include <qcheckbox.h>
20 #include <qcombobox.h>
21 #include <qlineedit.h>
23 #include <qmultilineedit.h>
24 #include <qpushbutton.h>
26 #include "QtLyXView.h"
28 #include "ControlCitation.h"
31 #include "support/lstrings.h"
32 #include "helper_funcs.h"
42 typedef Qt2CB<ControlCitation, Qt2DB<QCitationDialog> > base_class;
44 QCitation::QCitation(ControlCitation & c)
45 : base_class(c, _("Citation"))
49 void QCitation::apply()
51 vector<biblio::CiteStyle> const & styles =
52 ControlCitation::getCiteStyles();
54 int const choice = dialog_->citationStyleCO->currentItem();
55 bool const full = dialog_->fulllistCB->isChecked();
56 bool const force = dialog_->forceuppercaseCB->isChecked();
58 string const command =
59 biblio::getCiteCommand(styles[choice], full, force);
61 controller().params().setCmdName(command);
62 controller().params().setContents(getStringFromVector(citekeys));
64 string const after = dialog_->textAfterED->text().latin1();
65 controller().params().setOptions(after);
69 void QCitation::hide()
78 void QCitation::build_dialog()
80 dialog_.reset(new QCitationDialog(this));
82 dialog_->searchTypeCB->setChecked(false);
83 dialog_->searchCaseCB->setChecked(false);
85 // Manage the ok, apply, restore and cancel/close buttons
86 bc().setOK(dialog_->okPB);
87 bc().setApply(dialog_->applyPB);
88 bc().setCancel(dialog_->closePB);
89 bc().setRestore(dialog_->restorePB);
91 bc().addReadOnly(dialog_->addPB);
92 bc().addReadOnly(dialog_->delPB);
93 bc().addReadOnly(dialog_->upPB);
94 bc().addReadOnly(dialog_->downPB);
95 bc().addReadOnly(dialog_->citationStyleCO);
96 bc().addReadOnly(dialog_->forceuppercaseCB);
97 bc().addReadOnly(dialog_->fulllistCB);
99 //bc().addReadOnly(dialog_->textBeforeED);
100 bc().addReadOnly(dialog_->textAfterED);
104 void QCitation::fillStyles()
109 if (!citekeys.empty())
112 dialog_->citationStyleCO->clear();
113 vector<string> const & sty = controller().getCiteStrings(key);
115 for (vector<string>::const_iterator it = sty.begin();
116 it != sty.end(); ++it) {
117 dialog_->citationStyleCO->insertItem(it->c_str());
122 void QCitation::updateStyle()
124 string const & command = controller().params().getCmdName();
126 // Find the style of the citekeys
127 vector<biblio::CiteStyle> const & styles =
128 ControlCitation::getCiteStyles();
129 biblio::CitationStyle cs = biblio::getCitationStyle(command);
131 vector<biblio::CiteStyle>::const_iterator cit =
132 find(styles.begin(), styles.end(), cs.style);
134 dialog_->citationStyleCO->setCurrentItem(0);
135 dialog_->fulllistCB->setChecked(false);
136 dialog_->forceuppercaseCB->setChecked(false);
138 if (cit != styles.end()) {
139 int const i = int(cit - styles.begin());
140 dialog_->citationStyleCO->setCurrentItem(i);
141 dialog_->fulllistCB->setChecked(cs.full);
142 dialog_->forceuppercaseCB->setChecked(cs.forceUCase);
145 bool const natbib = controller().usingNatbib();
146 dialog_->citationStyleCO->setEnabled(natbib);
147 dialog_->fulllistCB->setEnabled(natbib);
148 dialog_->forceuppercaseCB->setEnabled(natbib);
152 void QCitation::update_contents()
154 // Make the list of all available bibliography keys
155 bibkeys = biblio::getKeys(controller().bibkeysInfo());
156 updateBrowser(dialog_->bibLB, bibkeys);
158 // Ditto for the keys cited in this inset
159 citekeys = getVectorFromString(controller().params().getContents());
160 updateBrowser(dialog_->citeLB, citekeys);
162 // No keys have been selected yet, so...
163 dialog_->infoML->clear();
167 dialog_->textAfterED->setText(controller().params().getOptions().c_str());
175 void QCitation::updateBrowser(QListBox* browser,
176 vector<string> const & keys) const
180 for (vector<string>::const_iterator it = keys.begin();
181 it < keys.end(); ++it) {
182 string const key = frontStrip(strip(*it));
183 // FIXME: why the .empty() test ?
185 browser->insertItem(key.c_str());
190 void QCitation::setBibButtons(State status) const
192 dialog_->addPB->setEnabled((status == ON));
196 void QCitation::setCiteButtons(State status) const
198 int const sel = dialog_->citeLB->currentItem();
199 int const maxline = dialog_->citeLB->count() - 1;
200 bool const activate = (status == ON);
201 bool const activate_up = (activate && sel != 0);
202 bool const activate_down = (activate && sel != maxline);
204 dialog_->delPB->setEnabled(activate);
205 dialog_->upPB->setEnabled(activate_up);
206 dialog_->downPB->setEnabled(activate_down);