X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetinclude.h;h=c42159e30ce4fdfd0297565ac483ea11d2638921;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=3a1ce111f5fea74f4c633569cd22de28b0ef496a;hpb=0507b8600d40ac155d6576dafe1218db643a8970;p=lyx.git diff --git a/src/insets/insetinclude.h b/src/insets/insetinclude.h index 3a1ce111f5..c42159e30c 100644 --- a/src/insets/insetinclude.h +++ b/src/insets/insetinclude.h @@ -6,150 +6,158 @@ * * \author Lars Gullik Bjønnes * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. */ #ifndef INSET_INCLUDE_H #define INSET_INCLUDE_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "inset.h" +#include "insetcommandparams.h" +#include "render_button.h" +#include "mailinset.h" -#include "insetcommand.h" +#include "support/filename.h" -#include #include +namespace lyx { + class Buffer; -struct LaTeXFeatures; +class Dimension; +class LaTeXFeatures; +class RenderMonitoredPreview; -// Created by AAS 970521 /// for including tex/lyx files -class InsetInclude: public InsetButton, boost::noncopyable { +class InsetInclude : public InsetOld { public: - /// the type of inclusion - enum Flags { - INCLUDE = 0, //< - VERB = 1, //< - INPUT = 2, //< - VERBAST = 3 //< - }; - - struct Params { - Params(InsetCommandParams const & cp = InsetCommandParams("input"), - Flags f = INPUT, - string const & name = string()) - : cparams(cp), flag(f), - masterFilename_(name) {} - - InsetCommandParams cparams; - Flags flag; - string masterFilename_; - - /// - bool operator==(Params const &) const; - /// - bool operator!=(Params const &) const; - }; - - /// - InsetInclude(Params const &); - /// - InsetInclude(InsetCommandParams const &, Buffer const &); - + /// + InsetInclude(InsetCommandParams const &); ~InsetInclude(); /// Override these InsetButton methods if Previewing - int ascent(BufferView *, LyXFont const &) const; + bool metrics(MetricsInfo & mi, Dimension & dim) const; /// - int descent(BufferView *, LyXFont const &) const; + void draw(PainterInfo & pi, int x, int y) const; /// - int width(BufferView *, LyXFont const &) const; - /// - void draw(BufferView *, LyXFont const &, int, float &, bool) const; + virtual bool display() const; /// get the parameters - Params const & params(void) const; - /// set the parameters - void set(Params const & params); - - /// - virtual Inset * clone(Buffer const &, bool same_id = false) const; - /// - Inset::Code lyxCode() const { return Inset::INCLUDE_CODE; } - /// This returns the list of labels on the child buffer - std::vector const getLabelList() const; - /// This returns the list of bibkeys on the child buffer - std::vector< std::pair > const getKeys() const; - /// - void edit(BufferView *, int x, int y, mouse_button::state button); + InsetCommandParams const & params() const; + + /// + InsetBase::Code lyxCode() const { return InsetBase::INCLUDE_CODE; } + /** Fills \c list + * \param buffer the Buffer containing this inset. + * \param list the list of labels in the child buffer. + */ + void getLabelList(Buffer const & buffer, + std::vector & list) const; + /** Fills \c keys + * \param buffer the Buffer containing this inset. + * \param keys the list of bibkeys in the child buffer. + */ + void fillWithBibKeys(Buffer const & buffer, + std::vector > & keys) const; + /** Update the cache with all bibfiles in use of the child buffer + * (including bibfiles of grandchild documents). + * Does nothing if the child document is not loaded to prevent + * automatic loading of all child documents upon loading the master. + * \param buffer the Buffer containing this inset. + */ + void updateBibfilesCache(Buffer const & buffer); + /** Return the cache with all bibfiles in use of the child buffer + * (including bibfiles of grandchild documents). + * Return an empty vector if the child doc is not loaded. + * \param buffer the Buffer containing this inset. + */ + std::vector const & + getBibfilesCache(Buffer const & buffer) const; + /// + EDITABLE editable() const { return IS_EDITABLE; } + /// + void write(Buffer const &, std::ostream &) const; + /// + void read(Buffer const &, LyXLex &); + /// + int latex(Buffer const &, odocstream &, + OutputParams const &) const; + /// + int plaintext(Buffer const &, odocstream &, + OutputParams const &) const; + /// + int docbook(Buffer const &, odocstream &, + OutputParams const &) const; /// - void edit(BufferView * bv, bool front = true); - /// - EDITABLE editable() const - { - return IS_EDITABLE; - } - /// With lyx3 we won't overload these 3 methods - void write(Buffer const *, std::ostream &) const; - /// - void read(Buffer const *, LyXLex &); + void validate(LaTeXFeatures &) const; /// - int latex(Buffer const *, std::ostream &, - bool fragile, bool free_spc) const; + void addPreview(graphics::PreviewLoader &) const; /// - int ascii(Buffer const *, std::ostream &, int linelen) const; + void addToToc(TocList &, Buffer const &) const; /// - int linuxdoc(Buffer const *, std::ostream &) const; + void updateLabels(Buffer const & buffer) const; /// - int docbook(Buffer const *, std::ostream &, bool mixcont) const; + bool getStatus(LCursor &, FuncRequest const &, FuncStatus &) const; +protected: + InsetInclude(InsetInclude const &); /// - void validate(LaTeXFeatures &) const; - - /** Input inserts anything inside a paragraph. - Display can give some visual feedback - */ - bool display() const; - - /// return the filename stub of the included file - string const getRelFileBaseName() const; + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); +private: + virtual std::auto_ptr doClone() const; - /// return true if the file is or got loaded. - bool loadIfNeeded() const; + /** Slot receiving a signal that the external file has changed + * and the preview should be regenerated. + */ + void fileChanged() const; - /// - void addPreview(grfx::PreviewLoader &) const; + friend class InsetIncludeMailer; - /// hide a dialog if about - boost::signal0 hideDialog; -private: + /// set the parameters + void set(InsetCommandParams const & params, Buffer const &); /// get the text displayed on the button - string const getScreenLabel(Buffer const *) const; - /// is this a verbatim include ? - bool isVerbatim() const; - /// get the filename of the master buffer - string const getMasterFilename() const; - /// get the included file name - string const getFileName() const; + docstring const getScreenLabel(Buffer const &) const; + /// + void write(std::ostream &) const; + /// + void read(LyXLex &); /// the parameters - Params params_; + InsetCommandParams params_; /// holds the entity name that defines the file location (SGML) - string const include_label; + docstring const include_label; - /// Use the Pimpl idiom to hide the internals of the previewer. - class PreviewImpl; - friend class PreviewImpl; /// The pointer never changes although *preview_'s contents may. - boost::scoped_ptr const preview_; + boost::scoped_ptr const preview_; + + /// cache + mutable bool set_label_; + mutable RenderButton button_; +}; + + +class InsetIncludeMailer : public MailInset { +public: + /// + InsetIncludeMailer(InsetInclude & 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 &, InsetCommandParams &); + /// + static std::string const params2string(InsetCommandParams const &); +private: + /// + static std::string const name_; + /// + InsetInclude & inset_; }; -inline bool InsetInclude::isVerbatim() const -{ - return params_.flag == VERB || params_.flag == VERBAST; -} +} // namespace lyx #endif // INSETINCLUDE_H