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>
* 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
put the member definitions in undo.C.

View File

@ -43,29 +43,8 @@ extern int RunLinuxDoc(int, string const &);
// 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)
{
#ifdef NEW_STORE
for(Container::iterator it = container.begin();
it != container.end(); ++it) {
if ((*it) == buf) {
@ -75,14 +54,6 @@ void BufferStorage::release(Buffer * buf)
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,
bool ronly)
{
#ifdef NEW_STORE
Buffer * tmpbuf = new Buffer(s, lyxrc, ronly);
tmpbuf->params.useClassDefaults();
lyxerr.debug() << "Assigning to buffer "
<< container.size() + 1 << endl;
container.push_back(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
//
BufferList::BufferList()
{
_state = BufferList::OK;
@ -164,7 +92,6 @@ bool BufferList::QwriteAll()
{
bool askMoreConfirmation = false;
string unsaved;
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
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 &&
lyxrc->exit_confirmation &&
!AskQuestion(_("Some documents were not saved:"),
@ -326,35 +231,19 @@ bool BufferList::write(Buffer * buf, bool makeBackup)
void BufferList::closeAll()
{
_state = BufferList::CLOSING;
#ifdef NEW_STORE
while (!bstore.empty()) {
close(bstore.front());
}
#else
BufferStorage_Iter biter(bstore);
Buffer * b = 0;
while ((b = biter())) {
close(b);
}
#endif
_state = BufferList::OK;
}
void BufferList::resize()
{
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
(*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;
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
string relbuf = MakeDisplayPath((*it)->filename, 30);
fl_addtopup(pup, relbuf.c_str());
++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"));
}
Buffer * BufferList::first()
{
#ifdef NEW_STORE
if (bstore.empty()) return 0;
return bstore.front();
#else
BufferStorage_Iter biter(bstore);
return biter();
#endif
}
Buffer * BufferList::getBuffer(int choice)
{
#ifdef NEW_STORE
if (choice >= bstore.size()) return 0;
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)
{
#ifdef NEW_STORE
for (BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
if ((*it)->text && (*it)->text->UpdateInset(inset)) {
@ -452,23 +316,11 @@ void BufferList::updateInset(Inset * inset, bool mark_dirty)
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)
{
#ifdef NEW_STORE
if (!inset) return 1;
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
@ -478,25 +330,11 @@ int BufferList::unlockInset(UpdatableInset * inset)
}
}
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)
{
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
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()
{
#ifdef NEW_STORE
for (BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
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);
@ -693,43 +471,23 @@ Buffer* BufferList::readFile(string const & s, bool ronly)
bool BufferList::exists(string const & s)
{
#ifdef NEW_STORE
for (BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
if ((*it)->filename == s)
return true;
}
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)
{
#ifdef NEW_STORE
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
if ((*it)->filename == s)
return (*it);
}
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 "debug.h"
#define NEW_STORE 1
/** 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
@ -32,7 +30,6 @@
gave me an "internal gcc error".
*/
class BufferStorage {
#ifdef NEW_STORE
public:
///
typedef vector<Buffer *> Container;
@ -57,55 +54,9 @@ public:
private:
///
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
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

View File

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