]> git.lyx.org Git - lyx.git/blob - src/insets/insetexternal.h
8f71ff76368f3c7205bd81a337388d11d3bcf85e
[lyx.git] / src / insets / insetexternal.h
1 // -*- C++ -*-
2 /**
3  * \file insetexternal.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Asger Alstrup Nielsen
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #ifndef INSET_EXTERNAL_H
13 #define INSET_EXTERNAL_H
14
15 #include "inset.h"
16 #include "graphics/GraphicsTypes.h"
17 #include "support/filename.h"
18 #include "LString.h"
19
20 #include <boost/scoped_ptr.hpp>
21 #include <boost/signals/trackable.hpp>
22
23
24 class RenderInset;
25
26 ///
27 class InsetExternal : public Inset, public boost::signals::trackable {
28 public:
29         /// hold parameters settable from the GUI
30         struct Params {
31                 Params();
32                 ~Params();
33                 /// the filename
34                 lyx::support::FileName filename;
35                 /// the current template used
36                 string templatename;
37                 /// The name of the tempfile used for manipulations.
38                 string tempname;
39                 /// how the inset is displayed by LyX
40                 lyx::graphics::DisplayType display;
41                 /// The scale of the displayed graphic (If shown).
42                 unsigned int lyxscale;
43         };
44
45         InsetExternal();
46         ///
47         InsetExternal(InsetExternal const &);
48         ///
49         virtual ~InsetExternal();
50         ///
51         virtual dispatch_result localDispatch(FuncRequest const & cmd);
52         ///
53         void metrics(MetricsInfo &, Dimension &) const;
54         ///
55         void draw(PainterInfo & pi, int x, int y) const;
56         /// what appears in the minibuffer when opening
57         virtual string const editMessage() const;
58         ///
59         virtual EDITABLE editable() const { return IS_EDITABLE; }
60         ///
61         virtual void write(Buffer const *, std::ostream &) const;
62         ///
63         virtual void read(Buffer const *, LyXLex & lex);
64
65         /** returns the number of rows (\n's) of generated tex code.
66          fragile == true means, that the inset should take care about
67          fragile commands by adding a \protect before.
68          If the free_spc (freespacing) variable is set, then this inset
69          is in a free-spacing paragraph.
70          */
71         virtual int latex(Buffer const *, std::ostream &,
72                           LatexRunParams const &) const;
73         /// write ASCII output to the ostream
74         virtual int ascii(Buffer const *, std::ostream &, int linelen) const;
75         /// write LinuxDoc output to the ostream
76         virtual int linuxdoc(Buffer const *, std::ostream &) const;
77         /// write DocBook output to the ostream
78         virtual int docbook(Buffer const *, std::ostream &, bool mixcont) const;
79
80         /// Updates needed features for this inset.
81         virtual void validate(LaTeXFeatures & features) const;
82
83         /// returns LyX code associated with the inset. Used for TOC, ...)
84         virtual Inset::Code lyxCode() const { return EXTERNAL_CODE; }
85
86         ///
87         virtual InsetBase * clone() const;
88
89         /// return a copy of our current params
90         Params const & params() const;
91
92         /// Set the inset parameters.
93         virtual void setParams(Params const &);
94
95         virtual BufferView * view() const;
96
97         /** update the file represented by the template.
98             If \param external_in_tmpdir == true, then the generated file is
99             place in the buffer's temporary directory.
100         */
101         void updateExternal(string const &, Buffer const *,
102                             bool external_in_tmpdir) const;
103
104 private:
105         /** This method is connected to the graphics loader, so we are
106          *  informed when the image has been loaded.
107          */
108         void statusChanged();
109
110         /** Write the output for a specific file format
111             and generate any external data files.
112             If \param external_in_tmpdir == true, then the generated file is
113             place in the buffer's temporary directory.
114         */
115         int write(string const & format, Buffer const *, std::ostream &,
116                   bool external_in_tmpdir = false) const;
117
118         /// the current params
119         Params params_;
120
121         /// The thing that actually draws the image on LyX's screen.
122         boost::scoped_ptr<RenderInset> renderer_;
123 };
124
125
126 #include "mailinset.h"
127
128 class InsetExternalMailer : public MailInset {
129 public:
130         ///
131         InsetExternalMailer(InsetExternal & inset);
132         ///
133         virtual InsetBase & inset() const { return inset_; }
134         ///
135         virtual string const & name() const { return name_; }
136         ///
137         virtual string const inset2string() const;
138         ///
139         static void string2params(string const &, Buffer const *,
140                                   InsetExternal::Params &);
141         ///
142         static string const params2string(InsetExternal::Params const &,
143                                           Buffer const *);
144 private:
145         ///
146         static string const name_;
147         ///
148         InsetExternal & inset_;
149 };
150
151 #endif