2 /* This file is part of
3 * ======================================================
5 * LyX, The Document Processor
6 * Copyright 1995 Matthias Ettrich
7 * Copyright 1995-2001 The LyX Team
9 * This file is Copyright 1996-2001
12 * ====================================================== */
24 #include <boost/utility.hpp>
28 /** A class to hold all the buffers in a structure
29 The point of this class is to hide from bufferlist what kind
30 of structure the buffers are stored in. Should be no concern for
31 bufferlist if the buffers is in a array or in a linked list.
33 This class should ideally be enclosed inside class BufferList, but that
34 gave me an "internal gcc error".
36 class BufferStorage : boost::noncopyable {
39 typedef std::vector<Buffer *> Container;
41 typedef Container::iterator iterator;
43 typedef Container::const_iterator const_iterator;
45 typedef Container::size_type size_type;
47 bool empty() const { return container.empty(); }
49 void release(Buffer * buf);
51 Buffer * newBuffer(string const & s, bool = false);
53 Container::iterator begin() { return container.begin(); }
55 Container::iterator end() { return container.end(); }
57 Container::const_iterator begin() const { return container.begin(); }
59 Container::const_iterator end() const { return container.end(); }
61 Buffer * front() { return container.front(); }
63 Buffer * operator[](int c) { return container[c]; }
65 size_type size() const { return container.size(); }
72 /** The class govern all open buffers.
74 class BufferList : boost::noncopyable {
87 /// returns the state of the bufferlist
88 list_state getState() const { return state_; }
90 /** loads a LyX file or...
91 If the optional argument tolastfiles is false (default is
92 true), the file name will not be added to the last opened
95 Buffer * loadLyXFile(string const & filename,
96 bool tolastfiles = true);
104 /// Close all open buffers.
107 /// Read a file into a buffer readonly or not.
108 Buffer * readFile(string const &, bool ro);
110 /// Make a new file (buffer) using a template
111 Buffer * newFile(string const &, string, bool isNamed = false);
112 /// returns a vector with all the buffers filenames
113 std::vector<string> const getFileNames() const;
116 int unlockInset(UpdatableInset *);
119 void updateIncludedTeXfiles(string const &);
122 void emergencyWriteAll();
125 @param buf the buffer that should be closed
126 @return #false# if operation was canceled
128 bool close(Buffer * buf);
133 /// returns true if the buffer exists already
134 bool exists(string const &) const;
136 /// returns true if the buffer is loaded
137 bool isLoaded(Buffer const * b) const;
139 /// returns a pointer to the buffer with the given name.
140 Buffer * getBuffer(string const &);
141 /// returns a pointer to the buffer with the given number.
142 Buffer * getBuffer(unsigned int);
145 /// ask to save a buffer on quit
146 bool qwriteOne(Buffer * buf, string const & fname, string & unsaved_list);
149 BufferStorage bstore;
154 void emergencyWrite(Buffer * buf);