]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlExternal.C
Introduce namespace lyx::external.
[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/ExternalTemplate.h"
22
23 namespace external = lyx::external;
24
25 using std::vector;
26
27
28 ControlExternal::ControlExternal(Dialog & parent)
29         : Dialog::Controller(parent)
30 {}
31
32
33 bool ControlExternal::initialiseParams(string const & data)
34 {
35         params_.reset(new InsetExternal::Params);
36         InsetExternalMailer::string2params(data, kernel().buffer(), *params_);
37         return true;
38 }
39
40
41 void ControlExternal::clearParams()
42 {
43         params_.reset();
44 }
45
46
47 void ControlExternal::dispatchParams()
48 {
49         string const lfun = InsetExternalMailer::params2string(params(),
50                                                                kernel().buffer());
51         kernel().dispatch(FuncRequest(LFUN_INSET_APPLY, lfun));
52 }
53
54
55 void ControlExternal::setParams(InsetExternal::Params const & p)
56 {
57         BOOST_ASSERT(params_.get());
58         *params_ = p;
59 }
60
61
62 InsetExternal::Params const & ControlExternal::params() const
63 {
64         BOOST_ASSERT(params_.get());
65         return *params_;
66 }
67
68
69 void ControlExternal::editExternal()
70 {
71         BOOST_ASSERT(params_.get());
72
73         dialog().view().apply();
74         string const lfun =
75                 InsetExternalMailer::params2string(params(), kernel().buffer());
76         kernel().dispatch(FuncRequest(LFUN_EXTERNAL_EDIT, lfun));
77 }
78
79
80 vector<string> const ControlExternal::getTemplates() const
81 {
82         vector<string> result;
83
84         external::TemplateManager::Templates::const_iterator i1, i2;
85         i1 = external::TemplateManager::get().getTemplates().begin();
86         i2 = external::TemplateManager::get().getTemplates().end();
87
88         for (; i1 != i2; ++i1) {
89                 result.push_back(i1->second.lyxName);
90         }
91         return result;
92 }
93
94
95 int ControlExternal::getTemplateNumber(string const & name) const
96 {
97         external::TemplateManager::Templates::const_iterator i1, i2;
98         i1 = external::TemplateManager::get().getTemplates().begin();
99         i2 = external::TemplateManager::get().getTemplates().end();
100         for (int i = 0; i1 != i2; ++i1, ++i) {
101                 if (i1->second.lyxName == name)
102                         return i;
103         }
104
105         // we can get here if a LyX document has a template not installed
106         // on this machine.
107         return -1;
108 }
109
110
111 external::Template ControlExternal::getTemplate(int i) const
112 {
113         external::TemplateManager::Templates::const_iterator i1
114                 = external::TemplateManager::get().getTemplates().begin();
115
116         std::advance(i1, i);
117
118         return i1->second;
119 }
120
121
122 namespace {
123
124 external::Template const * getTemplatePtr(InsetExternal::Params const & params)
125 {
126         external::TemplateManager const & etm =
127                 external::TemplateManager::get();
128         return etm.getTemplateByName(params.templatename());
129 }
130
131 } // namespace anon
132
133
134 string const ControlExternal::Browse(string const & input) const
135 {
136         string const title =  _("Select external file");
137
138         string const bufpath = kernel().bufferFilepath();
139
140         /// Determine the template file extension
141         string pattern = "*";
142         external::Template const * const et_ptr = getTemplatePtr(params());
143         if (et_ptr)
144                 pattern = et_ptr->fileRegExp;
145
146         // FIXME: a temporary hack until the FileDialog interface is updated
147         pattern += '|';
148
149         std::pair<string, string> dir1(N_("Documents|#o#O"),
150                                   string(lyxrc.document_path));
151
152         return browseRelFile(input, bufpath, title, pattern, false, dir1);
153 }