X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetexternal.h;h=2e33880a20132fb3bb492464c2f6da0b2c9c1128;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=c4287f31c90878dbccc0e9b85aba4f401df5c28c;hpb=ad6e8a6e7be96b45671d9b111e53339739cf2702;p=lyx.git diff --git a/src/insets/insetexternal.h b/src/insets/insetexternal.h index c4287f31c9..2e33880a20 100644 --- a/src/insets/insetexternal.h +++ b/src/insets/insetexternal.h @@ -6,120 +6,171 @@ * * \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 "insetbutton.h" -#include "ExternalTemplate.h" -#include "LString.h" +#include "inset.h" +#include "ExternalTransforms.h" -/// -class InsetExternal : public InsetButton { +#include "support/filename.h" +#include "support/translator.h" + +#include +#include + +#include "mailinset.h" + + +/** 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: - /// hold parameters settable from the GUI - struct Params { - Params(string const & f = string(), - string const & p = string(), - ExternalTemplate const & t = ExternalTemplate()) - : filename(f), parameters(p), templ(t) {} - /// the filename - string filename; - /// the parameters of the current choice - string parameters; - /// the current template used - ExternalTemplate templ; - }; + TempName(); + TempName(TempName const &); + ~TempName(); + TempName & operator=(TempName const &); + support::FileName const & operator()() const { return tempname_; } +private: + support::FileName tempname_; +}; - InsetExternal(); - /// - virtual ~InsetExternal(); - /// - virtual dispatch_result localDispatch(FuncRequest const & cmd); - /// 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); +/// How is the image to be displayed on the LyX screen? +enum DisplayType { + DefaultDisplay, + MonochromeDisplay, + GrayscaleDisplay, + ColorDisplay, + PreviewDisplay, + NoDisplay +}; - /** 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 Inset::Code lyxCode() const { return EXTERNAL_CODE; } +/// The translator between the Display enum and corresponding lyx string. +Translator const & displayTranslator(); - /// - virtual Inset * clone() const; +} // namespace external - /// returns the text of the button - virtual string const getScreenLabel(Buffer const *) const; - // The following public members are used from the frontends code +/// hold parameters settable from the GUI +class InsetExternalParams { +public: + InsetExternalParams(); - /// set the parameters from a Params structure - virtual void setFromParams(Params const &); + void write(Buffer const &, std::ostream &) const; + bool read(Buffer const &, LyXLex &); - /// - void updateExternal() const; + /// 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; - /// update the file represented by the template - void updateExternal(string const &, Buffer const *) const; +private: + external::TempName tempname_; + std::string templatename_; +}; - /// edit file of this template - void editExternal() const; - /// view file of this template - void viewExternal() const; +class RenderBase; - /// return a copy of our current params - Params const & params() const; +/// +class InsetExternal : public InsetOld, public boost::signals::trackable +{ +public: + InsetExternal(); + /// + virtual ~InsetExternal(); + /// + virtual InsetBase::Code lyxCode() const { return EXTERNAL_CODE; } + /// + virtual EDITABLE editable() const { return IS_EDITABLE; } /// - void setView(BufferView * bv) { view_ = bv; } + bool metrics(MetricsInfo &, Dimension &) const; + /// + void draw(PainterInfo & pi, int x, int y) const; + /// + virtual void write(Buffer const &, std::ostream &) const; + /// + virtual void read(Buffer const &, LyXLex & lex); -private: - /// Write the output for a specific file format - int write(string const & format, Buffer const *, - std::ostream &) const; + /// \returns the number of rows (\n's) of generated code. + virtual int latex(Buffer const &, odocstream &, + OutputParams const &) const; + /// + virtual int plaintext(Buffer const &, odocstream &, + OutputParams const &) const; + /// + virtual int docbook(Buffer const &, odocstream &, + OutputParams const &) const; - /// Execute this command in the directory of this document - void executeCommand(string const & s, Buffer const * buf) const; + /// Update needed features for this inset. + virtual void validate(LaTeXFeatures & features) const; - /// Substitute meta-variables in this string - string const doSubstitution(Buffer const *, string const & s) 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; - /// our owning view - BufferView * view_; +protected: + InsetExternal(InsetExternal const &); + /// + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); +private: + virtual std::auto_ptr doClone() const; - /// the current params - Params params_; + /** This method is connected to the graphics loader, so we are + * informed when the image has been loaded. + */ + void statusChanged() const; - /// A temp filename - string tempname_; -}; + /** 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_; +}; -#include "mailinset.h" class InsetExternalMailer : public MailInset { public: @@ -128,18 +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() const; + virtual std::string const inset2string(Buffer const &) const; /// - static void string2params(string const &, InsetExternal::Params &); + static void string2params(std::string const &, Buffer const &, + InsetExternalParams &); /// - static string const params2string(InsetExternal::Params 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