]> git.lyx.org Git - lyx.git/blobdiff - src/bufferlist.h
don't copy if a reference is fine
[lyx.git] / src / bufferlist.h
index 093871714caa16a2ad2a0da7d32b452e9184c29f..adb65fde2c4498cc3ed6200e4c6712d33316a9c1 100644 (file)
@@ -1,15 +1,15 @@
 // -*- C++ -*-
 /* This file is part of
 // -*- C++ -*-
 /* This file is part of
- * ======================================================
+ * ====================================================== 
  * 
  *           LyX, The Document Processor        
  *           Copyright 1995 Matthias Ettrich
  * 
  *           LyX, The Document Processor        
  *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-1999 The LyX Team
+ *           Copyright 1995-2001 The LyX Team
  *
  *
- *           This file is Copyright 1996
+ *           This file is Copyright 1996-2001
  *           Lars Gullik Bjønnes
  *
  *           Lars Gullik Bjønnes
  *
- * ======================================================*/
+ * ====================================================== */
 
 #ifndef BUFFER_LIST_H
 #define BUFFER_LIST_H
 
 #ifndef BUFFER_LIST_H
 #define BUFFER_LIST_H
 #pragma interface
 #endif
 
 #pragma interface
 #endif
 
-#include "buffer.h"
-#include "debug.h"
+class Buffer;
+class UpdatableInset;
+#include <vector>
+#include <boost/utility.hpp>
+
+#include "LString.h"
 
 /** A class to hold all the buffers in a structure
   The point of this class is to hide from bufferlist what kind
 
 /** A class to hold all the buffers in a structure
   The point of this class is to hide from bufferlist what kind
   This class should ideally be enclosed inside class BufferList, but that
   gave me an "internal gcc error".
   */
   This class should ideally be enclosed inside class BufferList, but that
   gave me an "internal gcc error".
   */
-class BufferStorage {
+class BufferStorage : boost::noncopyable {
 public:
        ///
 public:
        ///
-       BufferStorage();
+       typedef std::vector<Buffer *> Container;
        ///
        ///
-       bool isEmpty();
+       typedef Container::iterator iterator;
        ///
        ///
-       void release(Buffer* buf);
+       typedef Container::const_iterator const_iterator;
        ///
        ///
-       Buffer* newBuffer(string const &s, LyXRC *, bool =false);
-private:
-       enum {
-               /** The max number of buffers there are possible to have
-                   loaded at the same time. (this only applies when we use an
-                   array)
-               */
-               NUMBER_OF_BUFFERS = 50
-       };
-       
-       /** The Bufferlist is currently implemented as a static array.
-         The buffers are new'ed and deleted as reqested.
-         */
-       Buffer *buffer[NUMBER_OF_BUFFERS];
+       typedef Container::size_type size_type;
        ///
        ///
-       friend class BufferStorage_Iter;
-};
-
-/// An Iterator class for BufferStorage
-class BufferStorage_Iter {
-public:
+       bool empty() const { return container.empty(); }
        ///
        ///
-       BufferStorage_Iter(BufferStorage const & bs)
-       { cs =& bs; index = 0;}
-       /// next
-       Buffer* operator() ();
+       void release(Buffer * buf);
        ///
        ///
-       Buffer* operator[] (int a);
-private:
+       Buffer * newBuffer(string const & s, bool = false);
+       ///
+       Container::iterator begin() { return container.begin(); }
+       ///
+       Container::iterator end() { return container.end(); }
+       ///
+       Container::const_iterator begin() const { return container.begin(); }
        ///
        ///
-       const BufferStorage *cs;
+       Container::const_iterator end() const { return container.end(); }
+       ///
+       Buffer * front() { return container.front(); }
+       ///
+       Buffer * operator[](int c) { return container[c]; }
+       ///
+       size_type size() const { return container.size(); }
+private:
        ///
        ///
-       unsigned char index;
+       Container container;
 };
 
 
 };
 
 
-
-/** The class governing all the open buffers
-  This class governs all the currently open buffers. Currently all the buffer
-  are located in a static array, soon this will change and we will have a
-  linked list instead.
+/** The class govern all open buffers.
  */
  */
-class BufferList {
+class BufferList : boost::noncopyable {
 public:
        ///
        BufferList();
 
 public:
        ///
        BufferList();
 
-       ///
-       ~BufferList();
-
        /// state info
        enum list_state {
                ///
        /// state info
        enum list_state {
                ///
@@ -97,79 +85,73 @@ public:
        };
 
        /// returns the state of the bufferlist
        };
 
        /// returns the state of the bufferlist
-       list_state getState() { return _state; }
+       list_state getState() const { return state_; }
        
        /** loads a LyX file or...
        
        /** loads a LyX file or...
-         If the optional argument tolastfiles is false (default is
+           If the optional argument tolastfiles is false (default is
             true), the file name will not be added to the last opened
            files list
             true), the file name will not be added to the last opened
            files list
-           */  
-       Buffer* loadLyXFile(string const & filename, 
-                           bool tolastfiles = true);
+       */  
+       Buffer * loadLyXFile(string const & filename, 
+                            bool tolastfiles = true);
        
        ///
        
        ///
-       bool isEmpty();
-
-       /// Saves buffer. Returns false if unsuccesful.
-       bool write(Buffer *, bool makeBackup = true);
+       bool empty() const;
 
        ///
 
        ///
-        bool QwriteAll();
+        bool qwriteAll();
 
        /// Close all open buffers.
        void closeAll();
 
 
        /// Close all open buffers.
        void closeAll();
 
-       ///
-       void resize();
-
        /// Read a file into a buffer readonly or not.
        /// Read a file into a buffer readonly or not.
-       Buffer* readFile(string const &, bool ro);
+       Buffer * readFile(string const &, bool ro);
 
        /// Make a new file (buffer) using a template
 
        /// Make a new file (buffer) using a template
-       Buffer* newFile(string const &, string);
-
-       /** This one must be moved to some other place.
-        */
-       void makePup(int);
-
-       ///** Later with multiple frames this should not be here.
-       // */
-       //Buffer* switchBuffer(Buffer *from, int);
+       Buffer * newFile(string const &, string, bool isNamed = false);
+       /// returns a vector with all the buffers filenames
+       std::vector<string> const getFileNames() const;
 
        ///
 
        ///
-       void updateInset(Inset*, bool = true);
-
-       ///
-       int unlockInset(UpdatableInset*);
+       int unlockInset(UpdatableInset *);
 
        ///
        void updateIncludedTeXfiles(string const &);
 
        ///
        void emergencyWriteAll();
 
        ///
        void updateIncludedTeXfiles(string const &);
 
        ///
        void emergencyWriteAll();
-
-       /** closes buffer
-         Returns false if operation was canceled
+       
+       /** Close buffer.
+           @param buf the buffer that should be closed
+           @return #false# if operation was canceled
          */
          */
-       bool close(Buffer *);
+       bool close(Buffer * buf);
 
        ///
 
        ///
-       Buffer* first();
+       Buffer * first();
        
        /// returns true if the buffer exists already
        
        /// returns true if the buffer exists already
-       bool exists(string const &);
+       bool exists(string 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.
        /// returns a pointer to the buffer with the given name.
-       Buffer* getBuffer(string const &);
+       Buffer * getBuffer(string const &);
        /// returns a pointer to the buffer with the given number.
        /// returns a pointer to the buffer with the given number.
-       Buffer* getBuffer(int);
+       Buffer * getBuffer(unsigned int);
 
 private:
 
 private:
+       /// ask to save a buffer on quit
+       bool qwriteOne(Buffer * buf, string const & fname, string & unsaved_list); 
+
        ///
        BufferStorage bstore;
        
        ///
        ///
        BufferStorage bstore;
        
        ///
-       list_state _state;
+       list_state state_;
+       ///
+       void emergencyWrite(Buffer * buf);
 };
 
 #endif
 };
 
 #endif