]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlExternal.C
Fix a bunch of doxygen warnings.
[lyx.git] / src / frontends / controllers / ControlExternal.C
1 /**
2  * \file ControlExternal.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Asger Alstrup
7  * \author John Levon
8  * \author Angus Leeming
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #include <config.h>
14
15 #include "ControlExternal.h"
16 #include "funcrequest.h"
17 #include "gettext.h"
18 #include "helper_funcs.h"
19 #include "lyxrc.h"
20
21 #include "insets/insetexternal.h"
22 #include "insets/ExternalSupport.h"
23 #include "insets/ExternalTemplate.h"
24
25
26 namespace external = lyx::external;
27
28 using std::vector;
29 using std::string;
30
31
32 ControlExternal::ControlExternal(Dialog & parent)
33         : Dialog::Controller(parent)
34 {}
35
36
37 bool ControlExternal::initialiseParams(string const & data)
38 {
39         params_.reset(new InsetExternalParams);
40         InsetExternalMailer::string2params(data, kernel().buffer(), *params_);
41         return true;
42 }
43
44
45 void ControlExternal::clearParams()
46 {
47         params_.reset();
48 }
49
50
51 void ControlExternal::dispatchParams()
52 {
53         string const lfun = InsetExternalMailer::params2string(params(),
54                                                                kernel().buffer());
55         kernel().dispatch(FuncRequest(LFUN_INSET_APPLY, lfun));
56 }
57
58
59 void ControlExternal::setParams(InsetExternalParams const & p)
60 {
61         BOOST_ASSERT(params_.get());
62         *params_ = p;
63 }
64
65
66 InsetExternalParams const & ControlExternal::params() const
67 {
68         BOOST_ASSERT(params_.get());
69         return *params_;
70 }
71
72
73 void ControlExternal::editExternal()
74 {
75         BOOST_ASSERT(params_.get());
76
77         dialog().view().apply();
78         string const lfun =
79                 InsetExternalMailer::params2string(params(), kernel().buffer());
80         kernel().dispatch(FuncRequest(LFUN_EXTERNAL_EDIT, lfun));
81 }
82
83
84 vector<string> const ControlExternal::getTemplates() const
85 {
86         vector<string> result;
87
88         external::TemplateManager::Templates::const_iterator i1, i2;
89         i1 = external::TemplateManager::get().getTemplates().begin();
90         i2 = external::TemplateManager::get().getTemplates().end();
91
92         for (; i1 != i2; ++i1) {
93                 result.push_back(i1->second.lyxName);
94         }
95         return result;
96 }
97
98
99 int ControlExternal::getTemplateNumber(string const & name) const
100 {
101         external::TemplateManager::Templates::const_iterator i1, i2;
102         i1 = external::TemplateManager::get().getTemplates().begin();
103         i2 = external::TemplateManager::get().getTemplates().end();
104         for (int i = 0; i1 != i2; ++i1, ++i) {
105                 if (i1->second.lyxName == name)
106                         return i;
107         }
108
109         // we can get here if a LyX document has a template not installed
110         // on this machine.
111         return -1;
112 }
113
114
115 external::Template ControlExternal::getTemplate(int i) const
116 {
117         external::TemplateManager::Templates::const_iterator i1
118                 = external::TemplateManager::get().getTemplates().begin();
119
120         std::advance(i1, i);
121
122         return i1->second;
123 }
124
125
126 string const ControlExternal::Browse(string const & input) const
127 {
128         string const title =  _("Select external file");
129
130         string const bufpath = kernel().bufferFilepath();
131
132         /// Determine the template file extension
133         string pattern = "*";
134         external::Template const * const et_ptr =
135                 external::getTemplatePtr(params());
136         if (et_ptr)
137                 pattern = et_ptr->fileRegExp;
138
139         // FIXME: a temporary hack until the FileDialog interface is updated
140         pattern += '|';
141
142         std::pair<string, string> dir1(N_("Documents|#o#O"),
143                                   string(lyxrc.document_path));
144
145         return browseRelFile(input, bufpath, title, pattern, false, dir1);
146 }