use the new bufferstorage (this change only deletes all references to the old one

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@316 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 1999-11-15 12:27:25 +00:00
parent a25d74c216
commit e8022b10a1
4 changed files with 9 additions and 299 deletions

View File

@ -1,5 +1,10 @@
1999-11-15 Lars Gullik Bjønnes <larsbj@lyx.org> 1999-11-15 Lars Gullik Bjønnes <larsbj@lyx.org>
* src/menus.C (ShowBufferMenu): to use the new BufferStorage
* src/bufferlist.[Ch]: use the new BufferStorage class and remove all
trace of the old one.
* src/undo.[Ch]: made the undostack use std::list to store undo's in * src/undo.[Ch]: made the undostack use std::list to store undo's in
put the member definitions in undo.C. put the member definitions in undo.C.

View File

@ -43,29 +43,8 @@ extern int RunLinuxDoc(int, string const &);
// Class BufferStorage // Class BufferStorage
// //
#ifndef NEW_STORE
BufferStorage::BufferStorage()
{
// Initialize the buffer array
for (int i = NUMBER_OF_BUFFERS-1; i >= 0; i--) {
buffer[i] = 0;
}
}
#endif
#ifndef NEW_STORE
bool BufferStorage::isEmpty()
{
for (int i = NUMBER_OF_BUFFERS-1; i >= 0; i--) {
if (buffer[i]) return false;
}
return true;
}
#endif
void BufferStorage::release(Buffer * buf) void BufferStorage::release(Buffer * buf)
{ {
#ifdef NEW_STORE
for(Container::iterator it = container.begin(); for(Container::iterator it = container.begin();
it != container.end(); ++it) { it != container.end(); ++it) {
if ((*it) == buf) { if ((*it) == buf) {
@ -75,14 +54,6 @@ void BufferStorage::release(Buffer * buf)
break; break;
} }
} }
#else
int i = 0;
for (i = 0; i < NUMBER_OF_BUFFERS; i++)
if (buffer[i] == buf) break;
Buffer * tmpbuf = buffer[i];
buffer[i] = 0;
delete tmpbuf;
#endif
} }
@ -90,62 +61,19 @@ Buffer * BufferStorage::newBuffer(string const & s,
LyXRC * lyxrc, LyXRC * lyxrc,
bool ronly) bool ronly)
{ {
#ifdef NEW_STORE
Buffer * tmpbuf = new Buffer(s, lyxrc, ronly); Buffer * tmpbuf = new Buffer(s, lyxrc, ronly);
tmpbuf->params.useClassDefaults(); tmpbuf->params.useClassDefaults();
lyxerr.debug() << "Assigning to buffer " lyxerr.debug() << "Assigning to buffer "
<< container.size() + 1 << endl; << container.size() + 1 << endl;
container.push_back(tmpbuf); container.push_back(tmpbuf);
return tmpbuf; return tmpbuf;
#else
int i = 0;
while (i < NUMBER_OF_BUFFERS - 1
&& buffer[i]) i++;
buffer[i] = new Buffer(s, lyxrc, ronly);
buffer[i]->params.useClassDefaults();
lyxerr.debug() << "Assigning to buffer " << i << endl;
return buffer[i];
#endif
} }
#ifndef NEW_STORE
//
// Class BufferStrorage_Iter
//
Buffer * BufferStorage_Iter::operator() ()
{
int i = 0;
for (i = index; i < BufferStorage::NUMBER_OF_BUFFERS; i++) {
if (cs->buffer[i]) {
index = i + 1;
return cs->buffer[i];
}
}
return 0;
}
Buffer * BufferStorage_Iter::operator[] (int a)
{
// a is >= 1
if (a <= 0) return 0;
int i = 0;
while (a--) {
while(!cs->buffer[i++]);
}
if (i - 1 < BufferStorage::NUMBER_OF_BUFFERS)
return cs->buffer[i - 1];
return 0;
}
#endif
// //
// Class BufferList // Class BufferList
// //
BufferList::BufferList() BufferList::BufferList()
{ {
_state = BufferList::OK; _state = BufferList::OK;
@ -164,7 +92,6 @@ bool BufferList::QwriteAll()
{ {
bool askMoreConfirmation = false; bool askMoreConfirmation = false;
string unsaved; string unsaved;
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin(); for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
if (!(*it)->isLyxClean()) { if (!(*it)->isLyxClean()) {
@ -185,28 +112,6 @@ bool BufferList::QwriteAll()
} }
} }
} }
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
if (!b->isLyxClean()) {
switch(AskConfirmation(_("Changes in document:"),
MakeDisplayPath(b->filename, 50),
_("Save document?"))) {
case 1: // Yes
MenuWrite(b);
break;
case 2: // No
askMoreConfirmation = true;
unsaved += MakeDisplayPath(b->filename, 50);
unsaved += "\n";
break;
case 3: // Cancel
return false;
}
}
}
#endif
if (askMoreConfirmation && if (askMoreConfirmation &&
lyxrc->exit_confirmation && lyxrc->exit_confirmation &&
!AskQuestion(_("Some documents were not saved:"), !AskQuestion(_("Some documents were not saved:"),
@ -326,35 +231,19 @@ bool BufferList::write(Buffer * buf, bool makeBackup)
void BufferList::closeAll() void BufferList::closeAll()
{ {
_state = BufferList::CLOSING; _state = BufferList::CLOSING;
#ifdef NEW_STORE
while (!bstore.empty()) { while (!bstore.empty()) {
close(bstore.front()); close(bstore.front());
} }
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
close(b);
}
#endif
_state = BufferList::OK; _state = BufferList::OK;
} }
void BufferList::resize() void BufferList::resize()
{ {
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin(); for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
(*it)->resize(); (*it)->resize();
} }
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
b->resize();
}
#endif
} }
@ -393,57 +282,32 @@ void BufferList::makePup(int pup)
*/ */
{ {
int ant = 0; int ant = 0;
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin(); for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
string relbuf = MakeDisplayPath((*it)->filename, 30); string relbuf = MakeDisplayPath((*it)->filename, 30);
fl_addtopup(pup, relbuf.c_str()); fl_addtopup(pup, relbuf.c_str());
++ant; ++ant;
} }
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
string relbuf = MakeDisplayPath(b->filename, 30);
fl_addtopup(pup, relbuf.c_str());
++ant;
}
#endif
if (ant == 0) fl_addtopup(pup, _("No Documents Open!%t")); if (ant == 0) fl_addtopup(pup, _("No Documents Open!%t"));
} }
Buffer * BufferList::first() Buffer * BufferList::first()
{ {
#ifdef NEW_STORE
if (bstore.empty()) return 0; if (bstore.empty()) return 0;
return bstore.front(); return bstore.front();
#else
BufferStorage_Iter biter(bstore);
return biter();
#endif
} }
Buffer * BufferList::getBuffer(int choice) Buffer * BufferList::getBuffer(int choice)
{ {
#ifdef NEW_STORE
if (choice >= bstore.size()) return 0; if (choice >= bstore.size()) return 0;
return bstore[choice]; return bstore[choice];
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
b = biter[choice];
// Be careful, this could be 0.
return b;
#endif
} }
void BufferList::updateInset(Inset * inset, bool mark_dirty) void BufferList::updateInset(Inset * inset, bool mark_dirty)
{ {
#ifdef NEW_STORE
for (BufferStorage::iterator it = bstore.begin(); for (BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
if ((*it)->text && (*it)->text->UpdateInset(inset)) { if ((*it)->text && (*it)->text->UpdateInset(inset)) {
@ -452,23 +316,11 @@ void BufferList::updateInset(Inset * inset, bool mark_dirty)
break; break;
} }
} }
#else
BufferStorage_Iter biter(bstore);
Buffer *b = 0;
while ((b = biter())) {
if (b->text && b->text->UpdateInset(inset)) {
if (mark_dirty)
b->markDirty();
break;
}
}
#endif
} }
int BufferList::unlockInset(UpdatableInset * inset) int BufferList::unlockInset(UpdatableInset * inset)
{ {
#ifdef NEW_STORE
if (!inset) return 1; if (!inset) return 1;
for(BufferStorage::iterator it = bstore.begin(); for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
@ -478,25 +330,11 @@ int BufferList::unlockInset(UpdatableInset * inset)
} }
} }
return 1; return 1;
#else
if (!inset) return 1;
BufferStorage_Iter biter(bstore);
Buffer *b = 0;
while ((b = biter())) {
if (b->the_locking_inset == inset) {
b->InsetUnlock();
return 0;
}
}
return 1;
#endif
} }
void BufferList::updateIncludedTeXfiles(string const & mastertmpdir) void BufferList::updateIncludedTeXfiles(string const & mastertmpdir)
{ {
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin(); for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
if (!(*it)->isDepClean(mastertmpdir)) { if (!(*it)->isDepClean(mastertmpdir)) {
@ -510,25 +348,11 @@ void BufferList::updateIncludedTeXfiles(string const & mastertmpdir)
} }
} }
#else
BufferStorage_Iter biter(bstore);
Buffer *b = 0;
while ((b = biter())) {
if (!b->isDepClean(mastertmpdir)) {
string writefile = mastertmpdir;
writefile += '/';
writefile += ChangeExtension(b->getFileName(), ".tex", true);
b->makeLaTeXFile(writefile, mastertmpdir, false, true);
b->markDepClean(mastertmpdir);
}
}
#endif
} }
void BufferList::emergencyWriteAll() void BufferList::emergencyWriteAll()
{ {
#ifdef NEW_STORE
for (BufferStorage::iterator it = bstore.begin(); for (BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
if (!(*it)->isLyxClean()) { if (!(*it)->isLyxClean()) {
@ -573,56 +397,10 @@ void BufferList::emergencyWriteAll()
} }
} }
} }
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
if (!b->isLyxClean()) {
bool madeit = false;
lyxerr <<_("lyx: Attempting to save"
" document ")
<< b->filename
<< _(" as...") << endl;
for (int i = 0; i<3 && !madeit; i++) {
string s;
// We try to save three places:
// 1) Same place as document.
// 2) In HOME directory.
// 3) In "/tmp" directory.
if (i == 0) {
s = b->filename;
} else if (i == 1) {
s = AddName(GetEnvPath("HOME"),
b->filename);
} else { // MakeAbsPath to prepend the current drive letter on OS/2
s = AddName(MakeAbsPath("/tmp/"),
b->filename);
}
s += ".emergency";
lyxerr << " " << i + 1 << ") " << s << endl;
if (b->writeFile(s, true)) {
b->markLyxClean();
lyxerr << _(" Save seems successful. Phew.") << endl;
madeit = true;
} else if (i != 2) {
lyxerr << _(" Save failed! Trying...")
<< endl;
} else {
lyxerr << _(" Save failed! Bummer. Document is lost.") << endl;
}
}
}
}
#endif
} }
Buffer* BufferList::readFile(string const & s, bool ronly) Buffer * BufferList::readFile(string const & s, bool ronly)
{ {
Buffer * b = bstore.newBuffer(s, lyxrc, ronly); Buffer * b = bstore.newBuffer(s, lyxrc, ronly);
@ -693,43 +471,23 @@ Buffer* BufferList::readFile(string const & s, bool ronly)
bool BufferList::exists(string const & s) bool BufferList::exists(string const & s)
{ {
#ifdef NEW_STORE
for (BufferStorage::iterator it = bstore.begin(); for (BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
if ((*it)->filename == s) if ((*it)->filename == s)
return true; return true;
} }
return false; return false;
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
if (b->filename == s)
return true;
}
return false;
#endif
} }
Buffer * BufferList::getBuffer(string const & s) Buffer * BufferList::getBuffer(string const & s)
{ {
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin(); for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) { it != bstore.end(); ++it) {
if ((*it)->filename == s) if ((*it)->filename == s)
return (*it); return (*it);
} }
return 0; return 0;
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
if (b->filename == s)
return b;
}
return 0;
#endif
} }

View File

@ -21,8 +21,6 @@
#include "buffer.h" #include "buffer.h"
#include "debug.h" #include "debug.h"
#define NEW_STORE 1
/** A class to hold all the buffers in a structure /** A class to hold all the buffers in a structure
The point of this class is to hide from bufferlist what kind The point of this class is to hide from bufferlist what kind
of structure the buffers are stored in. Should be no concern for of structure the buffers are stored in. Should be no concern for
@ -32,7 +30,6 @@
gave me an "internal gcc error". gave me an "internal gcc error".
*/ */
class BufferStorage { class BufferStorage {
#ifdef NEW_STORE
public: public:
/// ///
typedef vector<Buffer *> Container; typedef vector<Buffer *> Container;
@ -57,55 +54,9 @@ public:
private: private:
/// ///
Container container; Container container;
#else
public:
///
BufferStorage();
///
bool empty();
///
void release(Buffer * buf);
///
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];
///
friend class BufferStorage_Iter;
#endif
}; };
#ifndef NEW_STORE
/// An Iterator class for BufferStorage
class BufferStorage_Iter {
public:
///
BufferStorage_Iter(BufferStorage const & bs)
{ cs = & bs; index = 0;}
/// next
Buffer* operator() ();
///
Buffer* operator[] (int a);
private:
///
const BufferStorage *cs;
///
unsigned char index;
};
#endif
/** The class governing all the open buffers /** The class governing all the open buffers
This class governs all the currently open buffers. Currently all the buffer 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 are located in a static array, soon this will change and we will have a
@ -128,10 +79,10 @@ public:
list_state getState() { return _state; } list_state getState() { return _state; }
/** loads a LyX file or... /** loads a LyX file or...
If the optional argument tolastfiles is false (default is If the optional argument tolastfiles is false (default is
true), the file name will not be added to the last opened true), the file name will not be added to the last opened
files list files list
*/ */
Buffer * loadLyXFile(string const & filename, Buffer * loadLyXFile(string const & filename,
bool tolastfiles = true); bool tolastfiles = true);

View File

@ -1573,11 +1573,7 @@ void Menus::ShowBufferMenu(FL_OBJECT * ob, long)
// set the pseudo menu-button back // set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX); fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob); fl_redraw_object(ob);
#ifdef NEW_STORE
if (choice > 0) men->handleBufferMenu(choice - 1); if (choice > 0) men->handleBufferMenu(choice - 1);
#else
if (choice > 0) men->handleBufferMenu(choice);
#endif
fl_freepup(BufferMenu); fl_freepup(BufferMenu);
} }