]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetexternal.h
Enable the external inset to handle unknown templates gracefully.
[lyx.git] / src / insets / insetexternal.h
index a8d4910cd9530380f98f6a52e810d27adac490f8..4916bae6dae61476b8a3702cea3f9a48cb38cd1a 100644 (file)
 #ifndef INSET_EXTERNAL_H
 #define INSET_EXTERNAL_H
 
-#include "insetbutton.h"
-#include "ExternalTemplate.h"
+#include "inset.h"
+#include "graphics/GraphicsTypes.h"
 #include "LString.h"
 
+#include <boost/scoped_ptr.hpp>
+#include <boost/signals/trackable.hpp>
+
+
+class GraphicInset;
+
 ///
-class InsetExternal : public InsetButton {
+class InsetExternal : public Inset, public boost::signals::trackable {
 public:
        /// hold parameters settable from the GUI
        struct Params {
-               Params(string const & f = string(),
-                                       string const & p = string(),
-                                       ExternalTemplate const & t = ExternalTemplate())
-                       : filename(f), parameters(p), templ(t) {}
+               Params();
+               ~Params();
                /// the filename
                string filename;
-               /// the parameters of the current choice
-               string parameters;
                /// the current template used
-               ExternalTemplate templ;
+               string templatename;
+               /// The name of the tempfile used for manipulations.
+               string tempname;
+               /// how the inset is displayed by LyX
+               grfx::DisplayType display;
+               /// The scale of the displayed graphic (If shown).
+               unsigned int lyxscale;
        };
 
        InsetExternal();
        ///
+       InsetExternal(InsetExternal const &);
+       ///
        virtual ~InsetExternal();
        ///
-       virtual dispatch_result localDispatch(FuncRequest const & cmd); 
+       virtual dispatch_result localDispatch(FuncRequest const & cmd);
+       ///
+       void metrics(MetricsInfo &, Dimension &) const;
+       ///
+       void draw(PainterInfo & pi, int x, int y) const;
        /// what appears in the minibuffer when opening
        virtual string const editMessage() const;
        ///
@@ -53,8 +67,8 @@ public:
         If the free_spc (freespacing) variable is set, then this inset
         is in a free-spacing paragraph.
         */
-       virtual int latex(Buffer const *, std::ostream &, LatexRunParams const &,
-                         bool fragile, bool free_spc) const;
+       virtual int latex(Buffer const *, std::ostream &,
+                         LatexRunParams const &) const;
        /// write ASCII output to the ostream
        virtual int ascii(Buffer const *, std::ostream &, int linelen) const;
        /// write LinuxDoc output to the ostream
@@ -69,53 +83,40 @@ public:
        virtual Inset::Code lyxCode() const { return EXTERNAL_CODE; }
 
        ///
-       virtual Inset * clone(Buffer const &, bool same_id = false) const;
-
-       /// returns the text of the button
-       virtual string const getScreenLabel(Buffer const *) const;
+       virtual Inset * clone() const;
 
-       // The following public members are used from the frontends code
+       /// Set the inset parameters.
+       virtual void setParams(Params const &, string const & filepath);
 
-       /// set the parameters from a Params structure
-       virtual void setFromParams(Params const &);
-
-       ///
-       void updateExternal() const;
-
-       /// update the file represented by the template
-       void updateExternal(string const &, Buffer const *) const;
-
-       /// edit file of this template
-       void editExternal() const;
-
-       /// view file of this template
-       void viewExternal() const;
+       /** update the file represented by the template.
+           If \param external_in_tmpdir == true, then the generated file is
+           place in the buffer's temporary directory.
+       */
+       void updateExternal(string const &, Buffer const *,
+                           bool external_in_tmpdir) const;
 
        /// return a copy of our current params
        Params const & params() const;
 
-       ///
-       void setView(BufferView * bv) { view_ = bv; }
-
 private:
-       /// Write the output for a specific file format
-       int write(string const & format, Buffer const *,
-                 std::ostream &) const;
-
-       /// Execute this command in the directory of this document
-       void executeCommand(string const & s, Buffer const * buf) const;
-
-       /// Substitute meta-variables in this string
-       string const doSubstitution(Buffer const *, string const & s) const;
+       /** This method is connected to the graphics loader, so we are
+        *  informed when the image has been loaded.
+        */
+       void statusChanged();
 
-       /// our owning view
-       BufferView * view_;
+       /** Write the output for a specific file format
+           and generate any external data files.
+           If \param external_in_tmpdir == true, then the generated file is
+           place in the buffer's temporary directory.
+       */
+       int write(string const & format, Buffer const *, std::ostream &,
+                 bool external_in_tmpdir = false) const;
 
        /// the current params
        Params params_;
 
-       /// A temp filename
-       string tempname_;
+       /// The thing that actually draws the image on LyX's screen.
+       boost::scoped_ptr<GraphicInset> const renderer_;
 };