]> 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 2c02c285d1942d47b421a3772fe0bb9490537658..4916bae6dae61476b8a3702cea3f9a48cb38cd1a 100644 (file)
 // -*- C++ -*-
-/* This file is part of*
- * ====================================================== 
+/**
+ * \file insetexternal.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           LyX, The Document Processor
- *      
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+ * \author Asger Alstrup Nielsen
  *
- * ====================================================== */
+ * Full author contact details are available in file CREDITS
+ */
 
 #ifndef INSET_EXTERNAL_H
 #define INSET_EXTERNAL_H
 
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include "insetbutton.h"
+#include "inset.h"
+#include "graphics/GraphicsTypes.h"
 #include "LString.h"
-#include "../lyx.h"
 
-struct ExternalTemplate;
+#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();
+               ~Params();
+               /// the filename
+               string filename;
+               /// the current template used
+               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();
-       /// what appears in the minibuffer when opening
-       virtual string const EditMessage() const;
        ///
-       virtual void Edit(BufferView *, int x, int y, unsigned int button);
+       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;
        ///
-       virtual EDITABLE Editable() const { return IS_EDITABLE; }
+       virtual EDITABLE editable() const { return IS_EDITABLE; }
        ///
-       virtual void Write(Buffer const *, std::ostream &) const;
+       virtual void write(Buffer const *, std::ostream &) const;
        ///
-       virtual void Read(Buffer const *, LyXLex & lex);
+       virtual void read(Buffer const *, LyXLex & lex);
+
        /** returns the number of rows (\n's) of generated tex code.
         fragile == true means, that the inset should take care about
         fragile commands by adding a \protect before.
         If the free_spc (freespacing) variable is set, then this inset
         is in a free-spacing paragraph.
         */
-       virtual int Latex(Buffer const *, std::ostream &, bool fragile,
-                         bool free_spc) const;
-       ///
-       virtual int Ascii(Buffer const *, std::ostream &) const;
-       ///
-       virtual int Linuxdoc(Buffer const *, std::ostream &) const;
-       ///
-       virtual int DocBook(Buffer const *, std::ostream &) 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
+       virtual int linuxdoc(Buffer const *, std::ostream &) const;
+       /// write DocBook output to the ostream
+       virtual int docbook(Buffer const *, std::ostream &, bool mixcont) const;
+
        /// Updates needed features for this inset.
-       virtual void Validate(LaTeXFeatures & features) const;
+       virtual void validate(LaTeXFeatures & features) const;
 
        /// returns LyX code associated with the inset. Used for TOC, ...)
-       virtual Inset::Code LyxCode() const { return EXTERNAL_CODE; }
-  
-       ///
-       virtual Inset * Clone() const;
-
-       /// returns the text of the button
-       virtual string const getScreenLabel() const;
-
-       /// Callback function for the template drop-down
-       static void templateCB(FL_OBJECT *, long);
+       virtual Inset::Code lyxCode() const { return EXTERNAL_CODE; }
 
-       /// Callback function for the browse button
-       static void browseCB(FL_OBJECT *, long);
-
-       /// Callback function for the edit button
-       static void editCB(FL_OBJECT *, long);
+       ///
+       virtual Inset * clone() const;
 
-       /// Callback function for the view button
-       static void viewCB(FL_OBJECT *, long);
+       /// Set the inset parameters.
+       virtual void setParams(Params const &, string const & filepath);
 
-       /// Callback function for the update production button
-       static void updateCB(FL_OBJECT *, long);
+       /** 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;
 
-       /// Callback function for the ok button
-       static void okCB(FL_OBJECT *, long);
+       /// return a copy of our current params
+       Params const & params() const;
 
-       /// Callback function for the cancel button
-       static void cancelCB(FL_OBJECT *, long);
 private:
-       /// Write the output for a specific file format
-       int write(string const & format, Buffer const *,
-                 std::ostream &) const;
-
-       /// Apply the changes
-       void doApply(BufferView * bv);
-
-       /// Execute this command in the directory of this document
-       void executeCommand(string const & s, Buffer const * buf) const;
-
-       /// Update if automatic
-       void automaticUpdate(BufferView const *) const;
-
-       /// Do update
-       void doUpdate(BufferView const *) const;
-       /// Do edit
-       void doEdit(BufferView const *) const;
-       /// Do view
-       void doView(BufferView const *) 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();
 
-       /** Get the LyX name of the currently selected
-           template in the choice list
+       /** 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.
        */
-       string const getCurrentTemplate() const;
+       int write(string const & format, Buffer const *, std::ostream &,
+                 bool external_in_tmpdir = false) const;
 
-       /// Get a certain template from a LyX name
-       ExternalTemplate const getTemplate(string const & lyxname) const;
+       /// the current params
+       Params params_;
 
-       /**
-         Get the number starting from 1 of a template with a 
-         specific LyX name for the choice list
-        */
-       int getTemplateNumber(string const & guiname) const;
+       /// The thing that actually draws the image on LyX's screen.
+       boost::scoped_ptr<GraphicInset> const renderer_;
+};
 
-       /// Get the LyX name of a template with a given number starting from 1
-       string const getTemplateName(int n) const;
 
-       /// Get a string with all the GUI template names separated by |
-       string const getTemplateString() const;
+#include "mailinset.h"
 
+class InsetExternalMailer : public MailInset {
+public:
        ///
-       struct Holder {
-               InsetExternal * inset;
-               BufferView * view;
-       };
+       InsetExternalMailer(InsetExternal & inset);
        ///
-       Holder holder;
-
-       /// The external inset form
-       FD_form_external * form_external;
-
+       virtual InsetBase & inset() const { return inset_; }
        ///
-       string templatename;
-
+       virtual string const & name() const { return name_; }
        ///
-       string filename;
-
+       virtual string const inset2string() const;
        ///
-       string parameters;
-
-       /// A temp filename
-       string tempname;
+       static void string2params(string const &, InsetExternal::Params &);
+       ///
+       static string const params2string(InsetExternal::Params const &);
+private:
+       ///
+       static string const name_;
+       ///
+       InsetExternal & inset_;
 };
 
 #endif