X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBuffer.h;h=dae42584f95b71d76f7f9acd85924b38c0abcb81;hb=9eabfb51ac2598d30f163312d077ec6a647f9d1c;hp=71e8ac32c13ce92f42abfc2f3b86b2b074f610b4;hpb=17986e7509f05a79446423a9a32c762cb19a3429;p=lyx.git diff --git a/src/Buffer.h b/src/Buffer.h index 71e8ac32c1..dae42584f9 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -12,15 +12,16 @@ #ifndef BUFFER_H #define BUFFER_H +#include "OutputEnums.h" #include "update_flags.h" #include "insets/InsetCode.h" #include "support/strfwd.h" #include "support/types.h" -#include "support/SignalSlot.h" #include +#include #include #include @@ -124,11 +125,17 @@ public: }; /// Constructor - explicit Buffer(std::string const & file, bool b = false); + explicit Buffer(std::string const & file, bool readonly = false, + Buffer const * cloned_buffer = 0); /// Destructor ~Buffer(); + /// + Buffer * clone() const; + /// + bool isClone() const; + /** High-level interface to buffer functionality. This function parses a command string and executes it. */ @@ -155,10 +162,6 @@ public: */ bool readDocument(Lexer &); - /// - void insertStringAsLines(ParagraphList & plist, - pit_type &, pos_type &, - Font const &, docstring const &, bool); /// DocIterator getParFromID(int id) const; /// do we have a paragraph with this id? @@ -175,11 +178,16 @@ public: /// Write document to stream. Returns \c false if unsuccesful. bool write(std::ostream &) const; + /// save emergency file + /// \return a status message towards the user. + docstring emergencyWrite(); /// Write file. Returns \c false if unsuccesful. bool writeFile(support::FileName const &) const; - /// Loads LyX file \c filename into buffer, * and \return success + /// Loads LyX file \c filename into buffer, * and return success bool loadLyXFile(support::FileName const & s); + /// Reloads the LyX file + bool reload(); /// Fill in the ErrorList with the TeXErrors void bufferErrors(TeXErrors const &, ErrorList &) const; @@ -241,8 +249,6 @@ public: /// return true if the main lyx file does not need saving bool isClean() const; /// - bool isBakClean() const; - /// bool isDepClean(std::string const & name) const; /// whether or not disk file has been externally modified @@ -254,18 +260,22 @@ public: /// mark the main lyx file as not needing saving void markClean() const; - /// - void markBakClean() const; - /// void markDepClean(std::string const & name); /// void setUnnamed(bool flag = true); - /// + /// Whether or not a filename has been assigned to this buffer bool isUnnamed() const; + /// Whether or not this buffer is internal. + /// + /// An internal buffer does not contain a real document, but some auxiliary text segment. + /// It is not associated with a filename, it is never saved, thus it does not need to be + /// automatically saved, nor it needs to trigger any "do you want to save ?" question. + bool isInternal() const; + /// Mark this buffer as dirty. void markDirty(); @@ -305,8 +315,11 @@ public: /// \return true if \p child is a child of this \c Buffer. bool isChild(Buffer * child) const; - /// return a vector with all children and grandchildren - std::vector getChildren() const; + /// return a vector with all children (and grandchildren) + std::vector getChildren(bool grand_children = true) const; + + /// Add all children (and grandchildren) to supplied vector + void getChildren(std::vector & children, bool grand_children = true) const; /// Is buffer read-only? bool isReadonly() const; @@ -332,15 +345,23 @@ public: */ void validate(LaTeXFeatures &) const; - /// Update the cache with all bibfiles in use (including bibfiles + /// Update the list of all bibfiles in use (including bibfiles /// of loaded child documents). void updateBibfilesCache(UpdateScope scope = UpdateMaster) const; - /// - void invalidateBibinfoCache(); - /// Return the cache with all bibfiles in use (including bibfiles + /// Return the list with all bibfiles in use (including bibfiles /// of loaded child documents). support::FileNameList const & getBibfilesCache(UpdateScope scope = UpdateMaster) const; + /// Information from BibTeX databases is cached in the Buffer, so + /// we do not have to read the file over and over. + /// Calling this method invalidates the cache and so requires a + /// re-read. + void invalidateBibinfoCache(); + /// Updates the cached bibliography information. + /// Note that you MUST call this method to update the cache. It will + /// not happen otherwise. (Currently, it is called at the start of + /// updateLabels() and from GuiCitation.) + void checkBibInfoCache() const; /// \return the bibliography information for this buffer's master, /// or just for it, if it isn't a child. BiblioInfo const & masterBibInfo() const; @@ -423,6 +444,10 @@ public: /// Return macro defined before the inclusion of the child MacroData const * getMacro(docstring const & name, Buffer const & child, bool global = true) const; + /// Collect user macro names at loading time + typedef std::set UserMacroSet; + UserMacroSet usermacros; + /// Replace the inset contents for insets which InsetCode is equal /// to the passed \p inset_code. void changeRefsIfUnique(docstring const & from, docstring const & to, @@ -450,7 +475,9 @@ public: Undo & undo(); /// This function is called when the buffer is changed. - void changed() const; + void changed(bool update_metrics) const; + /// + void setChild(DocIterator const & dit, Buffer * child); /// void updateTocItem(std::string const &, DocIterator const &) const; /// This function is called when the buffer structure is changed. @@ -459,8 +486,6 @@ public: void errors(std::string const & err, bool from_master = false) const; /// This function is called when the buffer busy status change. void setBusy(bool on) const; - /// This function is called when the buffer readonly status change. - void setReadOnly(bool on) const; /// Update window titles of all users. void updateTitles() const; /// Reset autosave timers for all users. @@ -489,15 +514,18 @@ public: /// bool doExport(std::string const & format, bool put_in_tempdir, - std::string & result_file) const; + bool includeall, std::string & result_file) const; /// - bool doExport(std::string const & format, bool put_in_tempdir) const; + bool doExport(std::string const & format, bool put_in_tempdir, + bool includeall = false) const; /// - bool preview(std::string const & format) const; + bool preview(std::string const & format, bool includeall = false) const; /// bool isExportable(std::string const & format) const; /// std::vector exportableFormats(bool only_viewable) const; + /// + bool isExportableFormat(std::string const & format) const; /// typedef std::vector > References; @@ -514,10 +542,16 @@ public: // FIXME This really shouldn't be needed, but at the moment it's not // clear how to do it just for the individual pieces we need. void setBuffersForInsets() const; - /// - void updateLabels(UpdateScope = UpdateMaster) const; - /// - void updateLabels(ParIterator & parit) const; + /// Updates screen labels and some other information associated with + /// insets and paragraphs. Actually, it's more like a general "recurse + /// through the Buffer" routine, that visits all the insets and paragraphs. + void updateLabels() const { updateLabels(UpdateMaster, InternalUpdate); } + /// \param scope: whether to start with the master document or just + /// do this one. + /// \param output: whether we are preparing for output. + void updateLabels(UpdateScope scope, UpdateType utype) const; + /// + void updateLabels(ParIterator & parit, UpdateType utype) const; /// Spellcheck starting from \p from. /// \p from initial position, will then points to the next misspelled @@ -529,18 +563,6 @@ public: WordLangTuple & word_lang, docstring_list & suggestions) const; private: - /// search for macro in local (buffer) table or in children - MacroData const * getBufferMacro(docstring const & name, - DocIterator const & pos) const; - /** Update macro table starting with position of it - \param it in some text inset - */ - void updateMacros(DocIterator & it, - DocIterator & scope) const; - - /// - void collectRelatives(BufferSet & bufs) const; - /// bool readFileHelper(support::FileName const & s); /// @@ -555,19 +577,6 @@ private: class Impl; /// The pointer never changes although *pimpl_'s contents may. Impl * const d; - - frontend::GuiBufferDelegate * gui_; - - /// This function is called when the buffer structure is changed. - Signal structureChanged_; - /// This function is called when some parsing error shows up. - //Signal errors(std::string const &) = 0; - /// This function is called when some message shows up. - //Signal message(docstring const &) = 0; - /// This function is called when the buffer busy status change. - //Signal setBusy(bool) = 0; - /// Reset autosave timers for all users. - Signal resetAutosaveTimers_; };