X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetexternal.h;h=2e33880a20132fb3bb492464c2f6da0b2c9c1128;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=ae5568b88e7d5054f94d6bdf7ffadadb5b62191c;hpb=71f8ac34a96741c40c876c66ae199f9677559a5c;p=lyx.git diff --git a/src/insets/insetexternal.h b/src/insets/insetexternal.h index ae5568b88e..2e33880a20 100644 --- a/src/insets/insetexternal.h +++ b/src/insets/insetexternal.h @@ -1,155 +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-2000 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 "insetbutton.h" -#include "LString.h" -#include "../lyx.h" +#include "inset.h" +#include "ExternalTransforms.h" -struct ExternalTemplate; +#include "support/filename.h" +#include "support/translator.h" -/// -class InsetExternal : public InsetButton { -public: - 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); - /** 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; - /// - virtual int Ascii(Buffer const *, std::ostream &, int linelen) const; - /// - virtual int Linuxdoc(Buffer const *, std::ostream &) const; - /// - virtual int DocBook(Buffer const *, std::ostream &) const; - /// Updates needed features for this inset. - virtual void Validate(LaTeXFeatures & features) const; +#include +#include - /// returns LyX code associated with the inset. Used for TOC, ...) - virtual Inset::Code LyxCode() const { return EXTERNAL_CODE; } - - /// - virtual Inset * Clone(Buffer const &) const; +#include "mailinset.h" - /// returns the text of the button - virtual string const getScreenLabel() const; - /// Callback function for the template drop-down - static void templateCB(FL_OBJECT *, long); +/** 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 { - /// Callback function for the browse button - static void browseCB(FL_OBJECT *, long); +namespace external { - /// Callback function for the edit button - static void editCB(FL_OBJECT *, long); +class TempName { +public: + TempName(); + TempName(TempName const &); + ~TempName(); + TempName & operator=(TempName const &); + support::FileName const & operator()() const { return tempname_; } +private: + support::FileName tempname_; +}; - /// Callback function for the view button - static void viewCB(FL_OBJECT *, long); +/// How is the image to be displayed on the LyX screen? +enum DisplayType { + DefaultDisplay, + MonochromeDisplay, + GrayscaleDisplay, + ColorDisplay, + PreviewDisplay, + NoDisplay +}; - /// Callback function for the update production button - static void updateCB(FL_OBJECT *, long); - /// Callback function for the ok button - static void okCB(FL_OBJECT *, long); +/// The translator between the Display enum and corresponding lyx string. +Translator const & displayTranslator(); - /// Callback function for the cancel button - static void cancelCB(FL_OBJECT *, long); -private: - /// Write the output for a specific file format - int write(string const & format, Buffer const *, - std::ostream &) const; +} // namespace external - /// Apply the changes - void doApply(BufferView * bv); - /// Execute this command in the directory of this document - void executeCommand(string const & s, Buffer const * buf) const; +/// hold parameters settable from the GUI +class InsetExternalParams { +public: + InsetExternalParams(); - /// Update if automatic - void automaticUpdate(BufferView const *) const; + void write(Buffer const &, std::ostream &) const; + bool read(Buffer const &, LyXLex &); - /// Do update - void doUpdate(BufferView const *) const; - /// Do edit - void doEdit(BufferView const *) const; - /// Do view - void doView(BufferView const *) const; + /// The name of the tempfile used for manipulations. + support::FileName const & tempname() const { return tempname_(); } - /// Substitute meta-variables in this string - string const doSubstitution(Buffer const *, string const & s) const; + /// The template currently in use. + void settemplate(std::string const &); + std::string const & templatename() const { return templatename_; } - /** Get the LyX name of the currently selected - template in the choice list - */ - string const getCurrentTemplate() 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; - /// Get a certain template from a LyX name - ExternalTemplate const getTemplate(string const & lyxname) const; + external::ClipData clipdata; + external::ExtraData extradata; + external::ResizeData resizedata; + external::RotationData rotationdata; - /** - Get the number starting from 1 of a template with a - specific LyX name for the choice list + /** if \c true, simply output the filename, maybe wrapped in a + * box, rather than generate and display the image etc. */ - int getTemplateNumber(string const & guiname) const; + bool draft; + +private: + external::TempName tempname_; + std::string templatename_; +}; - /// Get the LyX name of a template with a given number starting from 1 - string const getTemplateName(int n) const; - /// Get a string with all the GUI template names separated by | - string const getTemplateString() const; +class RenderBase; +/// +class InsetExternal : public InsetOld, public boost::signals::trackable +{ +public: + InsetExternal(); + /// + virtual ~InsetExternal(); /// - struct Holder { - InsetExternal * inset; - BufferView * view; - }; + virtual InsetBase::Code lyxCode() const { return EXTERNAL_CODE; } /// - Holder holder; + virtual EDITABLE editable() const { return IS_EDITABLE; } - /// The external inset form - FD_form_external * form_external; + /// + 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); + /// \returns the number of rows (\n's) of generated code. + virtual int latex(Buffer const &, odocstream &, + OutputParams const &) const; /// - string templatename; + 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; /// - string filename; + 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 &); /// - string parameters; + 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; - /// A temp filename - string tempname; + /// The current params + InsetExternalParams params_; + /// The thing that actually draws the image on LyX's screen. + boost::scoped_ptr renderer_; }; + +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