mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 05:25:26 +00:00
bufferlist cleanup
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6163 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
cff1b05078
commit
9fc9bd98f6
@ -787,7 +787,7 @@ int BufferView::unlockInset(UpdatableInset * inset)
|
|||||||
finishUndo();
|
finishUndo();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return bufferlist.unlockInset(inset);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -170,7 +170,9 @@ void BufferView::Pimpl::buffer(Buffer * b)
|
|||||||
// set current buffer
|
// set current buffer
|
||||||
buffer_ = b;
|
buffer_ = b;
|
||||||
|
|
||||||
if (bufferlist.getState() == BufferList::CLOSING) return;
|
// if we're quitting lyx, don't bother updating stuff
|
||||||
|
if (quitting)
|
||||||
|
return;
|
||||||
|
|
||||||
// if we are closing the buffer, use the first buffer as current
|
// if we are closing the buffer, use the first buffer as current
|
||||||
if (!buffer_) {
|
if (!buffer_) {
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2003-02-15 John Levon <levon@movementarian.org>
|
||||||
|
|
||||||
|
* BufferView.C:
|
||||||
|
* BufferView_pimpl.C:
|
||||||
|
* bufferlist.h:
|
||||||
|
* bufferlist.C: remove pointless BufferStorage bloat. Remove
|
||||||
|
inset code that had no actual effect. Remove unneeded status
|
||||||
|
code.
|
||||||
|
|
||||||
2003-02-14 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
|
2003-02-14 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
|
||||||
|
|
||||||
* buffer.C (makeLaTeXFile): fix counting of number of line feeds
|
* buffer.C (makeLaTeXFile): fix counting of number of line feeds
|
||||||
|
@ -54,43 +54,8 @@ using std::mem_fun;
|
|||||||
|
|
||||||
extern BufferView * current_view;
|
extern BufferView * current_view;
|
||||||
|
|
||||||
//
|
|
||||||
// Class BufferStorage
|
|
||||||
//
|
|
||||||
|
|
||||||
void BufferStorage::release(Buffer * buf)
|
|
||||||
{
|
|
||||||
lyx::Assert(buf);
|
|
||||||
Container::iterator it = find(container.begin(), container.end(), buf);
|
|
||||||
if (it != container.end()) {
|
|
||||||
// Make sure that we don't store a LyXText in
|
|
||||||
// the textcache that points to the buffer
|
|
||||||
// we just deleted.
|
|
||||||
Buffer * tmp = (*it);
|
|
||||||
container.erase(it);
|
|
||||||
textcache.removeAllWithBuffer(tmp);
|
|
||||||
delete tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Buffer * BufferStorage::newBuffer(string const & s, bool ronly)
|
|
||||||
{
|
|
||||||
Buffer * tmpbuf = new Buffer(s, ronly);
|
|
||||||
tmpbuf->params.useClassDefaults();
|
|
||||||
lyxerr[Debug::INFO] << "Assigning to buffer "
|
|
||||||
<< container.size() << endl;
|
|
||||||
container.push_back(tmpbuf);
|
|
||||||
return tmpbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Class BufferList
|
|
||||||
//
|
|
||||||
|
|
||||||
BufferList::BufferList()
|
BufferList::BufferList()
|
||||||
: state_(BufferList::OK)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -155,9 +120,35 @@ bool BufferList::qwriteAll()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BufferList::release(Buffer * buf)
|
||||||
|
{
|
||||||
|
lyx::Assert(buf);
|
||||||
|
BufferStorage::iterator it = find(bstore.begin(), bstore.end(), buf);
|
||||||
|
if (it != bstore.end()) {
|
||||||
|
// Make sure that we don't store a LyXText in
|
||||||
|
// the textcache that points to the buffer
|
||||||
|
// we just deleted.
|
||||||
|
Buffer * tmp = (*it);
|
||||||
|
bstore.erase(it);
|
||||||
|
textcache.removeAllWithBuffer(tmp);
|
||||||
|
delete tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Buffer * BufferList::newBuffer(string const & s, bool ronly)
|
||||||
|
{
|
||||||
|
Buffer * tmpbuf = new Buffer(s, ronly);
|
||||||
|
tmpbuf->params.useClassDefaults();
|
||||||
|
lyxerr[Debug::INFO] << "Assigning to buffer "
|
||||||
|
<< bstore.size() << endl;
|
||||||
|
bstore.push_back(tmpbuf);
|
||||||
|
return tmpbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BufferList::closeAll()
|
void BufferList::closeAll()
|
||||||
{
|
{
|
||||||
state_ = BufferList::CLOSING;
|
|
||||||
// Since we are closing we can just as well delete all
|
// Since we are closing we can just as well delete all
|
||||||
// in the textcache this will also speed the closing/quiting up a bit.
|
// in the textcache this will also speed the closing/quiting up a bit.
|
||||||
textcache.clear();
|
textcache.clear();
|
||||||
@ -165,7 +156,6 @@ void BufferList::closeAll()
|
|||||||
while (!bstore.empty()) {
|
while (!bstore.empty()) {
|
||||||
close(bstore.front());
|
close(bstore.front());
|
||||||
}
|
}
|
||||||
state_ = BufferList::OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -173,13 +163,6 @@ bool BufferList::close(Buffer * buf)
|
|||||||
{
|
{
|
||||||
lyx::Assert(buf);
|
lyx::Assert(buf);
|
||||||
|
|
||||||
// CHECK
|
|
||||||
// Trace back why we need to use buf->getUser here.
|
|
||||||
// Perhaps slight rewrite is in order? (Lgb)
|
|
||||||
|
|
||||||
if (buf->getUser())
|
|
||||||
buf->getUser()->insetUnlock();
|
|
||||||
|
|
||||||
if (!buf->paragraphs.empty() && !buf->isClean() && !quitting) {
|
if (!buf->paragraphs.empty() && !buf->isClean() && !quitting) {
|
||||||
string fname;
|
string fname;
|
||||||
if (buf->isUnnamed())
|
if (buf->isUnnamed())
|
||||||
@ -213,7 +196,7 @@ bool BufferList::close(Buffer * buf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bstore.release(buf);
|
release(buf);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,23 +226,6 @@ Buffer * BufferList::getBuffer(unsigned int choice)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int BufferList::unlockInset(UpdatableInset * inset)
|
|
||||||
{
|
|
||||||
lyx::Assert(inset);
|
|
||||||
|
|
||||||
BufferStorage::iterator it = bstore.begin();
|
|
||||||
BufferStorage::iterator end = bstore.end();
|
|
||||||
for (; it != end; ++it) {
|
|
||||||
if ((*it)->getUser()
|
|
||||||
&& (*it)->getUser()->theLockingInset() == inset) {
|
|
||||||
(*it)->getUser()->insetUnlock();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BufferList::updateIncludedTeXfiles(string const & mastertmpdir)
|
void BufferList::updateIncludedTeXfiles(string const & mastertmpdir)
|
||||||
{
|
{
|
||||||
BufferStorage::iterator it = bstore.begin();
|
BufferStorage::iterator it = bstore.begin();
|
||||||
@ -363,7 +329,7 @@ Buffer * BufferList::readFile(string const & s, bool ronly)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer * b = bstore.newBuffer(s, ronly);
|
Buffer * b = newBuffer(s, ronly);
|
||||||
|
|
||||||
// Check if emergency save file exists and is newer.
|
// Check if emergency save file exists and is newer.
|
||||||
e += OnlyFilename(s) + ".emergency";
|
e += OnlyFilename(s) + ".emergency";
|
||||||
@ -418,7 +384,7 @@ Buffer * BufferList::readFile(string const & s, bool ronly)
|
|||||||
if (b->readFile(lex, ts))
|
if (b->readFile(lex, ts))
|
||||||
return b;
|
return b;
|
||||||
else {
|
else {
|
||||||
bstore.release(b);
|
release(b);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -454,7 +420,7 @@ Buffer * BufferList::getBuffer(string const & s)
|
|||||||
Buffer * BufferList::newFile(string const & name, string tname, bool isNamed)
|
Buffer * BufferList::newFile(string const & name, string tname, bool isNamed)
|
||||||
{
|
{
|
||||||
// get a free buffer
|
// get a free buffer
|
||||||
Buffer * b = bstore.newBuffer(name);
|
Buffer * b = newBuffer(name);
|
||||||
|
|
||||||
// use defaults.lyx as a default template if it exists.
|
// use defaults.lyx as a default template if it exists.
|
||||||
if (tname.empty()) {
|
if (tname.empty()) {
|
||||||
|
119
src/bufferlist.h
119
src/bufferlist.h
@ -16,86 +16,15 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class Buffer;
|
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
|
|
||||||
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 : boost::noncopyable {
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
typedef std::vector<Buffer *> Container;
|
|
||||||
///
|
|
||||||
typedef Container::iterator iterator;
|
|
||||||
///
|
|
||||||
typedef Container::const_iterator const_iterator;
|
|
||||||
///
|
|
||||||
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);
|
|
||||||
///
|
|
||||||
Container::iterator begin() { return container.begin(); }
|
|
||||||
///
|
|
||||||
Container::iterator end() { return container.end(); }
|
|
||||||
///
|
|
||||||
Container::const_iterator begin() const { return container.begin(); }
|
|
||||||
///
|
|
||||||
Container::const_iterator end() const { return container.end(); }
|
|
||||||
///
|
|
||||||
Buffer * front() { return container.front(); }
|
|
||||||
///
|
|
||||||
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 holds all all open buffers, and handles construction
|
* The class holds all all open buffers, and handles construction
|
||||||
and deletions of new ones.
|
* and deletions of new ones.
|
||||||
*/
|
*/
|
||||||
class BufferList : boost::noncopyable {
|
class BufferList : boost::noncopyable {
|
||||||
public:
|
public:
|
||||||
///
|
|
||||||
BufferList();
|
BufferList();
|
||||||
|
|
||||||
/// state info
|
|
||||||
enum list_state {
|
|
||||||
///
|
|
||||||
OK,
|
|
||||||
///
|
|
||||||
CLOSING
|
|
||||||
};
|
|
||||||
|
|
||||||
/// returns the state of the bufferlist
|
|
||||||
list_state getState() const { return state_; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Loads a LyX file or...
|
Loads a LyX file or...
|
||||||
|
|
||||||
@ -107,19 +36,19 @@ public:
|
|||||||
Buffer * loadLyXFile(string const & filename,
|
Buffer * loadLyXFile(string const & filename,
|
||||||
bool tolastfiles = true);
|
bool tolastfiles = true);
|
||||||
|
|
||||||
///
|
/// write all buffers, asking the user
|
||||||
bool empty() const;
|
|
||||||
|
|
||||||
///
|
|
||||||
bool qwriteAll();
|
bool qwriteAll();
|
||||||
|
|
||||||
|
/// create a new buffer
|
||||||
|
Buffer * newBuffer(string const & s, bool ronly = false);
|
||||||
|
|
||||||
|
/// delete a buffer
|
||||||
|
void release(Buffer * b);
|
||||||
|
|
||||||
/// Close all open buffers.
|
/// Close all open buffers.
|
||||||
void closeAll();
|
void closeAll();
|
||||||
|
|
||||||
/**
|
/// read the given file
|
||||||
Read a file into a buffer readonly or not.
|
|
||||||
\return
|
|
||||||
*/
|
|
||||||
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
|
||||||
@ -127,23 +56,19 @@ public:
|
|||||||
/// returns a vector with all the buffers filenames
|
/// returns a vector with all the buffers filenames
|
||||||
std::vector<string> const getFileNames() const;
|
std::vector<string> const getFileNames() const;
|
||||||
|
|
||||||
///
|
/// FIXME
|
||||||
int unlockInset(UpdatableInset *);
|
|
||||||
|
|
||||||
///
|
|
||||||
void updateIncludedTeXfiles(string const &);
|
void updateIncludedTeXfiles(string const &);
|
||||||
|
|
||||||
///
|
/// emergency save for all buffers
|
||||||
void emergencyWriteAll();
|
void emergencyWriteAll();
|
||||||
|
|
||||||
/**
|
/// close buffer. Returns false if cancelled by user
|
||||||
Close buffer.
|
|
||||||
\param buf the buffer that should be closed
|
|
||||||
\return #false# if operation was canceled
|
|
||||||
*/
|
|
||||||
bool close(Buffer * buf);
|
bool close(Buffer * buf);
|
||||||
|
|
||||||
///
|
/// return true if no buffers loaded
|
||||||
|
bool empty() const;
|
||||||
|
|
||||||
|
/// return head of buffer list if any
|
||||||
Buffer * first();
|
Buffer * first();
|
||||||
|
|
||||||
/// returns true if the buffer exists already
|
/// returns true if the buffer exists already
|
||||||
@ -165,13 +90,13 @@ private:
|
|||||||
bool qwriteOne(Buffer * buf, string const & fname,
|
bool qwriteOne(Buffer * buf, string const & fname,
|
||||||
string & unsaved_list);
|
string & unsaved_list);
|
||||||
|
|
||||||
///
|
typedef std::vector<Buffer *> BufferStorage;
|
||||||
|
|
||||||
|
/// storage of all buffers
|
||||||
BufferStorage bstore;
|
BufferStorage bstore;
|
||||||
|
|
||||||
///
|
/// save emergency file for the given buffer
|
||||||
list_state state_;
|
|
||||||
///
|
|
||||||
void emergencyWrite(Buffer * buf);
|
void emergencyWrite(Buffer * buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif // BUFFERLIST_H
|
||||||
|
Loading…
Reference in New Issue
Block a user