3 * \file InsetExternal.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Asger Alstrup Nielsen
9 * Full author contact details are available in file CREDITS.
12 #ifndef INSET_EXTERNAL_H
13 #define INSET_EXTERNAL_H
16 #include "ExternalTransforms.h"
17 #include "EmbeddedFiles.h"
19 #include "support/FileName.h"
20 #include "support/Translator.h"
22 #include <boost/scoped_ptr.hpp>
23 #include <boost/signals/trackable.hpp>
25 #include "MailInset.h"
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.
42 TempName(TempName const &);
44 TempName & operator=(TempName const &);
45 support::FileName const & operator()() const { return tempname_; }
47 support::FileName tempname_;
50 /// How is the image to be displayed on the LyX screen?
61 /// The translator between the Display enum and corresponding lyx string.
62 Translator<DisplayType, std::string> const & displayTranslator();
64 } // namespace external
67 /// hold parameters settable from the GUI
68 class InsetExternalParams {
70 InsetExternalParams();
72 void write(Buffer const &, std::ostream &) const;
73 bool read(Buffer const &, Lexer &);
75 /// The name of the tempfile used for manipulations.
76 support::FileName const & tempname() const { return tempname_(); }
78 /// The template currently in use.
79 void settemplate(std::string const &);
80 std::string const & templatename() const { return templatename_; }
82 /// The external file.
83 EmbeddedFile 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;
89 external::ClipData clipdata;
90 external::ExtraData extradata;
91 external::ResizeData resizedata;
92 external::RotationData rotationdata;
94 /** if \c true, simply output the filename, maybe wrapped in a
95 * box, rather than generate and display the image etc.
100 external::TempName tempname_;
101 std::string templatename_;
108 class InsetExternal : public Inset, public boost::signals::trackable
113 virtual ~InsetExternal();
115 virtual InsetCode lyxCode() const { return EXTERNAL_CODE; }
117 virtual EDITABLE editable() const { return IS_EDITABLE; }
120 void metrics(MetricsInfo &, Dimension &) const;
122 void draw(PainterInfo & pi, int x, int y) const;
124 virtual void write(Buffer const &, std::ostream &) const;
126 virtual void read(Buffer const &, Lexer & lex);
128 /// \returns the number of rows (\n's) of generated code.
129 int latex(Buffer const &, odocstream &,
130 OutputParams const &) const;
132 int plaintext(Buffer const &, odocstream &,
133 OutputParams const &) const;
135 int docbook(Buffer const &, odocstream &,
136 OutputParams const &) const;
138 /// Update needed features for this inset.
139 virtual void validate(LaTeXFeatures & features) const;
142 InsetExternalParams const & params() const;
144 void setParams(InsetExternalParams const &, Buffer const &);
146 void addPreview(graphics::PreviewLoader &) const;
148 void edit(Cursor & cur, bool front, EntryDirectionType entry_from);
150 bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const;
151 /// external file can be embedded
152 void registerEmbeddedFiles(Buffer const &, EmbeddedFileList &) const;
154 void updateEmbeddedFile(Buffer const &, EmbeddedFile const &);
157 InsetExternal(InsetExternal const &);
159 virtual void doDispatch(Cursor & cur, FuncRequest & cmd);
161 virtual Inset * clone() const;
163 /** This method is connected to the graphics loader, so we are
164 * informed when the image has been loaded.
166 void statusChanged() const;
168 /** Slot receiving a signal that the external file has changed
169 * and the preview should be regenerated.
171 void fileChanged() const;
173 /// The current params
174 InsetExternalParams params_;
175 /// The thing that actually draws the image on LyX's screen.
176 boost::scoped_ptr<RenderBase> renderer_;
180 class InsetExternalMailer : public MailInset {
183 InsetExternalMailer(InsetExternal & inset);
185 virtual Inset & inset() const { return inset_; }
187 virtual std::string const & name() const { return name_; }
189 virtual std::string const inset2string(Buffer const &) const;
191 static void string2params(std::string const &, Buffer const &,
192 InsetExternalParams &);
194 static std::string const params2string(InsetExternalParams const &,
198 static std::string const name_;
200 InsetExternal & inset_;