]> git.lyx.org Git - lyx.git/blobdiff - src/BufferList.h
Hack to display section symbol
[lyx.git] / src / BufferList.h
index 895dc46ee55211daf779c3fc6f154e878bb9b14a..ff5156657b95e84331a5882bf19991b09d1ff100 100644 (file)
@@ -4,7 +4,7 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  *
  * Full author contact details are available in file CREDITS.
  */
 #ifndef BUFFER_LIST_H
 #define BUFFER_LIST_H
 
-#include "support/docstring.h"
-
-#include <boost/noncopyable.hpp>
+#include "support/strfwd.h"
 
 #include <vector>
 
 
 namespace lyx {
 
+class Author;
 class Buffer;
 class OutputParams;
 
+namespace support {
+class FileName;
+class FileNameList;
+} // namespace support
+
 /**
  * The class holds all all open buffers, and handles construction
  * and deletions of new ones.
  */
-class BufferList : boost::noncopyable {
+class BufferList {
 public:
        typedef std::vector<Buffer *>::iterator iterator;
        typedef std::vector<Buffer *>::const_iterator const_iterator;
 
 public:
        BufferList();
+       ~BufferList();
 
        iterator begin();
        const_iterator begin() const;
@@ -42,11 +47,18 @@ public:
        iterator end();
        const_iterator end() const;
 
-       /// write all buffers, asking the user, returns false if cancelled
-       bool quitWriteAll();
+       /// create a new buffer and add it to the buffer list
+       /// \return 0 if the Buffer creation is not possible for whatever reason.
+       Buffer * newBuffer(std::string const & s);
 
-       /// create a new buffer
-       Buffer * newBuffer(std::string const & s, bool ronly = false);
+       /// create an internal buffer and add it to the internal buffer list
+       /// \return 0 if the Buffer creation is not possible for whatever reason.
+       Buffer * newInternalBuffer(std::string const & s);
+
+       /// Is child a child of some Buffer other than parent?
+       /// NOTE: child must be a child of parent, and both must be non-null.
+       /// Otherwise we assert.
+       bool isOthersChild(Buffer * parent, Buffer * child) const;
 
        /// delete a buffer
        void release(Buffer * b);
@@ -55,16 +67,7 @@ public:
        void closeAll();
 
        /// returns a vector with all the buffers filenames
-       std::vector<std::string> const getFileNames() const;
-
-       /// FIXME
-       void updateIncludedTeXfiles(std::string const &, OutputParams const &);
-
-       /// emergency save for all buffers
-       void emergencyWriteAll();
-
-       /// close buffer. Returns false if cancelled by user
-       bool close(Buffer * buf, bool ask);
+       support::FileNameList fileNames() const;
 
        /// return true if no buffers loaded
        bool empty() const;
@@ -76,17 +79,30 @@ public:
        Buffer * last();
 
        /// returns true if the buffer exists already
-       bool exists(std::string const &) const;
+       bool exists(support::FileName const &) const;
 
        /// returns true if the buffer is loaded
        bool isLoaded(Buffer const * b) const;
 
-       /// returns a pointer to the buffer with the given name.
-       Buffer * getBuffer(std::string const &);
-       /// returns a pointer to the buffer with the given number.
+       /// returns true if the buffer is known as internal buffer
+       bool isInternal(Buffer const * b) const;
+
+       /// \return index of named buffer in buffer list
+       int bufferNum(support::FileName const & name) const;
+
+       /** returns a pointer to the buffer with the given name
+        *
+        *  \param internal
+        *    If true, the buffer is searched also among internal buffers
+        */
+       Buffer * getBuffer(support::FileName const & name, bool internal = false) const;
+
+       /// \return a pointer to the buffer with the given number
        Buffer * getBuffer(unsigned int);
-       /// returns a pointer to the buffer whose temppath matches the string
-       Buffer * getBufferFromTmp(std::string const &);
+
+       /// \return a pointer to the buffer whose temppath matches the given \p path
+       ///  If optional \p realpath is \c true the lookup is done with real path names
+       Buffer * getBufferFromTmp(std::string const & path, bool realpath = false);
 
        /** returns a pointer to the buffer that follows argument in
         * buffer list. The buffer following the last in list is the
@@ -100,20 +116,37 @@ public:
         */
        Buffer * previous(Buffer const *) const;
 
+       /// \name Functions that just operate on all buffers
+       //@{
        /// reset current author for all buffers
-       void setCurrentAuthor(docstring const & name, docstring const & email);
+       void recordCurrentAuthor(Author const & author);
+       /// update previews for all buffers, e.g. for Prefs update
+       void updatePreviews();
+       /// Call changed() on all buffers, internal or not
+       void changed(bool update_metrics) const;
+       /// emergency save for all buffers
+       void emergencyWriteAll();
+       /// FIXME
+       void updateIncludedTeXfiles(std::string const &, OutputParams const &);
+       ///
+       void invalidateConverterCache() const;
+       //@}
 
 private:
-       /// ask to save a buffer on quit, returns false if should cancel
-       bool quitWriteBuffer(Buffer * buf);
+       /// create a new buffer
+       /// \return 0 if the Buffer creation is not possible for whatever reason.
+       Buffer * createNewBuffer(std::string const & s);
+
+       /// noncopiable
+       BufferList(BufferList const &);
+       void operator=(BufferList const &);
 
        typedef std::vector<Buffer *> BufferStorage;
 
        /// storage of all buffers
        BufferStorage bstore;
-
-       /// save emergency file for the given buffer
-       void emergencyWrite(Buffer * buf);
+       /// storage of all internal buffers used for cut&paste, etc.
+       BufferStorage binternal;
 };
 
 /// Implementation is in LyX.cpp