-/* This file is part of
- * ======================================================
- *
- * LyX, The Document Processor
- *
- * Copyright 2001 The LyX Team.
+/**
+ * \file ControlCitation.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * ======================================================
+ * \author Angus Leeming
*
- * \file ControlCitation.C
- * \author Angus Leeming <a.leeming@ic.ac.uk>
+ * Full author contact details are available in file CREDITS.
*/
-#include <algorithm>
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include <config.h>
#include "ControlCitation.h"
+
#include "buffer.h"
-#include "Dialogs.h"
-#include "LyXView.h"
+#include "bufferparams.h"
+#include "debug.h" // temporary
-using std::pair;
+
+using std::string;
using std::vector;
-using SigC::slot;
+using std::pair;
-ControlCitation::ControlCitation(LyXView & lv, Dialogs & d)
- : ControlCommand(lv, d, LFUN_CITATION_INSERT)
-{
- // These are permanent connections so we won't bother
- // storing a copy because we won't be disconnecting.
- d_.showCitation.connect(slot(this, &ControlCitation::showInset));
- d_.createCitation.connect(slot(this, &ControlCitation::createInset));
-}
+namespace lyx {
+namespace frontend {
+vector<biblio::CiteStyle> ControlCitation::citeStyles_;
-void ControlCitation::clearDaughterParams()
-{
- bibkeysInfo_.clear();
-}
+ControlCitation::ControlCitation(Dialog & d)
+ : ControlCommand(d, "citation")
+{}
-void ControlCitation::setDaughterParams()
+
+bool ControlCitation::initialiseParams(string const & data)
{
- vector<pair<string,string> > blist = lv_.buffer()->getBibkeyList();
+ lyxerr << "ControlCitation::initialiseParams\n\t" << data << std::endl;
+ ControlCommand::initialiseParams(data);
+
+ vector<pair<string, string> > blist;
+ kernel().buffer().fillWithBibKeys(blist);
+
+ biblio::CiteEngine const engine = biblio::getEngine(kernel().buffer());
+
+ bool use_styles = engine != biblio::ENGINE_BASIC;
typedef std::map<string, string>::value_type InfoMapValue;
- for (vector<pair<string,string> >::size_type i=0; i<blist.size(); ++i) {
+ for (vector<pair<string,string> >::size_type i = 0;
+ i < blist.size(); ++i) {
bibkeysInfo_.insert(InfoMapValue(blist[i].first,
blist[i].second));
}
+
+ if (citeStyles_.empty())
+ citeStyles_ = biblio::getCiteStyles(engine);
+ else {
+ if ((use_styles && citeStyles_.size() == 1) ||
+ (!use_styles && citeStyles_.size() != 1))
+ citeStyles_ = biblio::getCiteStyles(engine);
+ }
+
+ return true;
+}
+
+
+
+void ControlCitation::clearParams()
+{
+ ControlCommand::clearParams();
+ bibkeysInfo_.clear();
}
{
return bibkeysInfo_;
}
+
+
+biblio::CiteEngine_enum ControlCitation::getEngine() const
+{
+ return biblio::getEngine(kernel().buffer());
+}
+
+
+vector<string> const ControlCitation::getCiteStrings(string const & key) const
+{
+ vector<string> styles;
+
+ biblio::CiteEngine const engine = biblio::getEngine(kernel().buffer());
+ vector<biblio::CiteStyle> const cs = biblio::getCiteStyles(engine);
+
+ if (engine == biblio::ENGINE_NATBIB_NUMERICAL)
+ styles = biblio::getNumericalStrings(key, bibkeysInfo_, cs);
+ else
+ styles = biblio::getAuthorYearStrings(key, bibkeysInfo_, cs);
+
+ return styles;
+}
+
+} // namespace frontend
+} // namespace lyx