if (&(*it) == ptr) {
// this is basically BufferView::saveBookmark(0)
LyX::ref().session().bookmarks().save(
- FileName(buf->fileName()),
+ FileName(buf->absFileName()),
it.bottom().pit(),
it.bottom().pos(),
it.paragraph().id(),
}
+void EmbeddedFile::updateInsets(Buffer const * buf) const
+{
+ vector<Inset const *>::const_iterator it = inset_list_.begin();
+ vector<Inset const *>::const_iterator it_end = inset_list_.end();
+ for (; it != it_end; ++it)
+ const_cast<Inset *>(*it)->updateEmbeddedFile(*buf, *this);
+}
+
+
bool EmbeddedFiles::enabled() const
{
return buffer_->params().embedded;
}
-bool EmbeddedFiles::enable(bool flag)
+void EmbeddedFiles::enable(bool flag)
{
if (enabled() != flag) {
// if enable, copy all files to temppath()
// if disable, extract all files
if ((flag && !updateFromExternalFile()) || (!flag && !extract()))
- return false;
+ return;
// if operation is successful
buffer_->markDirty();
buffer_->params().embedded = flag;
+ if (flag)
+ updateInsets();
}
}
-void EmbeddedFiles::registerFile(string const & filename,
+EmbeddedFile & EmbeddedFiles::registerFile(string const & filename,
bool embed, Inset const * inset, string const & inzipName)
{
// filename can be relative or absolute, translate to absolute filename
if (it != file_list_.end()) {
it->addInset(inset);
it->validate();
- return;
+ return *it;
}
// try to be more careful
file_list_.push_back(EmbeddedFile(abs_filename,
getInzipName(abs_filename, inzipName), embed, inset));
+ return file_list_.back();
}
}
-bool EmbeddedFiles::write(DocFileName const & filename)
+bool EmbeddedFiles::writeFile(DocFileName const & filename)
{
// file in the temporary path has the content
string const content = FileName(addName(buffer_->temppath(),
int begin_manifest_line = -1;
file_list_.clear();
- string filename = "";
- string inzipName = "";
- bool status = "";
+ string filename;
+ string inzipName;
+ bool embedded = false;
while (lex.isOK()) {
lex.next();
lex >> filename;
else if (token == "\\inzipName")
lex >> inzipName;
- else if (token == "\\status") {
- lex >> status;
- registerFile(filename, status, NULL, inzipName);
+ else if (token == "\\embed") {
+ lex >> embedded;
+ registerFile(filename, embedded, NULL, inzipName);
filename = "";
inzipName = "";
} else {
EmbeddedFiles::EmbeddedFileList::const_iterator it = begin();
EmbeddedFiles::EmbeddedFileList::const_iterator it_end = end();
for (; it != it_end; ++it) {
- if (!it->valid())
+ // only saved 'extra' files. Other embedded files are saved
+ // with insets.
+ if (!it->valid() || it->refCount() > 0)
continue;
// save the relative path
os << "\\filename "
<< to_utf8(makeRelPath(from_utf8(it->absFilename()),
from_utf8(buffer_->filePath()))) << '\n'
<< "\\inzipName " << it->inzipName() << '\n'
- << "\\status " << (it->embedded() ? "true" : "false") << '\n';
+ << "\\embed " << (it->embedded() ? "true" : "false") << '\n';
}
}
+void EmbeddedFiles::updateInsets() const
+{
+ EmbeddedFiles::EmbeddedFileList::const_iterator it = begin();
+ EmbeddedFiles::EmbeddedFileList::const_iterator it_end = end();
+ for (; it != it_end; ++it)
+ if (it->valid() && it->refCount() > 0)
+ it->updateInsets(buffer_);
+}
+
+
}