]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlCitation.C
* Constify Buffer::getLabelList.
[lyx.git] / src / frontends / controllers / ControlCitation.C
1 /* This file is part of
2  * ======================================================
3  *
4  *           LyX, The Document Processor
5  *
6  *           Copyright 2001 The LyX Team.
7  *
8  * ======================================================
9  *
10  * \file ControlCitation.C
11  * \author Angus Leeming <a.leeming@ic.ac.uk>
12  */
13
14 #include <config.h>
15
16 #ifdef __GNUG__
17 #pragma implementation
18 #endif
19
20 #include "ControlCitation.h"
21 #include "buffer.h"
22
23 using std::vector;
24 using std::pair;
25
26 vector<biblio::CiteStyle> ControlCitation::citeStyles_;
27
28
29 ControlCitation::ControlCitation(LyXView & lv, Dialogs & d)
30         : ControlCommand(lv, d, LFUN_CITATION_INSERT)
31 {}
32
33
34 void ControlCitation::clearDaughterParams()
35 {
36         bibkeysInfo_.clear();
37 }
38
39
40 void ControlCitation::setDaughterParams()
41 {
42         vector<pair<string,string> > blist = buffer()->getBibkeyList();
43
44         typedef std::map<string, string>::value_type InfoMapValue;
45
46         for (vector<pair<string,string> >::size_type i=0; i<blist.size(); ++i) {
47                 bibkeysInfo_.insert(InfoMapValue(blist[i].first,
48                                                  blist[i].second));
49         }
50
51         if (citeStyles_.empty())
52                 citeStyles_ = biblio::getCiteStyles(usingNatbib());
53         else {
54                 if ((usingNatbib() && citeStyles_.size() == 1) ||
55                     (!usingNatbib() && citeStyles_.size() != 1))
56                         citeStyles_ = biblio::getCiteStyles(usingNatbib());
57         }
58 }
59
60
61 biblio::InfoMap const & ControlCitation::bibkeysInfo() const
62 {
63         return bibkeysInfo_;
64 }
65
66
67 bool ControlCitation::usingNatbib() const
68 {
69     return buffer()->params.use_natbib;
70 }
71
72
73 vector<string> const ControlCitation::getCiteStrings(string const & key) const
74 {
75         vector<string> styles;
76
77         vector<biblio::CiteStyle> const cs =
78                 biblio::getCiteStyles(usingNatbib());
79
80         if (buffer()->params.use_numerical_citations)
81                 styles = biblio::getNumericalStrings(key, bibkeysInfo_, cs);
82         else
83                 styles = biblio::getAuthorYearStrings(key, bibkeysInfo_, cs);
84
85         return styles;
86 }