X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetexternal.h;h=2e33880a20132fb3bb492464c2f6da0b2c9c1128;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=8a339f66562a134ac2ece74e3640272b5e60c6f1;hpb=83acbbd5237373926c629855379e1df9a04209b2;p=lyx.git diff --git a/src/insets/insetexternal.h b/src/insets/insetexternal.h index 8a339f6656..2e33880a20 100644 --- a/src/insets/insetexternal.h +++ b/src/insets/insetexternal.h @@ -1,128 +1,200 @@ // -*- C++ -*- -/* This file is part of* - * ====================================================== +/** + * \file insetexternal.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. + * \author Asger Alstrup Nielsen * - * ====================================================== */ + * Full author contact details are available in file CREDITS. + */ #ifndef INSET_EXTERNAL_H #define INSET_EXTERNAL_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "inset.h" +#include "ExternalTransforms.h" -#include "insetbutton.h" -#include "ExternalTemplate.h" -#include "LString.h" -#include +#include "support/filename.h" +#include "support/translator.h" -/// -class InsetExternal : public InsetButton { +#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(); - /// what appears in the minibuffer when opening - virtual string const EditMessage() const; - /// - virtual void Edit(BufferView *, int x, int y, unsigned int button); - /// - 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 &, bool fragile, - bool free_spc) 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 &) const; - /// Updates needed features for this inset. - virtual void Validate(LaTeXFeatures & features) const; +/// The translator between the Display enum and corresponding lyx string. +Translator const & displayTranslator(); - /// returns LyX code associated with the inset. Used for TOC, ...) - virtual Inset::Code LyxCode() const { return EXTERNAL_CODE; } - - /// - virtual Inset * Clone(Buffer const &) const; +} // namespace external - /// returns the text of the button - virtual string const getScreenLabel() 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 &); - /// update the file represented by the template - void updateExternal() const; + /// The name of the tempfile used for manipulations. + support::FileName const & tempname() const { return tempname_(); } - /// edit file of this template - void editExternal() const; + /// The template currently in use. + void settemplate(std::string const &); + std::string const & templatename() const { return templatename_; } - /// view file of this template - void viewExternal() const; + /// 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; - /// return a copy of our current params - Params params() const; + external::ClipData clipdata; + external::ExtraData extradata; + external::ResizeData resizedata; + external::RotationData rotationdata; - /// hide connection - SigC::Signal0 hideDialog; + /** if \c true, simply output the filename, maybe wrapped in a + * box, rather than generate and display the image etc. + */ + bool draft; private: - /// Write the output for a specific file format - int write(string const & format, Buffer const *, - std::ostream &) const; + external::TempName tempname_; + std::string templatename_; +}; - /// Execute this command in the directory of this document - void executeCommand(string const & s, Buffer const * buf) const; - /// Substitute meta-variables in this string - string const doSubstitution(Buffer const *, string const & s) const; +class RenderBase; - /// our owning view - BufferView * view_; +/// +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; } - /// the current params - Params params_; + /// + 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); - /// A temp filename - string tempname_; + /// \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; + + /// Update needed features for this inset. + virtual void validate(LaTeXFeatures & features) 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() const; + + /** 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_; }; -/// -bool operator==(InsetExternal::Params const &, InsetExternal::Params const &); -/// -bool operator!=(InsetExternal::Params const &, InsetExternal::Params const &); + +class InsetExternalMailer : public MailInset { +public: + /// + InsetExternalMailer(InsetExternal & inset); + /// + virtual InsetBase & inset() const { return inset_; } + /// + virtual std::string const & name() const { return name_; } + /// + virtual std::string const inset2string(Buffer const &) const; + /// + static void string2params(std::string const &, Buffer const &, + InsetExternalParams &); + /// + static std::string const params2string(InsetExternalParams const &, + Buffer const &); +private: + /// + static std::string const name_; + /// + InsetExternal & inset_; +}; + +} // namespace lyx #endif