X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferlist.C;h=3b69c1d0713dbf6f09509f515d1f5ab999262fb7;hb=98c966c64594611e469313314abd1e59524adb4a;hp=3d39fd6de8d0e2e79c4a19ae8c7cae577b04dc0a;hpb=85e30074c271cb2d13b984e9dcb223d7bdde19f4;p=lyx.git diff --git a/src/bufferlist.C b/src/bufferlist.C index 3d39fd6de8..3b69c1d071 100644 --- a/src/bufferlist.C +++ b/src/bufferlist.C @@ -1,36 +1,25 @@ /* This file is part of - * ====================================================== - * + * ====================================================== + * * LyX, The Document Word Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * This file is Copyright 1996-2001 * Lars Gullik Bjønnes * - * ====================================================== + * ====================================================== */ +#include + #ifdef __GNUG__ #pragma implementation #endif -#include - -#include -#include -#include - -#include "frontends/Alert.h" #include "bufferlist.h" #include "lyx_main.h" -#include "support/FileInfo.h" -#include "support/filetools.h" -#include "support/lyxmanip.h" -#include "support/lyxfunctional.h" -#include "support/LAssert.h" -#include "lyx_gui_misc.h" #include "lastfiles.h" #include "debug.h" #include "lyxrc.h" @@ -42,6 +31,20 @@ #include "LyXView.h" #include "vc-backend.h" #include "TextCache.h" +#include "lyxtextclasslist.h" + +#include "frontends/Alert.h" + +#include "support/FileInfo.h" +#include "support/filetools.h" +#include "support/lyxmanip.h" +#include "support/lyxfunctional.h" +#include "support/LAssert.h" + +#include +#include +#include + using std::vector; using std::find; @@ -98,7 +101,8 @@ bool BufferList::empty() const } -bool BufferList::qwriteOne(Buffer * buf, string const & fname, string & unsaved_list) +bool BufferList::qwriteOne(Buffer * buf, string const & fname, + string & unsaved_list) { bool reask = true; while (reask) { @@ -120,39 +124,40 @@ bool BufferList::qwriteOne(Buffer * buf, string const & fname, string & unsaved_ if (buf->isUnnamed()) { removeAutosaveFile(buf->fileName()); } - + unsaved_list += MakeDisplayPath(fname, 50) + "\n"; return true; case 3: // Cancel return false; } } - return false; + return true; } - + bool BufferList::qwriteAll() { - bool are_unsaved = false; - string unsaved; - for (BufferStorage::iterator it = bstore.begin(); - it != bstore.end(); ++it) { + string unsaved; + BufferStorage::iterator it = bstore.begin(); + BufferStorage::iterator end = bstore.end(); + for (; it != end; ++it) { if (!(*it)->isLyxClean()) { string fname; if ((*it)->isUnnamed()) fname = OnlyFilename((*it)->fileName()); else fname = MakeDisplayPath((*it)->fileName(), 50); - are_unsaved = qwriteOne(*it, fname, unsaved); + if (!qwriteOne(*it, fname, unsaved)) // cancel the request! + return false; } } - - if (are_unsaved && lyxrc.exit_confirmation) { + + if (!unsaved.empty() && lyxrc.exit_confirmation) { return Alert::askQuestion(_("Some documents were not saved:"), - unsaved, _("Exit anyway?")); - } + unsaved, _("Exit anyway?")); + } - return true; + return true; } @@ -162,7 +167,7 @@ void BufferList::closeAll() // Since we are closing we can just as well delete all // in the textcache this will also speed the closing/quiting up a bit. textcache.clear(); - + while (!bstore.empty()) { close(bstore.front()); } @@ -173,12 +178,14 @@ void BufferList::closeAll() bool BufferList::close(Buffer * 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->getUser()) + buf->getUser()->insetUnlock(); + if (buf->paragraph && !buf->isLyxClean() && !quitting) { if (buf->getUser()) buf->getUser()->owner()->prohibitInput(); @@ -191,7 +198,7 @@ bool BufferList::close(Buffer * buf) while (reask) { switch (Alert::askConfirmation(_("Changes in document:"), fname, - _("Save document?"))){ + _("Save document?"))) { case 1: // Yes if (buf->isUnnamed()) reask = !WriteAs(current_view, buf); @@ -236,14 +243,16 @@ vector const BufferList::getFileNames() const Buffer * BufferList::first() { - if (bstore.empty()) return 0; + if (bstore.empty()) + return 0; return bstore.front(); } Buffer * BufferList::getBuffer(unsigned int choice) { - if (choice >= bstore.size()) return 0; + if (choice >= bstore.size()) + return 0; return bstore[choice]; } @@ -251,10 +260,10 @@ Buffer * BufferList::getBuffer(unsigned int choice) int BufferList::unlockInset(UpdatableInset * inset) { lyx::Assert(inset); - - //if (!inset) return 1; - for (BufferStorage::iterator it = bstore.begin(); - it != bstore.end(); ++it) { + + BufferStorage::iterator it = bstore.begin(); + BufferStorage::iterator end = bstore.end(); + for (; it != end; ++it) { if ((*it)->getUser() && (*it)->getUser()->theLockingInset() == inset) { (*it)->getUser()->insetUnlock(); @@ -267,8 +276,9 @@ int BufferList::unlockInset(UpdatableInset * inset) void BufferList::updateIncludedTeXfiles(string const & mastertmpdir) { - for (BufferStorage::iterator it = bstore.begin(); - it != bstore.end(); ++it) { + BufferStorage::iterator it = bstore.begin(); + BufferStorage::iterator end = bstore.end(); + for (; it != end; ++it) { if (!(*it)->isDepClean(mastertmpdir)) { string writefile = mastertmpdir; writefile += '/'; @@ -288,20 +298,21 @@ void BufferList::emergencyWriteAll() } -void BufferList::emergencyWrite(Buffer * buf) +void BufferList::emergencyWrite(Buffer * buf) { // assert(buf) // this is not good since C assert takes an int - // and a pointer is a long (JMarc) + // and a pointer is a long (JMarc) assert(buf != 0); // use c assert to avoid a loop - + // No need to save if the buffer has not changed. - if (buf->isLyxClean()) return; - + if (buf->isLyxClean()) + return; + lyxerr << fmt(_("lyx: Attempting to save document %s as..."), buf->isUnnamed() ? OnlyFilename(buf->fileName()).c_str() : buf->fileName().c_str()) << endl; - + // We try to save three places: // 1) Same place as document. Unless it is an unnamed doc. @@ -317,7 +328,7 @@ void BufferList::emergencyWrite(Buffer * buf) lyxerr << _(" Save failed! Trying...") << endl; } } - + // 2) In HOME directory. string s = AddName(GetEnvPath("HOME"), buf->fileName()); s += ".emergency"; @@ -327,9 +338,9 @@ void BufferList::emergencyWrite(Buffer * buf) lyxerr << _(" Save seems successful. Phew.") << endl; return; } - + lyxerr << _(" Save failed! Trying...") << endl; - + // 3) In "/tmp" directory. // MakeAbsPath to prepend the current // drive letter on OS/2 @@ -348,20 +359,20 @@ void BufferList::emergencyWrite(Buffer * buf) Buffer * BufferList::readFile(string const & s, bool ronly) { - Buffer * b = bstore.newBuffer(s, ronly); - - string ts = s; + string ts(s); string e = OnlyPath(s); string a = e; // File information about normal file FileInfo fileInfo2(s); if (!fileInfo2.exist()) { - Alert::alert(_("Error!"), _("Cannot open file"), + Alert::alert(_("Error!"), _("Cannot open file"), MakeDisplayPath(s)); return 0; } - + + Buffer * b = bstore.newBuffer(s, ronly); + // Check if emergency save file exists and is newer. e += OnlyFilename(s) + ".emergency"; FileInfo fileInfoE(e); @@ -432,7 +443,7 @@ bool BufferList::exists(string const & s) const bool BufferList::isLoaded(Buffer const * b) const { lyx::Assert(b); - + BufferStorage::const_iterator cit = find(bstore.begin(), bstore.end(), b); return cit != bstore.end(); @@ -467,13 +478,15 @@ Buffer * BufferList::newFile(string const & name, string tname, bool isNamed) } } if (!templateok) { - Alert::alert(_("Error!"), _("Unable to open template"), + Alert::alert(_("Error!"), _("Unable to open template"), MakeDisplayPath(tname)); // no template, start with empty buffer b->paragraph = new Paragraph; + b->paragraph->layout(textclasslist[b->params.textclass].defaultLayoutName()); } } else { // start with empty buffer b->paragraph = new Paragraph; + b->paragraph->layout(textclasslist[b->params.textclass].defaultLayoutName()); } if (!lyxrc.new_ask_filename && !isNamed) { @@ -482,7 +495,7 @@ Buffer * BufferList::newFile(string const & name, string tname, bool isNamed) } b->setReadonly(false); - + return b; } @@ -498,7 +511,7 @@ Buffer * BufferList::loadLyXFile(string const & filename, bool tolastfiles) // file already open? if (exists(s)) { - if (Alert::askQuestion(_("Document is already open:"), + if (Alert::askQuestion(_("Document is already open:"), MakeDisplayPath(s, 50), _("Do you want to reload that document?"))) { // Reload is accomplished by closing and then loading @@ -507,7 +520,7 @@ Buffer * BufferList::loadLyXFile(string const & filename, bool tolastfiles) } // Fall through to new load. (Asger) } else { - // Here, we pretend that we just loaded the + // Here, we pretend that we just loaded the // open document return getBuffer(s); } @@ -529,15 +542,15 @@ Buffer * BufferList::loadLyXFile(string const & filename, bool tolastfiles) if (LyXVC::file_not_found_hook(s)) { // Ask if the file should be checked out for // viewing/editing, if so: load it. - if (Alert::askQuestion(_("Do you want to retrieve file under version control?"))) { + if (Alert::askQuestion(_("Do you want to retrieve file under version control?"))) { // How can we know _how_ to do the checkout? // With the current VC support it has to be, // a RCS file since CVS do not have special ,v files. - RCS::retrive(s); + RCS::retrieve(s); return loadLyXFile(filename, tolastfiles); } } - if (Alert::askQuestion(_("Cannot open specified file:"), + if (Alert::askQuestion(_("Cannot open specified file:"), MakeDisplayPath(s, 50), _("Create new document with this name?"))) {