document.manifest = None
+def remove_inzip_options(document):
+ "Remove inzipName and embed options from the Graphics inset"
+ i = 0
+ while 1:
+ i = find_token(document.body, "\\begin_inset Graphics", i)
+ if i == -1:
+ return
+ j = find_end_of_inset(document.body, i + 1)
+ if j == -1:
+ # should not happen
+ document.warning("Malformed LyX document: Could not find end of graphics inset.")
+ # If there's a inzip param, just remove that
+ k = find_token(document.body, "\tinzipName", i + 1, j)
+ if k != -1:
+ del document.body[k]
+ # embed option must follow the inzipName option
+ del document.body[k+1]
+ i = i + 1
+
+
##
# Conversion hub
#
]
revert = [
- [284, [remove_manifest]],
+ [284, [remove_manifest, remove_inzip_options]],
[283, []],
[282, [revert_flex]],
[281, []],
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 "
class EmbeddedFile : public support::DocFileName
{
public:
+ EmbeddedFile() {};
+
EmbeddedFile(std::string const & file, std::string const & inzip_name,
bool embedded, Inset const * inset);
/// filename in the zip file, usually the relative path
std::string inzipName() const { return inzip_name_; }
+ void setInzipName(std::string name) { inzip_name_ = name; }
/// embedded file, equals to temppath()/inzipName()
std::string embeddedFile(Buffer const * buf) const;
/// embeddedFile() or absFilename() depending on embedding status
else
item.extract(&buffer());
item.updateInsets(&buffer());
+ // FIXME: unless we record the type of file item, we will
+ // need to update all possible dialogs (bibtex etc).
+ updateDialog("graphics");
}
if (embed)
dispatchMessage("Embed file " + item.outputFilename(buffer().filePath()));
controller().browse(qstring_to_ucs4(filename->text()));
if(!str.empty()){
filename->setText(toqstr(str));
+ embedCB->setCheckState(Qt::Unchecked);
changed();
}
}
string const name =
igp.filename.outputFilename(controller().bufferFilepath());
filename->setText(toqstr(name));
+ embedCB->setCheckState(igp.filename.embedded() ? Qt::Checked : Qt::Unchecked);
// set the bounding box values
if (igp.bb.empty()) {
igp.filename.set(internal_path(fromqstr(filename->text())),
controller().bufferFilepath());
+ igp.filename.setEmbed(embedCB->checkState() == Qt::Checked);
// the bb section
igp.bb.erase();
<property name="spacing" >
<number>6</number>
</property>
- <item row="0" column="3" >
+ <item row="0" column="4" >
<widget class="QPushButton" name="editPB" >
<property name="text" >
<string>&Edit</string>
</property>
</widget>
</item>
- <item row="0" column="2" >
+ <item row="0" column="3" >
<widget class="QPushButton" name="browsePB" >
<property name="toolTip" >
<string>Select an image file</string>
<string>&Browse...</string>
</property>
</widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="embedCB" >
+ <property name="text" >
+ <string></string>
+ </property>
+ </widget>
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="filename" >
</property>
</widget>
</item>
- <item row="1" column="0" colspan="4" >
+ <item row="1" column="0" colspan="5" >
<widget class="QGroupBox" name="sizeGB" >
<property name="title" >
<string>Output Size</string>
</layout>
</widget>
</item>
- <item row="2" column="0" colspan="4" >
+ <item row="2" column="0" colspan="5" >
<widget class="QGroupBox" name="rotationGB" >
<property name="title" >
<string>Rotate Graphics</string>
EmbeddedFile const & file)
{
BOOST_ASSERT(buf.embeddedFiles().enabled());
- LYXERR(Debug::FILES) << "Update InsetGraphics file from "
- << params_.filename.toFilesystemEncoding() << std::endl;
- params_.filename.set(file.availableFile(&buf), buf.filePath());
- LYXERR(Debug::FILES) << " to "
- << params_.filename.toFilesystemEncoding() << std::endl;
- // FIXME: graphics dialog is not updated even if the underlying
- // filename is updated. What should I do?
+ params_.filename = file;
+ LYXERR(Debug::FILES) << "Update InsetGraphic with File "
+ << params_.filename.toFilesystemEncoding()
+ << ", embedding status: "
+ << params_.filename.embedded() << std::endl;
}
if (it != buf.embeddedFiles().end())
// using available file, embedded or external, depending on file availability and
// embedding status.
- params_.filename = DocFileName(it->availableFile(&buf));
+ params_.filename = *it;
}
graphic_->update(params().as_grfxParams());
}
#include "Lexer.h"
#include "LyXRC.h"
#include "Buffer.h"
-#include "EmbeddedFiles.h"
#include "graphics/GraphicsParams.h"
void InsetGraphicsParams::Write(ostream & os, Buffer const & buffer) const
{
// Do not write the default values
-
if (!filename.empty()) {
- // when we save, we still use the original filename
- EmbeddedFiles::EmbeddedFileList::const_iterator it =
- buffer.embeddedFiles().find(filename.toFilesystemEncoding());
- if (it != buffer.embeddedFiles().end())
- os << "\tfilename " << DocFileName(it->absFilename()).outputFilename(buffer.filePath()) << '\n';
- else
- os << "\tfilename " << filename.outputFilename(buffer.filePath()) << '\n';
+ os << "\tfilename " << filename.outputFilename(buffer.filePath()) << '\n';
+ os << "\tinzipName " << filename.inzipName() << '\n';
+ os << "\tembed " << (filename.embedded() ? "true" : "false") << '\n';
}
if (lyxscale != 100)
os << "\tlyxscale " << lyxscale << '\n';
if (token == "filename") {
lex.eatLine();
filename.set(lex.getString(), bufpath);
+ } else if (token == "inzipName") {
+ lex.eatLine();
+ filename.setInzipName(lex.getString());
+ } else if (token == "embed") {
+ lex.next();
+ filename.setEmbed(lex.getBool());
} else if (token == "lyxscale") {
lex.next();
lyxscale = lex.getInteger();
#include "graphics/GraphicsTypes.h"
#include "Length.h"
#include "support/FileName.h"
+#include "EmbeddedFiles.h"
namespace lyx {
{
public:
/// Image filename.
- support::DocFileName filename;
+ EmbeddedFile filename;
/// Scaling the Screen inside Lyx
unsigned int lyxscale;
/// How to display the image inside LyX