]> git.lyx.org Git - lyx.git/blobdiff - src/BufferList.cpp
* src/LyXRC.{cpp,h}:
[lyx.git] / src / BufferList.cpp
index 810a5e4ac7fdf95aea666a8f625c3b36eaa3eeb2..e3fb568c7c5e8c69cc954a11eb1f1a8eb937cc75 100644 (file)
 #include "debug.h"
 #include "gettext.h"
 #include "Session.h"
-#include "lyx_cb.h"
 #include "LyX.h"
 #include "output_latex.h"
-#include "Paragraph.h"
 #include "ParagraphList.h"
 
-#include "frontends/Alert.h"
+#include "frontends/alert.h"
 
 #include "support/filetools.h"
-#include "support/package.h"
+#include "support/Package.h"
 
 #include <boost/bind.hpp>
 
 #include <algorithm>
 #include <functional>
 
-
-namespace lyx {
-
-using support::addName;
-using support::bformat;
-using support::FileName;
-using support::makeDisplayPath;
-using support::onlyFilename;
-using support::removeAutosaveFile;
-using support::package;
-using support::prefixIs;
-
 using boost::bind;
 
 using std::auto_ptr;
@@ -59,6 +45,18 @@ using std::vector;
 using std::back_inserter;
 using std::transform;
 
+
+namespace lyx {
+
+using support::addName;
+using support::bformat;
+using support::FileName;
+using support::makeDisplayPath;
+using support::onlyFilename;
+using support::removeAutosaveFile;
+using support::package;
+using support::prefixIs;
+
 namespace Alert = lyx::frontend::Alert;
 
 
@@ -102,9 +100,9 @@ bool BufferList::quitWriteBuffer(Buffer * buf)
 
        docstring file;
        if (buf->isUnnamed())
-               file = from_utf8(onlyFilename(buf->fileName()));
+               file = from_utf8(onlyFilename(buf->absFileName()));
        else
-               file = makeDisplayPath(buf->fileName(), 30);
+               file = makeDisplayPath(buf->absFileName(), 30);
 
        docstring const text =
                bformat(_("The document %1$s has unsaved changes.\n\n"
@@ -120,9 +118,9 @@ bool BufferList::quitWriteBuffer(Buffer * buf)
                bool succeeded;
 
                if (buf->isUnnamed())
-                       succeeded = writeAs(buf);
+                       succeeded = buf->writeAs();
                else
-                       succeeded = menuWrite(buf);
+                       succeeded = buf->menuWrite();
 
                if (!succeeded)
                        return false;
@@ -131,7 +129,7 @@ bool BufferList::quitWriteBuffer(Buffer * buf)
                // have no autosave file but I guess
                // this is really inprobable (Jug)
                if (buf->isUnnamed())
-                       removeAutosaveFile(buf->fileName());
+                       removeAutosaveFile(buf->absFileName());
 
        } else {
                return false;
@@ -158,8 +156,8 @@ bool BufferList::quitWriteAll()
        for (; it != end; ++it) {
                // if master/slave are both open, do not save slave since it
                // will be automatically loaded when the master is loaded
-               if ((*it)->getMasterBuffer() == (*it))
-                       LyX::ref().session().lastOpened().add(FileName((*it)->fileName()));
+               if ((*it)->masterBuffer() == (*it))
+                       LyX::ref().session().lastOpened().add(FileName((*it)->absFileName()));
        }
 
        return true;
@@ -210,9 +208,9 @@ bool BufferList::close(Buffer * buf, bool const ask)
 
        docstring fname;
        if (buf->isUnnamed())
-               fname = from_utf8(onlyFilename(buf->fileName()));
+               fname = from_utf8(onlyFilename(buf->absFileName()));
        else
-               fname = makeDisplayPath(buf->fileName(), 30);
+               fname = makeDisplayPath(buf->absFileName(), 30);
 
        docstring const text =
                bformat(_("The document %1$s has unsaved changes.\n\n"
@@ -223,18 +221,14 @@ bool BufferList::close(Buffer * buf, bool const ask)
 
        if (ret == 0) {
                if (buf->isUnnamed()) {
-                       if (!writeAs(buf))
+                       if (!buf->writeAs())
                                return false;
-               } else if (!menuWrite(buf))
-                       return false;
-               else
+               } else if (!buf->menuWrite())
                        return false;
        } else if (ret == 2)
                return false;
-
-       if (buf->isUnnamed()) {
-               removeAutosaveFile(buf->fileName());
-       }
+               
+       removeAutosaveFile(buf->absFileName());
 
        release(buf);
        return true;
@@ -246,7 +240,7 @@ vector<string> const BufferList::getFileNames() const
        vector<string> nvec;
        transform(bstore.begin(), bstore.end(),
                  back_inserter(nvec),
-                 boost::bind(&Buffer::fileName, _1));
+                 boost::bind(&Buffer::absFileName, _1));
        return nvec;
 }
 
@@ -267,7 +261,7 @@ Buffer * BufferList::last()
 }
 
 
-Buffer * BufferList::getBuffer(unsigned int const choice)
+Buffer * BufferList::getBuffer(unsigned int choice)
 {
        if (choice >= bstore.size())
                return 0;
@@ -308,17 +302,17 @@ Buffer * BufferList::previous(Buffer const * buf) const
 }
 
 
-void BufferList::updateIncludedTeXfiles(string const & mastertmpdir,
+void BufferList::updateIncludedTeXfiles(string const & masterTmpDir,
                                        OutputParams const & runparams)
 {
        BufferStorage::iterator it = bstore.begin();
        BufferStorage::iterator end = bstore.end();
        for (; it != end; ++it) {
-               if (!(*it)->isDepClean(mastertmpdir)) {
-                       string writefile = addName(mastertmpdir, (*it)->getLatexName());
-                       (*it)->makeLaTeXFile(FileName(writefile), mastertmpdir,
+               if (!(*it)->isDepClean(masterTmpDir)) {
+                       string writefile = addName(masterTmpDir, (*it)->latexName());
+                       (*it)->makeLaTeXFile(FileName(writefile), masterTmpDir,
                                             runparams, false);
-                       (*it)->markDepClean(mastertmpdir);
+                       (*it)->markDepClean(masterTmpDir);
                }
        }
 }
@@ -335,14 +329,16 @@ void BufferList::emergencyWrite(Buffer * buf)
 {
        // Use ::assert to avoid a loop, BOOST_ASSERT ends up calling ::assert
        // compare with 0 to avoid pointer/interger comparison
-       assert(buf != 0);
+       // ::assert(buf != 0);
+       if (!buf)
+               return;
 
        // No need to save if the buffer has not changed.
        if (buf->isClean())
                return;
 
        string const doc = buf->isUnnamed()
-               ? onlyFilename(buf->fileName()) : buf->fileName();
+               ? onlyFilename(buf->absFileName()) : buf->absFileName();
 
        lyxerr << to_utf8(
                bformat(_("LyX: Attempting to save document %1$s"), from_utf8(doc)))
@@ -351,7 +347,7 @@ void BufferList::emergencyWrite(Buffer * buf)
        // We try to save three places:
        // 1) Same place as document. Unless it is an unnamed doc.
        if (!buf->isUnnamed()) {
-               string s = buf->fileName();
+               string s = buf->absFileName();
                s += ".emergency";
                lyxerr << "  " << s << endl;
                if (buf->writeFile(FileName(s))) {
@@ -364,7 +360,7 @@ void BufferList::emergencyWrite(Buffer * buf)
        }
 
        // 2) In HOME directory.
-       string s = addName(package().home_dir().absFilename(), buf->fileName());
+       string s = addName(package().home_dir().absFilename(), buf->absFileName());
        s += ".emergency";
        lyxerr << ' ' << s << endl;
        if (buf->writeFile(FileName(s))) {
@@ -378,7 +374,7 @@ void BufferList::emergencyWrite(Buffer * buf)
        // 3) In "/tmp" directory.
        // MakeAbsPath to prepend the current
        // drive letter on OS/2
-       s = addName(package().temp_dir().absFilename(), buf->fileName());
+       s = addName(package().temp_dir().absFilename(), buf->absFileName());
        s += ".emergency";
        lyxerr << ' ' << s << endl;
        if (buf->writeFile(FileName(s))) {
@@ -394,7 +390,7 @@ bool BufferList::exists(string const & s) const
 {
        return find_if(bstore.begin(), bstore.end(),
                       bind(equal_to<string>(),
-                           bind(&Buffer::fileName, _1),
+                           bind(&Buffer::absFileName, _1),
                            s))
                != bstore.end();
 }
@@ -414,7 +410,7 @@ Buffer * BufferList::getBuffer(string const & s)
        BufferStorage::iterator it =
                find_if(bstore.begin(), bstore.end(),
                        bind(equal_to<string>(),
-                            bind(&Buffer::fileName, _1),
+                            bind(&Buffer::absFileName, _1),
                             s));
 
        return it != bstore.end() ? (*it) : 0;
@@ -436,9 +432,19 @@ void BufferList::setCurrentAuthor(docstring const & name, docstring const & emai
 {
        BufferStorage::iterator it = bstore.begin();
        BufferStorage::iterator end = bstore.end();
-       for (; it != end; ++it) {
+       for (; it != end; ++it)
                (*it)->params().authors().record(0, Author(name, email));
-       }
+}
+
+
+int BufferList::bufferNum(std::string const & name) const
+{
+       vector<string> buffers = getFileNames();
+       vector<string>::const_iterator cit =
+               std::find(buffers.begin(), buffers.end(), name);
+       if (cit == buffers.end())
+               return 0;
+       return int(cit - buffers.begin());
 }