X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt2%2FQCitation.C;h=85183bccf3ac57eef4b16f846050e70804bec6c6;hb=4c6e0fe4226ce3b55d13726977f1e579f17c2ad1;hp=ee29292827d80b5a14585731b2b5a112d00da993;hpb=a63c7ca2079b3296d94aaff80d207b59cc958e41;p=lyx.git diff --git a/src/frontends/qt2/QCitation.C b/src/frontends/qt2/QCitation.C index ee29292827..85183bccf3 100644 --- a/src/frontends/qt2/QCitation.C +++ b/src/frontends/qt2/QCitation.C @@ -1,57 +1,63 @@ /** * \file QCitation.C - * Copyright 2001 the LyX Team - * Read the file COPYING + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * \author Angus Leeming - * \author Kalle Dalheimer + * \author Angus Leeming + * \author Kalle Dalheimer + * + * Full author contact details are available in file CREDITS. */ #include -#ifdef __GNUG__ -#pragma implementation -#endif - +#include "ui/QCitationFindDialogBase.h" #include "QCitationDialog.h" #include "QCitation.h" - + #include #include #include #include #include #include +#include -#include "QtLyXView.h" #include "Qt2BC.h" #include "ControlCitation.h" -#include "debug.h" -#include "gettext.h" +#include "qt_helpers.h" #include "support/lstrings.h" -#include "helper_funcs.h" +using namespace lyx::support; using std::find; -using std::max; -using std::min; -using std::pair; -using std::sort; + using std::vector; -typedef Qt2CB > base_class; -QCitation::QCitation(ControlCitation & c) - : base_class(c, _("Citation")) +typedef QController > base_class; + +QCitation::QCitation(Dialog & parent) + : base_class(parent, _("LyX: Citation Reference")) {} void QCitation::apply() { - controller().params().setCmdName("cite"); + vector const & styles = + ControlCitation::getCiteStyles(); + + int const choice = dialog_->citationStyleCO->currentItem(); + bool const full = dialog_->fulllistCB->isChecked(); + bool const force = dialog_->forceuppercaseCB->isChecked(); + + string const command = + biblio::getCiteCommand(styles[choice], full, force); + + controller().params().setCmdName(command); controller().params().setContents(getStringFromVector(citekeys)); - - string const after = dialog_->textAfterED->text().latin1(); + + string const after = fromqstr(dialog_->textAfterED->text()); controller().params().setOptions(after); } @@ -60,86 +66,129 @@ void QCitation::hide() { citekeys.clear(); bibkeys.clear(); - - Qt2Base::hide(); + + QDialogView::hide(); } -void QCitation::build() +void QCitation::build_dialog() { dialog_.reset(new QCitationDialog(this)); - dialog_->searchTypeCB->setChecked(false); - dialog_->searchCaseCB->setChecked(false); - // Manage the ok, apply, restore and cancel/close buttons - bc().setOK(dialog_->okPB); - bc().setApply(dialog_->applyPB); - bc().setCancel(dialog_->closePB); - bc().setRestore(dialog_->restorePB); - - bc().addReadOnly(dialog_->addPB); - bc().addReadOnly(dialog_->delPB); - bc().addReadOnly(dialog_->upPB); - bc().addReadOnly(dialog_->downPB); - bc().addReadOnly(dialog_->citationStyleCO); - // add when enabled ! - //bc().addReadOnly(dialog_->textBeforeED); - bc().addReadOnly(dialog_->textAfterED); + bcview().setOK(dialog_->okPB); + bcview().setApply(dialog_->applyPB); + bcview().setCancel(dialog_->closePB); + bcview().setRestore(dialog_->restorePB); + + bcview().addReadOnly(dialog_->addPB); + bcview().addReadOnly(dialog_->deletePB); + bcview().addReadOnly(dialog_->upPB); + bcview().addReadOnly(dialog_->downPB); + bcview().addReadOnly(dialog_->citationStyleCO); + bcview().addReadOnly(dialog_->forceuppercaseCB); + bcview().addReadOnly(dialog_->fulllistCB); + // add when enabled ! + //bcview().addReadOnly(dialog_->textBeforeED); + bcview().addReadOnly(dialog_->textAfterED); +} + + +void QCitation::fillStyles() +{ + if (citekeys.empty()) { + dialog_->citationStyleCO->setEnabled(false); + dialog_->citationStyleLA->setEnabled(false); + return; + } + + int const orig = dialog_->citationStyleCO->currentItem(); + + dialog_->citationStyleCO->clear(); + + int curr = dialog_->selectedLB->currentItem(); + if (curr < 0) + curr = 0; + + string key = citekeys[curr]; + + vector const & sty = controller().getCiteStrings(key); + + bool const natbib = controller().usingNatbib(); + dialog_->citationStyleCO->setEnabled(!sty.empty() && natbib); + dialog_->citationStyleLA->setEnabled(!sty.empty() && natbib); + + for (vector::const_iterator it = sty.begin(); + it != sty.end(); ++it) { + dialog_->citationStyleCO->insertItem(toqstr(*it)); + } + + if (orig != -1 && orig < dialog_->citationStyleCO->count()) + dialog_->citationStyleCO->setCurrentItem(orig); +} + + +void QCitation::updateStyle() +{ + bool const natbib = controller().usingNatbib(); + + dialog_->fulllistCB->setEnabled(natbib); + dialog_->forceuppercaseCB->setEnabled(natbib); + + string const & command = controller().params().getCmdName(); + + // Find the style of the citekeys + vector const & styles = + ControlCitation::getCiteStyles(); + biblio::CitationStyle cs = biblio::getCitationStyle(command); + + vector::const_iterator cit = + find(styles.begin(), styles.end(), cs.style); + + dialog_->citationStyleCO->setCurrentItem(0); + dialog_->fulllistCB->setChecked(false); + dialog_->forceuppercaseCB->setChecked(false); + + if (cit != styles.end()) { + int const i = int(cit - styles.begin()); + dialog_->citationStyleCO->setCurrentItem(i); + dialog_->fulllistCB->setChecked(cs.full); + dialog_->forceuppercaseCB->setChecked(cs.forceUCase); + } } -void QCitation::update() +void QCitation::update_contents() { // Make the list of all available bibliography keys bibkeys = biblio::getKeys(controller().bibkeysInfo()); - updateBrowser(dialog_->bibLB, bibkeys); - + updateBrowser(dialog_->add_->availableLB, bibkeys); + // Ditto for the keys cited in this inset citekeys = getVectorFromString(controller().params().getContents()); - updateBrowser(dialog_->citeLB, citekeys); + updateBrowser(dialog_->selectedLB, citekeys); // No keys have been selected yet, so... dialog_->infoML->clear(); - setBibButtons(OFF); - setCiteButtons(OFF); + dialog_->setButtons(); - dialog_->textAfterED->setText(controller().params().getOptions().c_str()); + dialog_->textAfterED->setText(toqstr(controller().params().getOptions())); - reset(); + fillStyles(); + updateStyle(); } -void QCitation::updateBrowser(QListBox* browser, - vector const & keys) const +void QCitation::updateBrowser(QListBox * browser, + vector const & keys) const { browser->clear(); for (vector::const_iterator it = keys.begin(); it < keys.end(); ++it) { - string const key = frontStrip(strip(*it)); + string const key = trim(*it); // FIXME: why the .empty() test ? - if(!key.empty()) - browser->insertItem(key.c_str()); + if (!key.empty()) + browser->insertItem(toqstr(key)); } } - - -void QCitation::setBibButtons(State status) const -{ - dialog_->addPB->setEnabled((status == ON)); -} - - -void QCitation::setCiteButtons(State status) const -{ - int const sel = dialog_->citeLB->currentItem(); - int const maxline = dialog_->citeLB->count() - 1; - bool const activate = (status == ON); - bool const activate_up = (activate && sel != 0); - bool const activate_down = (activate && sel != maxline); - - dialog_->delPB->setEnabled(activate); - dialog_->upPB->setEnabled(activate_up); - dialog_->downPB->setEnabled(activate_down); -}