// -*- C++ -*- /** * \file insetexternal.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Asger Alstrup Nielsen * * 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 "support/filename.h" #include #include #include "support/std_string.h" class RenderInset; /// class InsetExternal : public InsetOld, public boost::signals::trackable { /** No two Params variables can have the same temporary file. * This struct has copy-semantics but the copy constructor * and assignment operator simply call the default constructor. * Use of this struct enables us to use the compiler-generated * copy constructor and assignment operator for the Params struct. */ struct TempName { TempName(); TempName(TempName const &); ~TempName(); TempName & operator=(TempName const &); string const & operator()() const { return tempname_; } private: string tempname_; }; public: /// hold parameters settable from the GUI struct Params { Params(); /// The name of the tempfile used for manipulations. string const & tempname() const { return tempname_(); } /// the current template used void settemplate(string const &); string const & templatename() const { return templatename_; } /// the filename lyx::support::FileName filename; /// how the inset is displayed by LyX lyx::graphics::DisplayType display; /// The scale of the displayed graphic (If shown). unsigned int lyxscale; private: TempName tempname_; string templatename_; }; InsetExternal(); /// InsetExternal(InsetExternal const &); /// virtual ~InsetExternal(); /// virtual dispatch_result localDispatch(FuncRequest const & cmd); /// void metrics(MetricsInfo &, Dimension &) const; /// void draw(PainterInfo & pi, int x, int y) 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 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. virtual void validate(LaTeXFeatures & features) const; /// returns LyX code associated with the inset. Used for TOC, ...) virtual InsetOld::Code lyxCode() const { return EXTERNAL_CODE; } /// virtual std::auto_ptr clone() const; /// return a copy of our current params Params const & params() const; /// Set the inset parameters. virtual void setParams(Params const &, Buffer 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; private: /** 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; /// the current params Params params_; /// The thing that actually draws the image on LyX's screen. boost::scoped_ptr renderer_; }; #include "mailinset.h" class InsetExternalMailer : public MailInset { public: /// InsetExternalMailer(InsetExternal & inset); /// virtual InsetBase & inset() const { return inset_; } /// virtual string const & name() const { return name_; } /// virtual string const inset2string(Buffer const &) const; /// static void string2params(string const &, Buffer const &, InsetExternal::Params &); /// static string const params2string(InsetExternal::Params const &, Buffer const &); private: /// static string const name_; /// InsetExternal & inset_; }; #endif