]> git.lyx.org Git - lyx.git/blobdiff - src/bufferlist.h
fix compilation; remove cruft in configure script (I may have removed too much, but...
[lyx.git] / src / bufferlist.h
index 093871714caa16a2ad2a0da7d32b452e9184c29f..b24f813d20f721886a41beedc10a901aec016b2f 100644 (file)
@@ -1,15 +1,10 @@
 // -*- C++ -*-
-/* This file is part of
- * ======================================================
- * 
- *           LyX, The Document Processor        
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-1999 The LyX Team
+/** \file
+ *  Copyright 2002 the LyX Team
+ *  Read the file COPYING
  *
- *           This file is Copyright 1996
- *           Lars Gullik Bjønnes
- *
- * ======================================================*/
+ *  \author Lars Gullik Bjønnes
+*/
 
 #ifndef BUFFER_LIST_H
 #define BUFFER_LIST_H
 #pragma interface
 #endif
 
-#include "buffer.h"
-#include "debug.h"
+#include "LString.h"
+
+#include <boost/utility.hpp>
+
+#include <vector>
+
+class Buffer;
+class UpdatableInset;
 
 /** 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".
   */
-class BufferStorage {
+class BufferStorage : boost::noncopyable {
 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;
+       /**
+          Is the container empty or not.
+          \return True if the container is empty, False otherwise.
+        */
+       bool empty() const { return container.empty(); }
+       /**
+          Releases the passed buffer from the storage and deletes
+          all resources.
+          \param buf The buffer to release.
+        */
+       void release(Buffer * buf);
+       /**
+          \param s The name of the file to base the buffer on.
+          \param ronly If the buffer should be created read only of not.
+          \return The newly created buffer.
+        */
+       Buffer * newBuffer(string const & s, bool ronly = false);
        ///
-       friend class BufferStorage_Iter;
-};
-
-/// An Iterator class for BufferStorage
-class BufferStorage_Iter {
-public:
+       Container::iterator begin() { return container.begin(); }
        ///
-       BufferStorage_Iter(BufferStorage const & bs)
-       { cs =& bs; index = 0;}
-       /// next
-       Buffer* operator() ();
+       Container::iterator end() { return container.end(); }
        ///
-       Buffer* operator[] (int a);
-private:
+       Container::const_iterator begin() const { return container.begin(); }
+       ///
+       Container::const_iterator end() const { return container.end(); }
        ///
-       const BufferStorage *cs;
+       Buffer * front() { return container.front(); }
        ///
-       unsigned char index;
+       Buffer * operator[](int c) { return container[c]; }
+       /**
+          What is the size of the container.
+          \return The size of the container.
+        */
+       size_type size() const { return container.size(); }
+private:
+       ///
+       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 holds all all open buffers, and handles construction
+   and deletions of new ones.
  */
-class BufferList {
+class BufferList : boost::noncopyable {
 public:
        ///
-       BufferList();
-
-       ///
-       ~BufferList();
+       BufferList();
 
        /// state info
        enum list_state {
@@ -97,50 +98,41 @@ public:
        };
 
        /// returns the state of the bufferlist
-       list_state getState() { return _state; }
-       
-       /** loads a LyX file or...
-         If the optional argument tolastfiles is false (default is
-            true), the file name will not be added to the last opened
-           files list
-           */  
-       Buffer* loadLyXFile(string const & filename, 
-                           bool tolastfiles = true);
-       
-       ///
-       bool isEmpty();
+       list_state getState() const { return state_; }
+
+       /**
+          Loads a LyX file or...
+
+          \param filename The filename to read from.
+          \param tolastfiles Wether the file should be put in the
+          last opened files list or not.
+          \return The newly loaded LyX file.
+       */
+       Buffer * loadLyXFile(string const & filename,
+                            bool tolastfiles = true);
 
-       /// 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();
 
-       ///
-       void resize();
-
-       /// Read a file into a buffer readonly or not.
-       Buffer* readFile(string const &, bool ro);
+       /**
+          Read a file into a buffer readonly or not.
+          \return
+       */
+       Buffer * readFile(string const &, bool ro);
 
        /// 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);
-
-       ///
-       void updateInset(Inset*, bool = true);
+       Buffer * newFile(string const &, string, bool isNamed = false);
+       /// returns a vector with all the buffers filenames
+       std::vector<string> const getFileNames() const;
 
        ///
-       int unlockInset(UpdatableInset*);
+       int unlockInset(UpdatableInset *);
 
        ///
        void updateIncludedTeXfiles(string const &);
@@ -148,28 +140,38 @@ public:
        ///
        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
-       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.
-       Buffer* getBuffer(string const &);
+       Buffer * getBuffer(string const &);
        /// returns a pointer to the buffer with the given number.
-       Buffer* getBuffer(int);
-
+       Buffer * getBuffer(unsigned int);
 private:
+       /// ask to save a buffer on quit
+       bool qwriteOne(Buffer * buf, string const & fname,
+                      string & unsaved_list);
+
        ///
        BufferStorage bstore;
-       
+
+       ///
+       list_state state_;
        ///
-       list_state _state;
+       void emergencyWrite(Buffer * buf);
 };
 
 #endif