X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer_funcs.C;h=b1d50680814fc57d79da8710fdc1a925f240c7bf;hb=86e0dfa3e11957318ca4f3f549248326aa806eb4;hp=59b1cfc9e43c65ecd9c150da7bded07b9532dfae;hpb=8721e76079100c9238b97b4efdd2637cc2a6790a;p=lyx.git diff --git a/src/buffer_funcs.C b/src/buffer_funcs.C index 59b1cfc9e4..b1d5068081 100644 --- a/src/buffer_funcs.C +++ b/src/buffer_funcs.C @@ -3,48 +3,55 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Alfredo Braunstein * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. * */ #include #include "buffer_funcs.h" -#include "bufferlist.h" + #include "buffer.h" +#include "bufferlist.h" +#include "bufferparams.h" #include "errorlist.h" #include "gettext.h" -#include "vc-backend.h" #include "LaTeX.h" -#include "ParagraphList.h" #include "paragraph.h" +#include "lyxvc.h" +#include "texrow.h" +#include "vc-backend.h" #include "frontends/Alert.h" -#include "support/filetools.h" #include "support/FileInfo.h" +#include "support/filetools.h" #include "support/lyxlib.h" +using lyx::support::bformat; +using lyx::support::FileInfo; +using lyx::support::IsFileWriteable; +using lyx::support::LibFileSearch; +using lyx::support::MakeDisplayPath; +using lyx::support::OnlyFilename; +using lyx::support::OnlyPath; +using lyx::support::unlink; -extern BufferList bufferlist; +using std::string; -using namespace lyx::support; +extern BufferList bufferlist; namespace { bool readFile(Buffer * b, string const & s) { - string ts(s); - string e = OnlyPath(s); - string a = e; // File information about normal file - FileInfo fileInfo(s); - - if (!fileInfo.exist()) { + FileInfo fileN(s); + if (!fileN.exist()) { string const file = MakeDisplayPath(s, 50); string text = bformat(_("The specified document\n%1$s" "\ncould not be read."), file); @@ -53,58 +60,59 @@ bool readFile(Buffer * b, string const & s) } // Check if emergency save file exists and is newer. - e += OnlyFilename(s) + ".emergency"; - FileInfo fileInfoE(e); - - bool use_emergency = false; - - if (fileInfoE.exist() && fileInfo.exist()) { - if (fileInfoE.getModificationTime() - > fileInfo.getModificationTime()) { - string const file = MakeDisplayPath(s, 20); - string text = bformat(_("An emergency save of the document %1$s exists.\n" - "\nRecover emergency save?"), file); - int const ret = Alert::prompt(_("Load emergency save?"), - text, 0, 1, _("&Recover"), _("&Load Original")); + string const e = OnlyPath(s) + OnlyFilename(s) + ".emergency"; + FileInfo fileE(e); - if (ret == 0) { - ts = e; - // the file is not saved if we load the - // emergency file. - b->markDirty(); - use_emergency = true; - } + if (fileE.exist() && fileN.exist() + && fileE.getModificationTime() > fileN.getModificationTime()) + { + string const file = MakeDisplayPath(s, 20); + string text = bformat(_("An emergency save of the document " + "%1$s exists.\n\n" + "Recover emergency save?"), file); + switch (Alert::prompt(_("Load emergency save?"), text, 0, 2, + _("&Recover"), _("&Load Original"), + _("&Cancel"))) + { + case 0: + // the file is not saved if we load the emergency file. + b->markDirty(); + return b->readFile(e); + case 1: + break; + default: + return false; } } - if (!use_emergency) { - // Now check if autosave file is newer. - a += '#'; - a += OnlyFilename(s); - a += '#'; - FileInfo fileInfoA(a); - if (fileInfoA.exist() && fileInfo.exist()) { - if (fileInfoA.getModificationTime() - > fileInfo.getModificationTime()) { - string const file = MakeDisplayPath(s, 20); - string text = bformat(_("The backup of the document %1$s is newer.\n\n" - "Load the backup instead?"), file); - int const ret = Alert::prompt(_("Load backup?"), - text, 0, 1, _("&Load backup"), _("Load &original")); - - if (ret == 0) { - ts = a; - // the file is not saved if we load the - // autosave file. - b->markDirty(); - } else { - // Here, we should delete the autosave - unlink(a); - } - } + // Now check if autosave file is newer. + string const a = OnlyPath(s) + '#' + OnlyFilename(s) + '#'; + FileInfo fileA(a); + + if (fileA.exist() && fileN.exist() + && fileA.getModificationTime() > fileN.getModificationTime()) + { + string const file = MakeDisplayPath(s, 20); + string text = bformat(_("The backup of the document " + "%1$s is newer.\n\nLoad the " + "backup instead?"), file); + switch (Alert::prompt(_("Load backup?"), text, 0, 2, + _("&Load backup"), _("Load &original"), + _("&Cancel") )) + { + case 0: + // the file is not saved if we load the autosave file. + b->markDirty(); + return b->readFile(a); + case 1: + // Here we delete the autosave + unlink(a); + break; + default: + return false; } } - return b->readFile(ts); + return b->readFile(s); } @@ -120,7 +128,7 @@ bool loadLyXFile(Buffer * b, string const & s) // Fall through case 1: if (readFile(b, s)) { - b->lyxvc.file_found_hook(s); + b->lyxvc().file_found_hook(s); return true; } break; @@ -163,16 +171,10 @@ Buffer * newFile(string const & filename, string const & templatename, if (!tname.empty()) { if (!b->readFile(tname)) { string const file = MakeDisplayPath(tname, 50); - string const text = bformat(_("The specified document template\n%1$s\n" - "could not be read."), file); + string const text = bformat(_("The specified document template\n%1$s\ncould not be read."), file); Alert::error(_("Could not read template"), text); // no template, start with empty buffer - b->paragraphs.push_back(Paragraph()); - b->paragraphs.begin()->layout(b->params.getLyXTextClass().defaultLayout()); } - } else { // start with empty buffer - b->paragraphs.push_back(Paragraph()); - b->paragraphs.begin()->layout(b->params.getLyXTextClass().defaultLayout()); } if (!isNamed) { @@ -181,7 +183,8 @@ Buffer * newFile(string const & filename, string const & templatename, } b->setReadonly(false); - b->updateDocLang(b->params.language); + b->fully_loaded(true); + b->updateDocLang(b->params().language); return b; } @@ -196,9 +199,9 @@ void bufferErrors(Buffer const & buf, TeXErrors const & terr) int par_id = -1; int posstart = -1; int const errorrow = cit->error_in_line; - buf.texrow.getIdFromRow(errorrow, par_id, posstart); + buf.texrow().getIdFromRow(errorrow, par_id, posstart); int posend = -1; - buf.texrow.getIdFromRow(errorrow + 1, par_id, posend); + buf.texrow().getIdFromRow(errorrow + 1, par_id, posend); buf.error(ErrorItem(cit->error_desc, cit->error_text, par_id, posstart, posend));