1 /* This file is part of
2 * ======================================================
4 * LyX, The Document Processor
6 * Copyright 2001 The LyX Team.
8 * ======================================================
10 * \file ControlExternal.C
11 * \author Asger Alstrup
13 * \author Angus Leeming, a.leeming@ic.ac.uk
22 #pragma implementation
25 #include "ControlExternal.h"
30 #include "support/filetools.h"
31 #include "frontends/FileDialog.h"
32 #include "lyx_gui_misc.h" // WriteAlert
37 ControlExternal::ControlExternal(LyXView & lv, Dialogs & d)
38 : ControlInset<InsetExternal, InsetExternal::Params>(lv, d)
40 d_.showExternal.connect(SigC::slot(this, &ControlExternal::showInset));
44 InsetExternal::Params const ControlExternal::getParams(string const &)
46 return InsetExternal::Params();
49 InsetExternal::Params const
50 ControlExternal::getParams(InsetExternal const & inset)
52 return inset.params();
56 void ControlExternal::editExternal()
58 inset()->setFromParams(params());
59 inset()->editExternal();
62 void ControlExternal::viewExternal()
64 inset()->setFromParams(params());
65 inset()->viewExternal();
68 void ControlExternal::updateExternal()
70 inset()->setFromParams(params());
71 inset()->updateExternal();
74 vector<string> const ControlExternal::getTemplates() const
76 vector<string> result;
78 ExternalTemplateManager::Templates::const_iterator i1, i2;
79 i1 = ExternalTemplateManager::get().getTemplates().begin();
80 i2 = ExternalTemplateManager::get().getTemplates().end();
82 for (; i1 != i2; ++i1) {
83 result.push_back(i1->second.lyxName);
89 int ControlExternal::getTemplateNumber(string const & name) const
93 ExternalTemplateManager::Templates::const_iterator i1, i2;
94 i1 = ExternalTemplateManager::get().getTemplates().begin();
95 i2 = ExternalTemplateManager::get().getTemplates().end();
96 for (; i1 != i2; ++i1) {
97 if (i1->second.lyxName == name)
102 // we can get here if a LyX document has a template not installed
108 ExternalTemplate ControlExternal::getTemplate(int i) const
110 ExternalTemplateManager::Templates::const_iterator i1;
111 i1 = ExternalTemplateManager::get().getTemplates().begin();
112 for (int n = 1; n < i; ++n)
119 string const ControlExternal::Browse(string const & input) const
121 string buf = MakeAbsPath(lv_.buffer()->fileName());
122 string buf2 = OnlyPath(buf);
124 if (!input.empty()) {
125 buf = MakeAbsPath(input, buf2);
128 buf = OnlyPath(lv_.buffer()->fileName());
131 FileDialog fileDlg(&lv_,
132 _("Select external file"),
133 LFUN_SELECT_FILE_SYNC,
134 make_pair(string(_("Document")), string(buf)));
136 /// Determine the template file extension
137 ExternalTemplate const & et = params().templ;
139 string regexp = et.fileRegExp;
143 // FIXME: a temporary hack until the FileDialog interface is updated
150 string const path = (once) ? current_path : buf;
151 FileDialog::Result result = fileDlg.Select(path, regexp, input);
153 if (result.second.empty())
156 string p = result.second;
158 buf = MakeRelPath(input, buf2);
159 current_path = OnlyPath(input);
162 if (contains(input, "#") ||
163 contains(input, "~") ||
164 contains(input, "$") ||
165 contains(input, "%")) {
166 WriteAlert(_("Filename can't contain any "
167 "of these characters:"),
168 // xgettext:no-c-format
169 _("'#', '~', '$' or '%'."));