]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetGraphics.cpp
Embedding: prepare to read/write manifest in .lyx file
[lyx.git] / src / insets / InsetGraphics.cpp
index 61daef31aff975d5fc5795eb50a4e9eae4ff9d9a..70cfe9767d719a3d35a8a24788fe9cca231b2310 100644 (file)
@@ -71,12 +71,12 @@ TODO
 #include "Mover.h"
 #include "OutputParams.h"
 #include "sgml.h"
+#include "EmbeddedFiles.h"
 
 #include "frontends/alert.h"
 
 #include "support/convert.h"
 #include "support/filetools.h"
-#include "support/lyxalgo.h" // count
 #include "support/lyxlib.h" // sum
 #include "support/lstrings.h"
 #include "support/os.h"
@@ -85,6 +85,7 @@ TODO
 #include <boost/bind.hpp>
 #include <boost/tuple/tuple.hpp>
 
+#include <algorithm>
 #include <sstream>
 
 
@@ -112,7 +113,6 @@ using support::unzippedFileName;
 
 using std::endl;
 using std::string;
-using std::auto_ptr;
 using std::istringstream;
 using std::ostream;
 using std::ostringstream;
@@ -165,9 +165,9 @@ InsetGraphics::InsetGraphics(InsetGraphics const & ig)
 }
 
 
-auto_ptr<Inset> InsetGraphics::doClone() const
+Inset * InsetGraphics::clone() const
 {
-       return auto_ptr<Inset>(new InsetGraphics(*this));
+       return new InsetGraphics(*this);
 }
 
 
@@ -181,7 +181,7 @@ void InsetGraphics::doDispatch(Cursor & cur, FuncRequest & cmd)
 {
        switch (cmd.action) {
        case LFUN_GRAPHICS_EDIT: {
-               Buffer const & buffer = *cur.bv().buffer();
+               Buffer const & buffer = cur.bv().buffer();
                InsetGraphicsParams p;
                InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buffer, p);
                editGraphics(p, buffer);
@@ -231,6 +231,14 @@ bool InsetGraphics::getStatus(Cursor & cur, FuncRequest const & cmd,
 }
 
 
+void InsetGraphics::registerEmbeddedFiles(Buffer const &, 
+       EmbeddedFiles & files) const
+{
+       files.registerFile(params().filename.absFilename(), 
+               false, this);
+}
+
+
 void InsetGraphics::edit(Cursor & cur, bool)
 {
        InsetGraphicsMailer(*this).showDialog(&cur.bv());
@@ -262,7 +270,7 @@ Inset::EDITABLE InsetGraphics::editable() const
 void InsetGraphics::write(Buffer const & buf, ostream & os) const
 {
        os << "Graphics\n";
-       params().Write(os, buf.filePath());
+       params().Write(os, buf);
 }
 
 
@@ -275,6 +283,16 @@ void InsetGraphics::read(Buffer const & buf, Lexer & lex)
        else
                LYXERR(Debug::GRAPHICS) << "Not a Graphics inset!" << endl;
 
+       // InsetGraphics is read, with filename in params_. We do not know if this file actually
+       // exists or is embedded so we need to get the 'availableFile' from buf.embeddedFiles()
+       if (buf.embeddedFiles().enabled()) {
+               EmbeddedFiles::EmbeddedFileList::const_iterator it = 
+                       buf.embeddedFiles().find(params_.filename.toFilesystemEncoding());
+               if (it != buf.embeddedFiles().end())
+                       // using available file, embedded or external, depending on file availability and
+                       // embedding status.
+                       params_.filename = DocFileName(it->availableFile(&buf));
+       }
        graphic_->update(params().as_grfxParams());
 }
 
@@ -823,7 +841,7 @@ int InsetGraphics::latex(Buffer const & buf, odocstream & os,
        LYXERR(Debug::GRAPHICS) << "InsetGraphics::latex outputting:\n"
                                << latex_str << endl;
        // Return how many newlines we issued.
-       return int(lyx::count(latex_str.begin(), latex_str.end(),'\n'));
+       return int(std::count(latex_str.begin(), latex_str.end(),'\n'));
 }
 
 
@@ -848,8 +866,11 @@ int InsetGraphics::plaintext(Buffer const & buf, odocstream & os,
 
 namespace {
 
-int writeImageObject(char * format, odocstream & os, OutputParams const & runparams,
-                    docstring const graphic_label, docstring const attributes)
+int writeImageObject(char const * format,
+                     odocstream & os,
+                     OutputParams const & runparams,
+                    docstring const & graphic_label,
+                     docstring const & attributes)
 {
                if (runparams.flavor != OutputParams::XML) {
                        os << "<![ %output.print."
@@ -1005,7 +1026,7 @@ InsetGraphicsMailer::params2string(InsetGraphicsParams const & params,
 {
        ostringstream data;
        data << name_ << ' ';
-       params.Write(data, buffer.filePath());
+       params.Write(data, buffer);
        data << "\\end_inset\n";
        return data.str();
 }