X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetinclude.h;h=c42159e30ce4fdfd0297565ac483ea11d2638921;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=954342cd5eba11fd8adb047aa772d6490da426c7;hpb=45a03f4f67bb00f8142e465c615f348f0622eb32;p=lyx.git diff --git a/src/insets/insetinclude.h b/src/insets/insetinclude.h index 954342cd5e..c42159e30c 100644 --- a/src/insets/insetinclude.h +++ b/src/insets/insetinclude.h @@ -1,178 +1,163 @@ // -*- C++ -*- -/* This file is part of* - * ====================================================== +/** + * \file insetinclude.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor - * - * Copyright 1997 LyX Team (this file was created this year) - * - * ====================================================== */ + * \author Lars Gullik Bjønnes + * + * 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 "support/filename.h" -#include "insetcommand.h" +#include + +namespace lyx { class Buffer; -struct LaTeXFeatures; +class Dimension; +class LaTeXFeatures; +class RenderMonitoredPreview; -// Created by AAS 970521 -/** Used to include files - */ -class InsetInclude: public InsetCommand { +/// for including tex/lyx files +class InsetInclude : public InsetOld { public: /// - InsetInclude(InsetCommandParams const &, Buffer *); - /// + InsetInclude(InsetCommandParams const &); ~InsetInclude(); - /// - Inset * Clone() 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, unsigned int button); - /// - 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 &); - /// - int Latex(Buffer const *, std::ostream &, bool fragile, bool free_spc) const; - /// - int Linuxdoc(Buffer const *, std::ostream &) const; - /// - int DocBook(Buffer const *, std::ostream &) const; - /// - void Validate(LaTeXFeatures &) const; - - /** Input inserts anything inside a paragraph. - Display can give some visual feedback - */ - bool display() const; - /// - string const getScreenLabel() const; - /// - string const getMasterFilename() const; - /// - string const getFileName() const; - - /// In "input" mode uses \input instead of \include. - bool isInput() const { return flag == InsetInclude::INPUT; } - /// If this is true, the child file shouldn't be loaded by lyx - bool isNoLoad() const { return noload; } - - /** A verbatim file shouldn't be loaded by LyX - * No need to generate LaTeX code of a verbatim file - */ - bool isVerb() const; - /// - bool isVerbVisibleSpace() const { - return flag == InsetInclude::VERBAST; - } - /// - bool isInclude() const { return flag == InsetInclude::INCLUDE;} - /// - void setInput(); - /// - void setNoLoad(bool); - /// - void setInclude(); - /// - void setVerb(); - /// - void setVisibleSpace(bool b); - /// return true if the file is or got loaded. - bool loadIfNeeded() const; + + /// Override these InsetButton methods if Previewing + bool metrics(MetricsInfo & mi, Dimension & dim) const; + /// + void draw(PainterInfo & pi, int x, int y) const; + /// + virtual bool display() const; + + /// get the parameters + 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 validate(LaTeXFeatures &) const; + /// + void addPreview(graphics::PreviewLoader &) const; + /// + void addToToc(TocList &, Buffer const &) const; + /// + void updateLabels(Buffer const & buffer) const; + /// + bool getStatus(LCursor &, FuncRequest const &, FuncStatus &) const; +protected: + InsetInclude(InsetInclude const &); + /// + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); private: - /// - enum Include_Flags { - /// - INCLUDE= 0, - /// - VERB = 1, - /// - INPUT = 2, - /// - VERBAST = 3 - }; - - /// - bool noload; - /// - int flag; - /// - Buffer * master; - /// - mutable string include_label; + virtual std::auto_ptr doClone() const; + + /** Slot receiving a signal that the external file has changed + * and the preview should be regenerated. + */ + void fileChanged() const; + + friend class InsetIncludeMailer; + + /// set the parameters + void set(InsetCommandParams const & params, Buffer const &); + /// get the text displayed on the button + docstring const getScreenLabel(Buffer const &) const; + /// + void write(std::ostream &) const; + /// + void read(LyXLex &); + + /// the parameters + InsetCommandParams params_; + /// holds the entity name that defines the file location (SGML) + docstring const include_label; + + /// The pointer never changes although *preview_'s contents may. + boost::scoped_ptr const preview_; + + /// cache + mutable bool set_label_; + mutable RenderButton button_; }; -inline -bool InsetInclude::isVerb() const -{ - return flag == InsetInclude::VERB || flag == InsetInclude::VERBAST; -} - - -inline -void InsetInclude::setInput() -{ - if (!isInput()) { - flag = InsetInclude::INPUT; - setCmdName("input"); - } -} - - -inline -void InsetInclude::setNoLoad(bool b) -{ - noload = b; -} - - -inline -void InsetInclude::setInclude() -{ - if (!isInclude()) { - flag = InsetInclude::INCLUDE; - setCmdName("include"); - } -} - - -inline -void InsetInclude::setVerb() -{ - if (!isVerb()) { - flag = InsetInclude::VERB; - setCmdName("verbatiminput"); - } -} - - -inline -void InsetInclude::setVisibleSpace(bool b) -{ - if (b && flag == InsetInclude::VERB) { - setCmdName("verbatiminput*"); - flag = InsetInclude::VERBAST; - } else if (!b && flag == InsetInclude::VERBAST) { - setCmdName("verbatiminput"); - flag = InsetInclude::VERB; - } -} -#endif +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_; +}; + + +} // namespace lyx + +#endif // INSETINCLUDE_H