> The attached patch:
>
Here it is.

Bo
Index: src/insets/InsetGraphicsParams.h
===================================================================
--- src/insets/InsetGraphicsParams.h	(revision 20282)
+++ src/insets/InsetGraphicsParams.h	(working copy)
@@ -17,6 +17,7 @@
 #include "graphics/GraphicsTypes.h"
 #include "Length.h"
 #include "support/FileName.h"
+#include "EmbeddedFiles.h"
 
 namespace lyx {
 
@@ -31,7 +32,7 @@
 {
 public:
 	/// Image filename.
-	support::DocFileName filename;
+	EmbeddedFile filename;
 	/// Scaling the Screen inside Lyx
 	unsigned int lyxscale;
 	/// How to display the image inside LyX
Index: src/insets/InsetGraphics.cpp
===================================================================
--- src/insets/InsetGraphics.cpp	(revision 20282)
+++ src/insets/InsetGraphics.cpp	(working copy)
@@ -192,9 +192,9 @@
 		Buffer const & buffer = cur.buffer();
 		InsetGraphicsParams p;
 		InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buffer, p);
-		if (!p.filename.empty())
+		if (!p.filename.empty()) {
 			setParams(p);
-		else
+		} else
 			cur.noUpdate();
 		break;
 	}
@@ -243,13 +243,11 @@
 	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 @@
 		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());
 }
Index: src/insets/InsetGraphicsParams.cpp
===================================================================
--- src/insets/InsetGraphicsParams.cpp	(revision 20282)
+++ src/insets/InsetGraphicsParams.cpp	(working copy)
@@ -18,7 +18,6 @@
 #include "Lexer.h"
 #include "LyXRC.h"
 #include "Buffer.h"
-#include "EmbeddedFiles.h"
 
 #include "graphics/GraphicsParams.h"
 
@@ -154,15 +153,10 @@
 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 @@
 	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();
Index: src/EmbeddedFiles.cpp
===================================================================
--- src/EmbeddedFiles.cpp	(revision 20282)
+++ src/EmbeddedFiles.cpp	(working copy)
@@ -468,7 +468,9 @@
 	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 "
Index: src/frontends/qt4/GuiGraphics.cpp
===================================================================
--- src/frontends/qt4/GuiGraphics.cpp	(revision 20282)
+++ src/frontends/qt4/GuiGraphics.cpp	(working copy)
@@ -256,6 +256,7 @@
 		controller().browse(qstring_to_ucs4(filename->text()));
 	if(!str.empty()){
 		filename->setText(toqstr(str));
+		embedCB->setCheckState(Qt::Unchecked);
 		changed();
 	}
 }
@@ -425,6 +426,7 @@
 	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()) {
@@ -571,6 +573,7 @@
 
 	igp.filename.set(internal_path(fromqstr(filename->text())),
 			 controller().bufferFilepath());
+	igp.filename.setEmbed(embedCB->checkState() == Qt::Checked);
 
 	// the bb section
 	igp.bb.erase();
Index: src/frontends/qt4/ui/GraphicsUi.ui
===================================================================
--- src/frontends/qt4/ui/GraphicsUi.ui	(revision 20282)
+++ src/frontends/qt4/ui/GraphicsUi.ui	(working copy)
@@ -49,7 +49,7 @@
        <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>&amp;Edit</string>
@@ -62,7 +62,7 @@
          </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>
@@ -72,6 +72,13 @@
          </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 name="toolTip" >
@@ -92,7 +99,7 @@
          </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>
@@ -214,7 +221,7 @@
          </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>
Index: src/frontends/controllers/ControlEmbeddedFiles.cpp
===================================================================
--- src/frontends/controllers/ControlEmbeddedFiles.cpp	(revision 20282)
+++ src/frontends/controllers/ControlEmbeddedFiles.cpp	(working copy)
@@ -111,6 +111,9 @@
 		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()));
Index: src/EmbeddedFiles.h
===================================================================
--- src/EmbeddedFiles.h	(revision 20282)
+++ src/EmbeddedFiles.h	(working copy)
@@ -113,11 +113,14 @@
 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
Index: lib/lyx2lyx/lyx_1_6.py
===================================================================
--- lib/lyx2lyx/lyx_1_6.py	(revision 20282)
+++ lib/lyx2lyx/lyx_1_6.py	(working copy)
@@ -179,6 +179,26 @@
     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 @@
           ]
 
 revert =  [
-           [284, [remove_manifest]],
+           [284, [remove_manifest, remove_inzip_options]],
            [283, []],
            [282, [revert_flex]],
            [281, []],

Reply via email to