X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferlist.h;h=2ca9fefe551d2db3404e8b16ba85323abf66b422;hb=b9963e1a57135c3e2ab128a9ec4300f0e4886992;hp=ae43d4ec2567c4e6a13274582b23ba30caf735cb;hpb=27de1486ca34aaad446adb798d71a77d6f6304da;p=lyx.git diff --git a/src/bufferlist.h b/src/bufferlist.h index ae43d4ec25..2ca9fefe55 100644 --- a/src/bufferlist.h +++ b/src/bufferlist.h @@ -1,174 +1,102 @@ // -*- C++ -*- -/* This file is part of -* ====================================================== -* -* LyX, The Document Processor -* Copyright (C) 1995 Matthias Ettrich -* -* This file is Copyleft (C) 1996 -* Lars Gullik Bjønnes -* -*======================================================*/ - -#ifndef _BUFFER_LIST_H_ -#define _BUFFER_LIST_H_ - -#ifdef __GNUG__ -#pragma interface -#endif - -#include "buffer.h" -#include "error.h" - -/** A class to hold all the buffers in a structure - The point of this class is to hide from bufferlist what kind - of structure the buffers are stored in. Should be no concern for - bufferlist if the buffers is in a array or in a linked list. - - This class should ideally be enclosed inside class BufferList, but that - gave me an "internal gcc error". - */ -class BufferStorage { -public: - /// - BufferStorage(); - /// - bool isEmpty(); - /// - void release(Buffer* buf); - /// - Buffer* newBuffer(LString 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]; - /// - friend class BufferStorage_Iter; -}; +/** + * \file bufferlist.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * + * Full author contact details are available in file CREDITS. + */ -/// An Iterator class for BufferStorage -class BufferStorage_Iter { -public: - /// - BufferStorage_Iter(const BufferStorage & bs) - { cs=&bs; index=0;} - /// next - Buffer* operator() (); - /// - Buffer* operator[] (int a); -private: - /// - const BufferStorage *cs; - /// - unsigned char index; -}; +#ifndef BUFFER_LIST_H +#define BUFFER_LIST_H +#include +#include +#include -/** 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. +class Buffer; +class OutputParams; + +/** + * The class holds all all open buffers, and handles construction + * and deletions of new ones. */ -class BufferList { +class BufferList : boost::noncopyable { public: - /// - BufferList(); - - /// - ~BufferList(); - - /// state info - enum list_state { - /// - OK, - /// - CLOSING - }; - - /// 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(LString const & filename, - bool tolastfiles = true); - - /// - bool isEmpty(); - - /// Saves buffer. Returns false if unsuccesful. - bool write(Buffer *, bool makeBackup = true); - - /// - bool QwriteAll(); - - /// Close all open buffers. - void closeAll(); + BufferList(); - /// - void resize(); + /// write all buffers, asking the user, returns false if cancelled + bool quitWriteAll(); - /// Read a file into a buffer readonly or not. - Buffer* readFile(LString const &, bool ro); + /// create a new buffer + Buffer * newBuffer(std::string const & s, bool ronly = false); - /// Make a new file (buffer) using a template - Buffer* newFile(LString const &, LString); + /// delete a buffer + void release(Buffer * b); - /** This one must be moved to some other place. - */ - void makePup(int); + /// Close all open buffers. + void closeAll(); - ///** Later with multiple frames this should not be here. - // */ - //Buffer* switchBuffer(Buffer *from, int); + /// returns a vector with all the buffers filenames + std::vector const getFileNames() const; - /// - void updateInset(Inset*, bool = true); + /// FIXME + void updateIncludedTeXfiles(std::string const &, OutputParams const &); - /// - int unlockInset(UpdatableInset*); + /// emergency save for all buffers + void emergencyWriteAll(); - /// - void updateIncludedTeXfiles(LString const &); + /// close buffer. Returns false if cancelled by user + bool close(Buffer * buf, bool ask); - /// - void emergencyWriteAll(); + /// return true if no buffers loaded + bool empty() const; - /** closes buffer - Returns false if operation was canceled - */ - bool close(Buffer *); + /// return head of buffer list if any + Buffer * first(); - /// - Buffer* first(); - /// returns true if the buffer exists already - bool exists(LString const &); + bool exists(std::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(LString const &); + Buffer * getBuffer(std::string const &); /// returns a pointer to the buffer with the given number. - Buffer* getBuffer(int); + Buffer * getBuffer(unsigned int); + /// returns a pointer to the buffer whose temppath matches the string + Buffer * getBufferFromTmp(std::string const &); + + /** returns a pointer to the buffer that follows argument in + * buffer list. The buffer following the last in list is the + * first one. + */ + Buffer * next(Buffer const *) const; + + /** returns a pointer to the buffer that precedes argument in + * buffer list. The buffer preceding the first in list is the + * last one. + */ + Buffer * previous(Buffer const *) const; + + /// reset current author for all buffers + void setCurrentAuthor(std::string const & name, std::string const & email); private: - /// + /// ask to save a buffer on quit, returns false if should cancel + bool quitWriteBuffer(Buffer * buf); + + typedef std::vector BufferStorage; + + /// storage of all buffers BufferStorage bstore; - - /// - list_state _state; + + /// save emergency file for the given buffer + void emergencyWrite(Buffer * buf); }; -#endif +#endif // BUFFERLIST_H