]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/controllers/ControlExternal.C
Add a buffer_path arg to InsetGraphicsMailer's params2string, string2params.
[lyx.git] / src / frontends / controllers / ControlExternal.C
index 7c5ee9fd48ff0c76fffd810d8972db08711835f8..8874e85487920ac03d6923d454eef6b155feeb01 100644 (file)
 #include "gettext.h"
 #include "helper_funcs.h"
 #include "lyxrc.h"
+
+#include "insets/ExternalTemplate.h"
+
+#include "support/LAssert.h"
 #include <vector>
 
+using namespace lyx::support;
 using std::vector;
 
 
@@ -28,54 +33,48 @@ ControlExternal::ControlExternal(Dialog & parent)
 {}
 
 
-void ControlExternal::initialiseParams(string const & data)
+bool ControlExternal::initialiseParams(string const & data)
 {
-       inset_.reset(new InsetExternal);
-       InsetExternal::Params params;
-       InsetExternalMailer::string2params(data, params);
-       inset_->setFromParams(params);
-       inset_->setView(kernel().bufferview());
+       params_.reset(new InsetExternal::Params);
+       InsetExternalMailer::string2params(data, *params_);
+       return true;
 }
 
 
 void ControlExternal::clearParams()
 {
-       inset_.reset();
+       params_.reset();
 }
 
 
 void ControlExternal::dispatchParams()
 {
-       InsetExternal::Params p = params();
-       string const lfun = InsetExternalMailer::params2string("external", p);
+       string const lfun = InsetExternalMailer::params2string(params());
        kernel().dispatch(FuncRequest(LFUN_INSET_APPLY, lfun));
 }
 
 
 void ControlExternal::setParams(InsetExternal::Params const & p)
 {
-       inset_->setFromParams(p);
+       Assert(params_.get());
+       *params_ = p;
 }
 
 
-void ControlExternal::editExternal()
+InsetExternal::Params const & ControlExternal::params() const
 {
-       dialog().view().apply();
-       inset_->editExternal();
+       Assert(params_.get());
+       return *params_;
 }
 
 
-void ControlExternal::viewExternal()
+void ControlExternal::editExternal()
 {
-       dialog().view().apply();
-       inset_->viewExternal();
-}
-
+       Assert(params_.get());
 
-void ControlExternal::updateExternal()
-{
        dialog().view().apply();
-       inset_->updateExternal();
+       string const lfun = InsetExternalMailer::params2string(params());
+       kernel().dispatch(FuncRequest(LFUN_EXTERNAL_EDIT, lfun));
 }
 
 
@@ -115,12 +114,26 @@ ExternalTemplate ControlExternal::getTemplate(int i) const
        ExternalTemplateManager::Templates::const_iterator i1
                = ExternalTemplateManager::get().getTemplates().begin();
 
-       std::advance(i1,  i);
+       std::advance(i1, i);
 
        return i1->second;
 }
 
 
+namespace {
+
+ExternalTemplate const * getTemplatePtr(InsetExternal::Params const & params)
+{
+       ExternalTemplateManager & etm = ExternalTemplateManager::get();
+       ExternalTemplate const & templ = etm.getTemplateByName(params.templatename);
+       if (templ.lyxName.empty())
+               return 0;
+       return &templ;
+}
+
+} // namespace anon
+
+
 string const ControlExternal::Browse(string const & input) const
 {
        string const title =  _("Select external file");
@@ -128,10 +141,10 @@ string const ControlExternal::Browse(string const & input) const
        string const bufpath = kernel().buffer()->filePath();
 
        /// Determine the template file extension
-       ExternalTemplate const & et = params().templ;
-       string pattern = et.fileRegExp;
-       if (pattern.empty())
-               pattern = "*";
+       string pattern = "*";
+       ExternalTemplate const * const et_ptr = getTemplatePtr(params());
+       if (et_ptr)
+               pattern = et_ptr->fileRegExp;
 
        // FIXME: a temporary hack until the FileDialog interface is updated
        pattern += '|';