home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / bufferlist.h < prev    next >
C/C++ Source or Header  |  1998-04-23  |  4KB  |  174 lines

  1. // -*- C++ -*-
  2. /* This file is part of
  3. * ======================================================
  4. *           LyX, The Document Processor      
  5. *        Copyright (C) 1995 Matthias Ettrich
  6. *
  7. *           This file is Copyleft (C) 1996
  8. *           Lars Gullik Bj°nnes
  9. *
  10. *======================================================*/
  11.  
  12. #ifndef _BUFFER_LIST_H_
  13. #define _BUFFER_LIST_H_
  14.  
  15. #ifdef __GNUG__
  16. #pragma interface
  17. #endif
  18.  
  19. #include "buffer.h"
  20. #include "error.h"
  21.  
  22. /** A class to hold all the buffers in a structure
  23.   The point of this class is to hide from bufferlist what kind
  24.   of structure the buffers are stored in. Should be no concern for
  25.   bufferlist if the buffers is in a array or in a linked list.
  26.  
  27.   This class should ideally be enclosed inside class BufferList, but that
  28.   gave me an "internal gcc error".
  29.   */
  30. class BufferStorage {
  31. public:
  32.     ///
  33.     BufferStorage();
  34.     ///
  35.     bool isEmpty();
  36.     ///
  37.     void release(Buffer* buf);
  38.     ///
  39.     Buffer* newBuffer(LString const &s, LyXRC *, bool =false);
  40. private:
  41.     /** The max number of buffers there are possible to have
  42.       loaded at the same time. (this only applies when we use an
  43.       array)
  44.       */
  45.     enum{ NUMBER_OF_BUFFERS = 50 };
  46.     
  47.     /** The Bufferlist is currently implemented as a static array.
  48.       The buffers are new'ed and deleted as reqested.
  49.       */
  50.     Buffer *buffer[NUMBER_OF_BUFFERS];
  51.     ///
  52.     friend class BufferStorage_Iter;
  53. };
  54.  
  55. /// An Iterator class for BufferStorage
  56. class BufferStorage_Iter {
  57. public:
  58.     ///
  59.     BufferStorage_Iter(const BufferStorage & bs)
  60.     { cs=&bs; index=0;}
  61.     /// next
  62.     Buffer* operator() ();
  63.     ///
  64.     Buffer* operator[] (int a);
  65. private:
  66.     ///
  67.     const BufferStorage *cs;
  68.     ///
  69.     unsigned char index;
  70. };
  71.  
  72.  
  73.  
  74. /** The class governing all the open buffers
  75.   This class governs all the currently open buffers. Currently all the buffer
  76.   are located in a static array, soon this will change and we will have a
  77.   linked list instead.
  78.  */
  79. class BufferList {
  80. public:
  81.     ///
  82.      BufferList();
  83.  
  84.     ///
  85.     ~BufferList();
  86.  
  87.     /// state info
  88.     enum list_state {
  89.         ///
  90.         OK,
  91.         ///
  92.         CLOSING
  93.     };
  94.  
  95.     /// returns the state of the bufferlist
  96.     list_state getState() { return _state; }
  97.     
  98.     /** loads a LyX file or...
  99.       If the optional argument tolastfiles is false (default is
  100.             true), the file name will not be added to the last opened
  101.         files list
  102.         */  
  103.     Buffer* loadLyXFile(LString const & filename, 
  104.                 bool tolastfiles = true);
  105.     
  106.     ///
  107.     bool isEmpty();
  108.  
  109.     /// Saves buffer. Returns false if unsuccesful.
  110.     bool write(Buffer *, bool makeBackup = true);
  111.  
  112.     ///
  113.         bool QwriteAll();
  114.  
  115.     /// Close all open buffers.
  116.     void closeAll();
  117.  
  118.     ///
  119.     void resize();
  120.  
  121.     /// Read a file into a buffer readonly or not.
  122.     Buffer* readFile(LString const &, bool ro);
  123.  
  124.     /// Make a new file (buffer) using a template
  125.     Buffer* newFile(LString const &, LString);
  126.  
  127.     /** This one must be moved to some other place.
  128.      */
  129.     void makePup(int);
  130.  
  131.     /** Later with multiple frames this should not be here.
  132.      */
  133.     //Buffer* switchBuffer(Buffer *from, int);
  134.  
  135.     ///
  136.     void updateInset(Inset*, bool = true);
  137.  
  138.     ///
  139.     int unlockInset(UpdatableInset*);
  140.  
  141.     ///
  142.     void updateIncludedTeXfiles(LString const &);
  143.  
  144.     ///
  145.     void emergencyWriteAll();
  146.  
  147.     /** closes buffer
  148.       Returns false if operation was canceled
  149.       */
  150.     bool close(Buffer *);
  151.  
  152.     ///
  153.     Buffer* first();
  154.     
  155.     /// returns true if the buffer exists already
  156.     bool exists(LString const &);
  157.  
  158.     /// returns a pointer to the buffer with the given name.
  159.     Buffer* getBuffer(LString const &);
  160.     /// returns a pointer to the buffer with the given number.
  161.     Buffer* getBuffer(int);
  162.  
  163. private:
  164.     ///
  165.     BufferStorage bstore;
  166.     
  167.     ///
  168.     list_state _state;
  169. };
  170.  
  171.  
  172. #endif
  173.