From: Bo Peng Date: Sat, 15 Sep 2007 18:31:32 +0000 (+0000) Subject: Embedding: add a check box to InsetGraphic and show/change embedding status X-Git-Tag: 1.6.10~8334 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=93196b1f733ce24b5297d542fdedacc625bc0285;p=features.git Embedding: add a check box to InsetGraphic and show/change embedding status git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20297 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/lib/lyx2lyx/lyx_1_6.py b/lib/lyx2lyx/lyx_1_6.py index 30c3421942..84f8ba6633 100644 --- a/lib/lyx2lyx/lyx_1_6.py +++ b/lib/lyx2lyx/lyx_1_6.py @@ -179,6 +179,26 @@ def remove_manifest(document): 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 # @@ -197,7 +217,7 @@ convert = [ ] revert = [ - [284, [remove_manifest]], + [284, [remove_manifest, remove_inzip_options]], [283, []], [282, [revert_flex]], [281, []], diff --git a/src/EmbeddedFiles.cpp b/src/EmbeddedFiles.cpp index a28864b4b2..a985ea646c 100644 --- a/src/EmbeddedFiles.cpp +++ b/src/EmbeddedFiles.cpp @@ -468,7 +468,9 @@ void EmbeddedFiles::writeManifest(ostream & os) const 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 " diff --git a/src/EmbeddedFiles.h b/src/EmbeddedFiles.h index 0191c3b366..1d526973d3 100644 --- a/src/EmbeddedFiles.h +++ b/src/EmbeddedFiles.h @@ -113,11 +113,14 @@ class ErrorList; 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 diff --git a/src/frontends/controllers/ControlEmbeddedFiles.cpp b/src/frontends/controllers/ControlEmbeddedFiles.cpp index ac61878bdb..fddf866b43 100644 --- a/src/frontends/controllers/ControlEmbeddedFiles.cpp +++ b/src/frontends/controllers/ControlEmbeddedFiles.cpp @@ -111,6 +111,9 @@ void ControlEmbeddedFiles::setEmbed(EmbeddedFile & item, bool embed, bool update 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())); diff --git a/src/frontends/qt4/GuiGraphics.cpp b/src/frontends/qt4/GuiGraphics.cpp index 2c47a0aca9..a1741ba4a9 100644 --- a/src/frontends/qt4/GuiGraphics.cpp +++ b/src/frontends/qt4/GuiGraphics.cpp @@ -285,6 +285,7 @@ void GuiGraphicsDialog::on_browsePB_clicked() controller().browse(qstring_to_ucs4(filename->text())); if(!str.empty()){ filename->setText(toqstr(str)); + embedCB->setCheckState(Qt::Unchecked); changed(); } } @@ -454,6 +455,7 @@ void GuiGraphicsDialog::updateContents() 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()) { @@ -600,6 +602,7 @@ void GuiGraphicsDialog::applyView() igp.filename.set(internal_path(fromqstr(filename->text())), controller().bufferFilepath()); + igp.filename.setEmbed(embedCB->checkState() == Qt::Checked); // the bb section igp.bb.erase(); diff --git a/src/frontends/qt4/ui/GraphicsUi.ui b/src/frontends/qt4/ui/GraphicsUi.ui index ff70d6d77a..e4799ad4b5 100644 --- a/src/frontends/qt4/ui/GraphicsUi.ui +++ b/src/frontends/qt4/ui/GraphicsUi.ui @@ -49,7 +49,7 @@ 6 - + &Edit @@ -62,7 +62,7 @@ - + Select an image file @@ -71,6 +71,13 @@ &Browse... + + + + + + + @@ -92,7 +99,7 @@ - + Output Size @@ -214,7 +221,7 @@ - + Rotate Graphics diff --git a/src/insets/InsetGraphics.cpp b/src/insets/InsetGraphics.cpp index e979e24e2f..b75fc82def 100644 --- a/src/insets/InsetGraphics.cpp +++ b/src/insets/InsetGraphics.cpp @@ -243,13 +243,11 @@ void InsetGraphics::updateEmbeddedFile(Buffer const & buf, 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; } @@ -305,7 +303,7 @@ void InsetGraphics::read(Buffer const & buf, Lexer & lex) 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()); } diff --git a/src/insets/InsetGraphicsParams.cpp b/src/insets/InsetGraphicsParams.cpp index 6b1bc4cfd4..73060d027c 100644 --- a/src/insets/InsetGraphicsParams.cpp +++ b/src/insets/InsetGraphicsParams.cpp @@ -18,7 +18,6 @@ #include "Lexer.h" #include "LyXRC.h" #include "Buffer.h" -#include "EmbeddedFiles.h" #include "graphics/GraphicsParams.h" @@ -154,15 +153,10 @@ bool operator!=(InsetGraphicsParams const & left, 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'; @@ -211,6 +205,12 @@ bool InsetGraphicsParams::Read(Lexer & lex, string const & token, string const & 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(); diff --git a/src/insets/InsetGraphicsParams.h b/src/insets/InsetGraphicsParams.h index 172215dd22..77423c02b8 100644 --- a/src/insets/InsetGraphicsParams.h +++ b/src/insets/InsetGraphicsParams.h @@ -17,6 +17,7 @@ #include "graphics/GraphicsTypes.h" #include "Length.h" #include "support/FileName.h" +#include "EmbeddedFiles.h" namespace lyx { @@ -31,7 +32,7 @@ class InsetGraphicsParams { public: /// Image filename. - support::DocFileName filename; + EmbeddedFile filename; /// Scaling the Screen inside Lyx unsigned int lyxscale; /// How to display the image inside LyX