X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetexternal.h;h=2e33880a20132fb3bb492464c2f6da0b2c9c1128;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=c7f06270b5bf4156ff2d9c77ca84260510274fe4;hpb=7668244a7764ef252dbd3201332ab47107a68853;p=lyx.git diff --git a/src/insets/insetexternal.h b/src/insets/insetexternal.h index c7f06270b5..2e33880a20 100644 --- a/src/insets/insetexternal.h +++ b/src/insets/insetexternal.h @@ -6,123 +6,172 @@ * * \author Asger Alstrup Nielsen * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. */ #ifndef INSET_EXTERNAL_H #define INSET_EXTERNAL_H #include "inset.h" -#include "graphics/GraphicsTypes.h" +#include "ExternalTransforms.h" + #include "support/filename.h" -#include "LString.h" +#include "support/translator.h" #include #include +#include "mailinset.h" -class RenderInset; -/// -class InsetExternal : public Inset, public boost::signals::trackable { +/** No two InsetExternalParams variables can have the same temporary file. + * This class has copy-semantics but the copy constructor + * and assignment operator simply call the default constructor. + * Use of this class enables us to use the compiler-generated + * copy constructor and assignment operator for the + * InsetExternalParams class. + */ +namespace lyx { + +namespace external { + +class TempName { +public: + TempName(); + TempName(TempName const &); + ~TempName(); + TempName & operator=(TempName const &); + support::FileName const & operator()() const { return tempname_; } +private: + support::FileName tempname_; +}; + +/// How is the image to be displayed on the LyX screen? +enum DisplayType { + DefaultDisplay, + MonochromeDisplay, + GrayscaleDisplay, + ColorDisplay, + PreviewDisplay, + NoDisplay +}; + + +/// The translator between the Display enum and corresponding lyx string. +Translator const & displayTranslator(); + +} // namespace external + + +/// hold parameters settable from the GUI +class InsetExternalParams { public: - /// hold parameters settable from the GUI - struct Params { - Params(); - ~Params(); - /// the filename - lyx::support::FileName filename; - /// the current template used - string templatename; - /// The name of the tempfile used for manipulations. - string tempname; - /// how the inset is displayed by LyX - lyx::graphics::DisplayType display; - /// The scale of the displayed graphic (If shown). - unsigned int lyxscale; - }; + InsetExternalParams(); + + void write(Buffer const &, std::ostream &) const; + bool read(Buffer const &, LyXLex &); + + /// The name of the tempfile used for manipulations. + support::FileName const & tempname() const { return tempname_(); } + + /// The template currently in use. + void settemplate(std::string const &); + std::string const & templatename() const { return templatename_; } + + /// The external file. + support::DocFileName filename; + /// How the inset is to be displayed by LyX. + external::DisplayType display; + /// The scale of the displayed graphic (if shown). + unsigned int lyxscale; + + external::ClipData clipdata; + external::ExtraData extradata; + external::ResizeData resizedata; + external::RotationData rotationdata; + + /** if \c true, simply output the filename, maybe wrapped in a + * box, rather than generate and display the image etc. + */ + bool draft; + +private: + external::TempName tempname_; + std::string templatename_; +}; + + +class RenderBase; +/// +class InsetExternal : public InsetOld, public boost::signals::trackable +{ +public: InsetExternal(); /// - InsetExternal(InsetExternal const &); - /// virtual ~InsetExternal(); /// - virtual dispatch_result localDispatch(FuncRequest const & cmd); + virtual InsetBase::Code lyxCode() const { return EXTERNAL_CODE; } + /// + virtual EDITABLE editable() const { return IS_EDITABLE; } + /// - void metrics(MetricsInfo &, Dimension &) const; + bool 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 void write(Buffer const &, std::ostream &) const; + /// + virtual void read(Buffer const &, LyXLex & lex); + + /// \returns the number of rows (\n's) of generated code. + virtual int latex(Buffer const &, odocstream &, + OutputParams const &) const; /// - virtual void write(Buffer const *, std::ostream &) const; + virtual int plaintext(Buffer const &, odocstream &, + OutputParams const &) const; /// - virtual void read(Buffer const *, LyXLex & lex); + virtual int docbook(Buffer const &, odocstream &, + OutputParams const &) const; - /** 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 &, - 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. + /// Update needed features for this inset. 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 InsetBase * clone() const; - - /// return a copy of our current params - Params const & params() const; - - /// Set the inset parameters. - virtual void setParams(Params 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; + InsetExternalParams const & params() const; + /// + void setParams(InsetExternalParams const &, Buffer const &); + /// + void addPreview(graphics::PreviewLoader &) const; + /// + void edit(LCursor & cur, bool left); + /// + bool getStatus(LCursor &, FuncRequest const &, FuncStatus &) const; +protected: + InsetExternal(InsetExternal const &); + /// + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); private: + virtual std::auto_ptr doClone() const; + /** This method is connected to the graphics loader, so we are * informed when the image has been loaded. */ - void statusChanged(); - - /** 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; + void statusChanged() const; - /// the current params - Params params_; + /** Slot receiving a signal that the external file has changed + * and the preview should be regenerated. + */ + void fileChanged() const; + /// The current params + InsetExternalParams params_; /// The thing that actually draws the image on LyX's screen. - boost::scoped_ptr renderer_; + boost::scoped_ptr renderer_; }; -#include "mailinset.h" - class InsetExternalMailer : public MailInset { public: /// @@ -130,20 +179,22 @@ public: /// virtual InsetBase & inset() const { return inset_; } /// - virtual string const & name() const { return name_; } + virtual std::string const & name() const { return name_; } /// - virtual string const inset2string(Buffer const &) const; + virtual std::string const inset2string(Buffer const &) const; /// - static void string2params(string const &, Buffer const &, - InsetExternal::Params &); + static void string2params(std::string const &, Buffer const &, + InsetExternalParams &); /// - static string const params2string(InsetExternal::Params const &, - Buffer const &); + static std::string const params2string(InsetExternalParams const &, + Buffer const &); private: /// - static string const name_; + static std::string const name_; /// InsetExternal & inset_; }; +} // namespace lyx + #endif