]> git.lyx.org Git - lyx.git/blob - src/insets/InsetExternal.h
Fix text frame drawing.
[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 "ExternalTransforms.h"
17 #include "EmbeddedFiles.h"
18
19 #include "support/FileName.h"
20 #include "support/Translator.h"
21
22 #include <boost/scoped_ptr.hpp>
23 #include <boost/signals/trackable.hpp>
24
25 #include "MailInset.h"
26
27
28 /** No two InsetExternalParams variables can have the same temporary file.
29  *  This class has copy-semantics but the copy constructor
30  *  and assignment operator simply call the default constructor.
31  *  Use of this class enables us to use the compiler-generated
32  *  copy constructor and assignment operator for the
33  *  InsetExternalParams class.
34  */
35 namespace lyx {
36
37 namespace external {
38
39 class TempName {
40 public:
41         TempName();
42         TempName(TempName const &);
43         ~TempName();
44         TempName & operator=(TempName const &);
45         support::FileName const & operator()() const { return tempname_; }
46 private:
47         support::FileName tempname_;
48 };
49
50 /// How is the image to be displayed on the LyX screen?
51 enum DisplayType {
52         DefaultDisplay,
53         MonochromeDisplay,
54         GrayscaleDisplay,
55         ColorDisplay,
56         PreviewDisplay,
57         NoDisplay
58 };
59
60
61 /// The translator between the Display enum and corresponding lyx string.
62 Translator<DisplayType, std::string> const & displayTranslator();
63
64 } // namespace external
65
66
67 /// hold parameters settable from the GUI
68 class InsetExternalParams {
69 public:
70         InsetExternalParams();
71
72         void write(Buffer const &, std::ostream &) const;
73         bool read(Buffer const &, Lexer &);
74
75         /// The name of the tempfile used for manipulations.
76         support::FileName const & tempname() const { return tempname_(); }
77
78         /// The template currently in use.
79         void settemplate(std::string const &);
80         std::string const & templatename() const { return templatename_; }
81
82         /// The external file.
83         support::DocFileName filename;
84         /// How the inset is to be displayed by LyX.
85         external::DisplayType display;
86         /// The scale of the displayed graphic (if shown).
87         unsigned int lyxscale;
88
89         external::ClipData     clipdata;
90         external::ExtraData    extradata;
91         external::ResizeData   resizedata;
92         external::RotationData rotationdata;
93
94         /** if \c true, simply output the filename, maybe wrapped in a
95          *  box, rather than generate and display the image etc.
96          */
97         bool draft;
98
99 private:
100         external::TempName tempname_;
101         std::string templatename_;
102 };
103
104
105 class RenderBase;
106
107 ///
108 class InsetExternal : public Inset, public boost::signals::trackable
109 {
110 public:
111         InsetExternal();
112         ///
113         virtual ~InsetExternal();
114         ///
115         virtual Inset::Code lyxCode() const { return EXTERNAL_CODE; }
116         ///
117         virtual EDITABLE editable() const { return IS_EDITABLE; }
118
119         ///
120         bool metrics(MetricsInfo &, Dimension &) const;
121         ///
122         void draw(PainterInfo & pi, int x, int y) const;
123         ///
124         virtual void write(Buffer const &, std::ostream &) const;
125         ///
126         virtual void read(Buffer const &, Lexer & lex);
127
128         /// \returns the number of rows (\n's) of generated code.
129         int latex(Buffer const &, odocstream &,
130                   OutputParams const &) const;
131         ///
132         int plaintext(Buffer const &, odocstream &,
133                       OutputParams const &) const;
134         ///
135         int docbook(Buffer const &, odocstream &,
136                     OutputParams const &) const;
137
138         /// Update needed features for this inset.
139         virtual void validate(LaTeXFeatures & features) const;
140
141         ///
142         InsetExternalParams const & params() const;
143         ///
144         void setParams(InsetExternalParams const &, Buffer const &);
145         ///
146         void addPreview(graphics::PreviewLoader &) const;
147         ///
148         void edit(Cursor & cur, bool left);
149         ///
150         bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const;
151         /// external file can be embedded
152         void registerEmbeddedFiles(Buffer const &, EmbeddedFiles &,
153                         ParConstIterator const &) const;
154
155 protected:
156         InsetExternal(InsetExternal const &);
157         ///
158         virtual void doDispatch(Cursor & cur, FuncRequest & cmd);
159 private:
160         virtual Inset * clone() const;
161
162         /** This method is connected to the graphics loader, so we are
163          *  informed when the image has been loaded.
164          */
165         void statusChanged() const;
166
167         /** Slot receiving a signal that the external file has changed
168          *  and the preview should be regenerated.
169          */
170         void fileChanged() const;
171
172         /// The current params
173         InsetExternalParams params_;
174         /// The thing that actually draws the image on LyX's screen.
175         boost::scoped_ptr<RenderBase> renderer_;
176 };
177
178
179 class InsetExternalMailer : public MailInset {
180 public:
181         ///
182         InsetExternalMailer(InsetExternal & inset);
183         ///
184         virtual Inset & inset() const { return inset_; }
185         ///
186         virtual std::string const & name() const { return name_; }
187         ///
188         virtual std::string const inset2string(Buffer const &) const;
189         ///
190         static void string2params(std::string const &, Buffer const &,
191                                   InsetExternalParams &);
192         ///
193         static std::string const params2string(InsetExternalParams const &,
194                                                Buffer const &);
195 private:
196         ///
197         static std::string const name_;
198         ///
199         InsetExternal & inset_;
200 };
201
202 } // namespace lyx
203
204 #endif