/**
* \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 <a.leeming@ic.ac.uk>
- * \author Kalle Dalheimer <kalle@klaralvdalens-datakonsult.se>
+ * \author Angus Leeming
+ * \author Kalle Dalheimer
+ *
+ * Full author contact details are available in file CREDITS.
*/
#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
+#include "ui/QCitationFindDialogBase.h"
#include "QCitationDialog.h"
#include "QCitation.h"
-
+
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qlineedit.h>
#include <qlistbox.h>
#include <qmultilineedit.h>
#include <qpushbutton.h>
+#include <qlabel.h>
-#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<ControlCitation, Qt2DB<QCitationDialog> > base_class;
-QCitation::QCitation(ControlCitation & c)
- : base_class(c, _("Citation"))
+typedef QController<ControlCitation, QView<QCitationDialog> > base_class;
+
+QCitation::QCitation(Dialog & parent)
+ : base_class(parent, _("LyX: Citation Reference"))
{}
void QCitation::apply()
{
- controller().params().setCmdName("cite");
+ vector<biblio::CiteStyle> 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);
}
{
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<string> const & sty = controller().getCiteStrings(key);
+
+ bool const natbib = controller().usingNatbib();
+ dialog_->citationStyleCO->setEnabled(!sty.empty() && natbib);
+ dialog_->citationStyleLA->setEnabled(!sty.empty() && natbib);
+
+ for (vector<string>::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<biblio::CiteStyle> const & styles =
+ ControlCitation::getCiteStyles();
+ biblio::CitationStyle cs = biblio::getCitationStyle(command);
+
+ vector<biblio::CiteStyle>::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<string> const & keys) const
+void QCitation::updateBrowser(QListBox * browser,
+ vector<string> const & keys) const
{
browser->clear();
for (vector<string>::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);
-}