X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferlist.C;h=8455604fe9570b6e97f2eafb13e7084349f31c41;hb=7aebbe6e10b3b4cf1f110b98c73a0a27059da6d8;hp=ecfcb4945aee23100197efc12214d222191c1b52;hpb=83acbbd5237373926c629855379e1df9a04209b2;p=lyx.git diff --git a/src/bufferlist.C b/src/bufferlist.C index ecfcb4945a..8455604fe9 100644 --- a/src/bufferlist.C +++ b/src/bufferlist.C @@ -12,21 +12,14 @@ * ====================================================== */ +#include + #ifdef __GNUG__ #pragma implementation #endif -#include - -#include -#include - #include "bufferlist.h" #include "lyx_main.h" -#include "support/FileInfo.h" -#include "support/filetools.h" -#include "support/lyxmanip.h" -#include "support/lyxfunctional.h" #include "lyx_gui_misc.h" #include "lastfiles.h" #include "debug.h" @@ -34,11 +27,25 @@ #include "lyxtext.h" #include "lyx_cb.h" #include "bufferview_funcs.h" +#include "BufferView.h" #include "gettext.h" #include "LyXView.h" #include "vc-backend.h" #include "TextCache.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; using std::endl; @@ -94,56 +101,62 @@ bool BufferList::empty() const } -bool BufferList::QwriteAll() +bool BufferList::qwriteOne(Buffer * buf, string const & fname, string & unsaved_list) +{ + bool reask = true; + while (reask) { + switch (Alert::askConfirmation(_("Changes in document:"), + fname, + _("Save document?"))) { + case 1: // Yes + // FIXME: WriteAs can be asynch ! + if (buf->isUnnamed()) + reask = !WriteAs(current_view, buf); + else { + reask = !MenuWrite(current_view, buf); + } + break; + case 2: // No + // if we crash after this we could + // have no autosave file but I guess + // this is really inprobable (Jug) + if (buf->isUnnamed()) { + removeAutosaveFile(buf->fileName()); + } + + unsaved_list += MakeDisplayPath(fname, 50) + "\n"; + return true; + case 3: // Cancel + return false; + } + } + return true; +} + + +bool BufferList::qwriteAll() { - bool askMoreConfirmation = false; - string unsaved; + string unsaved; for (BufferStorage::iterator it = bstore.begin(); - it != bstore.end(); ++it) { + it != bstore.end(); ++it) + { if (!(*it)->isLyxClean()) { string fname; if ((*it)->isUnnamed()) fname = OnlyFilename((*it)->fileName()); else fname = MakeDisplayPath((*it)->fileName(), 50); - bool reask = true; - while (reask) { - switch (AskConfirmation(_("Changes in document:"), - fname, - _("Save document?"))) { - case 1: // Yes - if ((*it)->isUnnamed()) - reask = !WriteAs(current_view, (*it)); - else { - reask = !MenuWrite(current_view, (*it)); - } - break; - case 2: // No - // if we crash after this we could - // have no autosave file but I guess - // this is really inprobable (Jug) - if ((*it)->isUnnamed()) { - removeAutosaveFile((*it)->fileName()); - } - askMoreConfirmation = true; - unsaved += MakeDisplayPath(fname, 50); - unsaved += "\n"; - reask = false; - break; - case 3: // Cancel - return false; - } - } + if (!qwriteOne(*it, fname, unsaved)) // cancel the request! + return false; } } - if (askMoreConfirmation && - lyxrc.exit_confirmation && - !AskQuestion(_("Some documents were not saved:"), - unsaved, _("Exit anyway?"))) { - return false; - } - - return true; + + if (!unsaved.empty() && lyxrc.exit_confirmation) { + return Alert::askQuestion(_("Some documents were not saved:"), + unsaved, _("Exit anyway?")); + } + + return true; } @@ -161,12 +174,6 @@ void BufferList::closeAll() } -void BufferList::resize() -{ - for_each(bstore.begin(), bstore.end(), mem_fun(&Buffer::resize)); -} - - bool BufferList::close(Buffer * buf) { lyx::Assert(buf); @@ -178,7 +185,7 @@ bool BufferList::close(Buffer * buf) if (buf->getUser()) buf->getUser()->insetUnlock(); if (buf->paragraph && !buf->isLyxClean() && !quitting) { if (buf->getUser()) - ProhibitInput(buf->getUser()); + buf->getUser()->owner()->prohibitInput(); string fname; if (buf->isUnnamed()) fname = OnlyFilename(buf->fileName()); @@ -186,7 +193,7 @@ bool BufferList::close(Buffer * buf) fname = MakeDisplayPath(buf->fileName(), 50); bool reask = true; while (reask) { - switch (AskConfirmation(_("Changes in document:"), + switch (Alert::askConfirmation(_("Changes in document:"), fname, _("Save document?"))){ case 1: // Yes @@ -197,7 +204,7 @@ bool BufferList::close(Buffer * buf) reask = false; } else { if (buf->getUser()) - AllowInput(buf->getUser()); + buf->getUser()->owner()->allowInput(); return false; } break; @@ -209,12 +216,12 @@ bool BufferList::close(Buffer * buf) break; case 3: // Cancel if (buf->getUser()) - AllowInput(buf->getUser()); + buf->getUser()->owner()->allowInput(); return false; } } if (buf->getUser()) - AllowInput(buf->getUser()); + buf->getUser()->owner()->allowInput(); } bstore.release(buf); @@ -353,6 +360,12 @@ Buffer * BufferList::readFile(string const & s, bool ronly) // File information about normal file FileInfo fileInfo2(s); + if (!fileInfo2.exist()) { + Alert::alert(_("Error!"), _("Cannot open file"), + MakeDisplayPath(s)); + return 0; + } + // Check if emergency save file exists and is newer. e += OnlyFilename(s) + ".emergency"; FileInfo fileInfoE(e); @@ -362,7 +375,7 @@ Buffer * BufferList::readFile(string const & s, bool ronly) if (fileInfoE.exist() && fileInfo2.exist()) { if (fileInfoE.getModificationTime() > fileInfo2.getModificationTime()) { - if (AskQuestion(_("An emergency save of this document exists!"), + if (Alert::askQuestion(_("An emergency save of this document exists!"), MakeDisplayPath(s, 50), _("Try to load that instead?"))) { ts = e; @@ -386,7 +399,7 @@ Buffer * BufferList::readFile(string const & s, bool ronly) if (fileInfoA.exist() && fileInfo2.exist()) { if (fileInfoA.getModificationTime() > fileInfo2.getModificationTime()) { - if (AskQuestion(_("Autosave file is newer."), + if (Alert::askQuestion(_("Autosave file is newer."), MakeDisplayPath(s, 50), _("Load that one instead?"))) { ts = a; @@ -448,23 +461,23 @@ Buffer * BufferList::newFile(string const & name, string tname, bool isNamed) if (tname.empty()) { tname = LibFileSearch("templates", "defaults.lyx"); } - if (!tname.empty() && IsLyXFilename(tname)) { + if (!tname.empty()) { bool templateok = false; LyXLex lex(0, 0); lex.setFile(tname); - if (lex.IsOK()) { + if (lex.isOK()) { if (b->readFile(lex)) { templateok = true; } } if (!templateok) { - WriteAlert(_("Error!"), _("Unable to open template"), + Alert::alert(_("Error!"), _("Unable to open template"), MakeDisplayPath(tname)); // no template, start with empty buffer - b->paragraph = new LyXParagraph; + b->paragraph = new Paragraph; } } else { // start with empty buffer - b->paragraph = new LyXParagraph; + b->paragraph = new Paragraph; } if (!lyxrc.new_ask_filename && !isNamed) { @@ -480,12 +493,16 @@ Buffer * BufferList::newFile(string const & name, string tname, bool isNamed) Buffer * BufferList::loadLyXFile(string const & filename, bool tolastfiles) { - // make sure our path is absolute - string const s = MakeAbsPath(filename); + // get absolute path of file and add ".lyx" to the filename if + // necessary + string s = FileSearch(string(), filename, "lyx"); + if (s.empty()) { + s = filename; + } // file already open? if (exists(s)) { - if (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 @@ -516,7 +533,7 @@ 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 (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. @@ -524,7 +541,7 @@ Buffer * BufferList::loadLyXFile(string const & filename, bool tolastfiles) return loadLyXFile(filename, tolastfiles); } } - if (AskQuestion(_("Cannot open specified file:"), + if (Alert::askQuestion(_("Cannot open specified file:"), MakeDisplayPath(s, 50), _("Create new document with this name?"))) {