This cleans up InsetGraphics::Cache and renames it as GraphicsInset so that 
the external inset can use it too.

-- 
Angus
Index: src/insets/graphicinset.h
===================================================================
RCS file: src/insets/graphicinset.h
diff -N src/insets/graphicinset.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/insets/graphicinset.h	3 Jun 2003 17:13:29 -0000
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+/**
+ * \file graphicinset.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS
+ */
+
+#ifndef GRAPHICINSET_H
+#define GRAPHICINSET_H
+
+#include "dimension.h"
+
+#include "graphics/GraphicsLoader.h"
+#include "graphics/GraphicsParams.h"
+#include "graphics/GraphicsTypes.h"
+
+#include <boost/weak_ptr.hpp>
+#include <boost/signals/signal0.hpp>
+
+
+class MetricsInfo;
+class PainterInfo;
+
+
+class GraphicInset
+{
+public:
+	GraphicInset();
+	GraphicInset(GraphicInset const &);
+
+	/** Set the message that the inset will show when the
+	 *  display of the graphic is deactivated.
+	 *  The default is nothing, meaning that the inset will
+	 *  show a message descibing the state of the image
+	 *  loading process.
+	 */
+	void setNoDisplayMessage(string const & msg);
+	
+	/// Refresh the info about which file to display and how to display it.
+	void update(grfx::Params const & params);
+	/// File name, image size, rotation angle etc.
+	grfx::Params const & params() const;
+
+	/// compute the size of the object returned in dim
+	void metrics(MetricsInfo & mi, Dimension & dim) const;
+	/// draw inset and update (xo, yo)-cache
+	void draw(PainterInfo & pi, int x, int y) const;
+
+	/// Is the stored checksum different to that of the graphics loader?
+	bool hasFileChanged() const;
+	/// An accessor function to the cached store.
+	BufferView * view() const;
+
+	/** Connect and you'll be informed when the loading status of the image
+	 *  changes.
+	 */
+	typedef boost::signal0<void>::slot_type slot_type;
+	boost::signals::connection connect(slot_type const &) const;
+
+private:
+	enum DisplayType {
+		IMAGE,
+		STATUS_MESSAGE,
+		NODISPLAY_MESSAGE
+	};
+
+	/// Is the image ready to draw, or should we display a message instead?
+	DisplayType displayType() const;
+	
+	/// The message to display instead of the graphic itself.
+	string const statusMessage() const;
+
+	/// The stored data.
+	grfx::Loader loader_;
+	grfx::Params params_;
+	string nodisplay_message_;
+
+	/// These are all cached variables.
+	mutable int old_ascent_;
+	mutable unsigned long checksum_;
+	mutable boost::weak_ptr<BufferView> view_;
+	mutable Dimension dim_;
+};
+
+
+#endif // NOT GRAPHICINSET_H
Index: src/insets/graphicinset.C
===================================================================
RCS file: src/insets/graphicinset.C
diff -N src/insets/graphicinset.C
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/insets/graphicinset.C	3 Jun 2003 17:13:30 -0000
@@ -0,0 +1,287 @@
+/**
+ * \file graphicinset.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS
+ */
+
+#include <config.h>
+
+#include "insets/graphicinset.h"
+
+#include "buffer.h"
+#include "BufferView.h"
+#include "gettext.h"
+#include "metricsinfo.h"
+
+#include "frontends/font_metrics.h"
+#include "frontends/LyXView.h"
+#include "frontends/Painter.h"
+
+#include "graphics/GraphicsImage.h"
+
+#include "support/filetools.h"
+
+
+GraphicInset::GraphicInset()
+	: old_ascent_(0), checksum_(0)
+{}
+
+
+GraphicInset::GraphicInset(GraphicInset const & other)
+	: loader_(other.loader_),
+	  params_(other.params_),
+	  nodisplay_message_(other.nodisplay_message_),
+	  old_ascent_(0),
+	  checksum_(0)
+{}
+
+
+void GraphicInset::update(grfx::Params const & params)
+{
+	if (!params.filename.empty()) {
+		lyx::Assert(AbsolutePath(params.filename));
+		loader_.reset(params_.filename, params_);
+	}
+	params_ = params;
+}
+
+
+grfx::Params const & GraphicInset::params() const
+{
+	return params_;
+}
+
+
+bool GraphicInset::hasFileChanged() const
+{
+	unsigned long const new_checksum = loader_.checksum();
+	bool const file_has_changed = checksum_ != new_checksum;
+	if (file_has_changed)
+		checksum_ = new_checksum;
+	return file_has_changed;
+}
+
+
+BufferView * GraphicInset::view() const
+{
+	return view_.lock().get();
+}
+
+
+boost::signals::connection GraphicInset::connect(slot_type const & slot) const
+{
+	return loader_.connect(slot);
+}
+
+
+void GraphicInset::setNoDisplayMessage(string const & str)
+{
+	nodisplay_message_ = str;
+}
+
+
+string const GraphicInset::statusMessage() const
+{
+	switch (loader_.status()) {
+		case grfx::WaitingToLoad:
+			return _("Not shown.");
+		case grfx::Loading:
+			return _("Loading...");
+		case grfx::Converting:
+			return _("Converting to loadable format...");
+		case grfx::Loaded:
+			return _("Loaded into memory. Must now generate pixmap.");
+		case grfx::ScalingEtc:
+			return _("Scaling etc...");
+		case grfx::Ready:
+			return _("Ready to display");
+		case grfx::ErrorNoFile:
+			return _("No file found!");
+		case grfx::ErrorConverting:
+			return _("Error converting to loadable format");
+		case grfx::ErrorLoading:
+			return _("Error loading file into memory");
+		case grfx::ErrorGeneratingPixmap:
+			return _("Error generating the pixmap");
+		case grfx::ErrorUnknown:
+			return _("No image");
+	}
+	return string();
+}
+
+
+GraphicInset::DisplayType GraphicInset::displayType() const
+{
+	if (params_.display == grfx::NoDisplay && !nodisplay_message_.empty())
+		return NODISPLAY_MESSAGE;
+
+	if (!loader_.image() || loader_.status() != grfx::Ready)
+		return STATUS_MESSAGE;
+
+	return loader_.image()->isDrawable() ? IMAGE : STATUS_MESSAGE;
+}
+
+
+void GraphicInset::metrics(MetricsInfo & mi, Dimension & dim) const
+{
+	DisplayType type = displayType();
+
+	old_ascent_ = (type == IMAGE) ? loader_.image()->getHeight() : 50;
+
+	dim.asc = old_ascent_;
+	dim.des = 0;
+
+	switch (type) {
+	case IMAGE:
+		dim.wid = loader_.image()->getWidth() +
+			2 * Inset::TEXT_TO_INSET_OFFSET;
+		break;
+
+	case STATUS_MESSAGE:
+	{
+		int font_width = 0;
+
+		LyXFont msgFont(mi.base.font);
+		msgFont.setFamily(LyXFont::SANS_FAMILY);
+
+		string const justname = OnlyFilename(params_.filename);
+		if (!justname.empty()) {
+			msgFont.setSize(LyXFont::SIZE_FOOTNOTE);
+			font_width = font_metrics::width(justname, msgFont);
+		}
+
+		string const msg = statusMessage();
+		if (!msg.empty()) {
+			msgFont.setSize(LyXFont::SIZE_TINY);
+			font_width = std::max(font_width,
+					      font_metrics::width(msg, msgFont));
+		}
+
+		dim.wid = std::max(50, font_width + 15);
+		break;
+	}
+
+	case NODISPLAY_MESSAGE:
+	{
+		int font_width = 0;
+
+		LyXFont msgFont(mi.base.font);
+		msgFont.setFamily(LyXFont::SANS_FAMILY);
+		msgFont.setSize(LyXFont::SIZE_FOOTNOTE);
+		font_width = font_metrics::width(nodisplay_message_, msgFont);
+
+		dim.wid = std::max(50, font_width + 15);
+		break;
+	}
+	}
+
+	dim_ = dim;
+}
+
+
+void GraphicInset::draw(PainterInfo & pi, int x, int y) const
+{
+	BufferView * bv = pi.base.bv;
+	view_ = bv->owner()->view();
+
+#if 0
+	// MakeAbsPath returns filename_ unchanged if it is absolute
+	// already.
+	string const file_with_path =
+		MakeAbsPath(params_.filename, bv->buffer()->filePath());
+
+	// A 'paste' operation creates a new inset with the correct filepath,
+	// but then the 'old' inset stored in the 'copy' operation is actually
+	// added to the buffer.
+
+	// Thus, pasting a graphic into a new buffer with different
+	// buffer->filePath() will result in the image being displayed in LyX even
+	// though the relative path now points at nothing at all. Subsequent
+	// loading of the file into LyX will therefore fail.
+
+	// We should ensure that the filepath is correct.
+	if (file_with_path != loader_.filename()) {
+		params_.filename = file_with_path;
+		update(params_);
+	}
+#endif
+
+	// we may have changed while someone other was drawing us so better
+	// to not draw anything as we surely call to redraw ourself soon.
+	// This is not a nice thing to do and should be fixed properly somehow.
+	// But I still don't know the best way to go. So let's do this like this
+	// for now (Jug 20020311)
+	if (dim_.asc != old_ascent_)
+		return;
+
+	if (params_.display != grfx::NoDisplay &&
+	    loader_.status() == grfx::WaitingToLoad)
+		loader_.startLoading();
+
+	if (!loader_.monitoring())
+		loader_.startMonitoring();
+
+	// This will draw the graphics. If the graphics has not been loaded yet,
+	// we draw just a rectangle.
+
+	switch (displayType()) {
+	case IMAGE: 
+	{
+		pi.pain.image(x + Inset::TEXT_TO_INSET_OFFSET,
+			      y - dim_.asc,
+			      dim_.wid - 2 * Inset::TEXT_TO_INSET_OFFSET,
+			      dim_.asc + dim_.des,
+			      *loader_.image());
+		break;
+	}
+
+	case STATUS_MESSAGE:
+	{
+		pi.pain.rectangle(x + Inset::TEXT_TO_INSET_OFFSET,
+				  y - dim_.asc,
+				  dim_.wid - 2 * Inset::TEXT_TO_INSET_OFFSET,
+				  dim_.asc + dim_.des);
+
+		// Print the file name.
+		LyXFont msgFont = pi.base.font;
+		msgFont.setFamily(LyXFont::SANS_FAMILY);
+		string const justname = OnlyFilename(params_.filename);
+
+		if (!justname.empty()) {
+			msgFont.setSize(LyXFont::SIZE_FOOTNOTE);
+			pi.pain.text(x + Inset::TEXT_TO_INSET_OFFSET + 6,
+				   y - font_metrics::maxAscent(msgFont) - 4,
+				   justname, msgFont);
+		}
+
+		// Print the message.
+		string const msg = statusMessage();
+		if (!msg.empty()) {
+			msgFont.setSize(LyXFont::SIZE_TINY);
+			pi.pain.text(x + Inset::TEXT_TO_INSET_OFFSET + 6,
+				     y - 4, msg, msgFont);
+		}
+		break;
+	}
+
+	case NODISPLAY_MESSAGE:
+	{
+		pi.pain.rectangle(x + Inset::TEXT_TO_INSET_OFFSET,
+				  y - dim_.asc,
+				  dim_.wid - 2 * Inset::TEXT_TO_INSET_OFFSET,
+				  dim_.asc + dim_.des);
+
+		LyXFont msgFont = pi.base.font;
+		msgFont.setFamily(LyXFont::SANS_FAMILY);
+		msgFont.setSize(LyXFont::SIZE_FOOTNOTE);
+		pi.pain.text(x + Inset::TEXT_TO_INSET_OFFSET + 6,
+			     y - font_metrics::maxAscent(msgFont) - 4,
+			     nodisplay_message_, msgFont);
+		break;
+	}
+	}
+}
Index: src/insets/Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/Makefile.am,v
retrieving revision 1.61
diff -u -p -r1.61 Makefile.am
--- src/insets/Makefile.am	2 Jun 2003 14:19:30 -0000	1.61
+++ src/insets/Makefile.am	3 Jun 2003 17:13:30 -0000
@@ -17,6 +17,8 @@ libinsets_la_SOURCES = \
 	mailinset.h \
 	ExternalTemplate.C \
 	ExternalTemplate.h \
+	graphicinset.C \
+	graphicinset.h \
 	inset.C \
 	inset.h \
 	insetbase.h \
Index: src/insets/insetgraphics.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetgraphics.C,v
retrieving revision 1.181
diff -u -p -r1.181 insetgraphics.C
--- src/insets/insetgraphics.C	3 Jun 2003 15:10:09 -0000	1.181
+++ src/insets/insetgraphics.C	3 Jun 2003 17:13:30 -0000
@@ -54,13 +54,8 @@ TODO
 
 #include "insets/insetgraphics.h"
 #include "insets/insetgraphicsParams.h"
+#include "insets/graphicinset.h"
 
-#include "graphics/GraphicsLoader.h"
-#include "graphics/GraphicsImage.h"
-#include "graphics/GraphicsParams.h"
-
-#include "lyxtext.h"
-#include "dimension.h"
 #include "buffer.h"
 #include "BufferView.h"
 #include "converter.h"
@@ -73,28 +68,17 @@ TODO
 #include "Lsstream.h"
 #include "lyxlex.h"
 #include "lyxrc.h"
-#include "metricsinfo.h"
 
-#include "frontends/lyx_gui.h"
 #include "frontends/Alert.h"
 #include "frontends/Dialogs.h"
-#include "frontends/font_metrics.h"
-#include "frontends/LyXView.h"
-#include "frontends/Painter.h"
 
-#include "support/LAssert.h"
 #include "support/filetools.h"
 #include "support/lyxalgo.h" // lyx::count
 #include "support/lyxlib.h" // float_equal
-#include "support/path.h"
 #include "support/tostr.h"
 #include "support/systemcall.h"
-#include "support/os.h"
-#include "support/lstrings.h"
 
-#include <boost/weak_ptr.hpp>
 #include <boost/bind.hpp>
-#include <boost/signals/trackable.hpp>
 
 #include <algorithm> // For the std::max
 
@@ -148,57 +132,21 @@ string findTargetFormat(string const & s
 } // namespace anon
 
 
-struct InsetGraphics::Cache : boost::signals::trackable
-{
-	///
-	Cache(InsetGraphics &);
-	///
-	void update(string const & file_with_path);
-
-	///
-	int old_ascent;
-	///
-	grfx::Loader loader;
-	///
-	unsigned long checksum;
-	///
-	boost::weak_ptr<BufferView> view;
-
-private:
-	///
-	InsetGraphics & parent_;
-};
-
-
-InsetGraphics::Cache::Cache(InsetGraphics & p)
-	: old_ascent(0), checksum(0), parent_(p)
-{
-	loader.connect(boost::bind(&InsetGraphics::statusChanged, &parent_));
-}
-
-
-void InsetGraphics::Cache::update(string const & file_with_path)
-{
-	lyx::Assert(!file_with_path.empty());
-
-	string const path = OnlyPath(file_with_path);
-	loader.reset(file_with_path, parent_.params().as_grfxParams());
-}
-
-
 InsetGraphics::InsetGraphics()
 	: graphic_label(uniqueID()),
-	  cache_(new Cache(*this))
-{}
+	  graphic_(new GraphicInset)
+{
+	graphic_->connect(boost::bind(&InsetGraphics::statusChanged, this));
+}
 
 
-#warning I have zero idea about the trackable()
 InsetGraphics::InsetGraphics(InsetGraphics const & ig)
 	: Inset(ig),
-	  boost::signals::trackable(ig),
+	  boost::signals::trackable(),
 	  graphic_label(uniqueID()),
-	  cache_(new Cache(*this))
+	  graphic_(new GraphicInset(*ig.graphic_))
 {
+	graphic_->connect(boost::bind(&InsetGraphics::statusChanged, this));
 	setParams(ig.params());
 }
 
@@ -211,11 +159,18 @@ Inset * InsetGraphics::clone() const
 
 InsetGraphics::~InsetGraphics()
 {
-	InsetGraphicsMailer mailer(*this);
-	mailer.hideDialog();
+	InsetGraphicsMailer(*this).hideDialog();
 }
 
 
+void InsetGraphics::statusChanged()
+{
+	BufferView * bv = graphic_->view();
+	if (bv)
+		bv->updateInset(this);
+}
+	
+
 dispatch_result InsetGraphics::localDispatch(FuncRequest const & cmd)
 {
 	switch (cmd.action) {
@@ -244,141 +199,15 @@ dispatch_result InsetGraphics::localDisp
 }
 
 
-string const InsetGraphics::statusMessage() const
-{
-	using namespace grfx;
-
-	switch (cache_->loader.status()) {
-		case WaitingToLoad:
-			return _("Not shown.");
-		case Loading:
-			return _("Loading...");
-		case Converting:
-			return _("Converting to loadable format...");
-		case Loaded:
-			return _("Loaded into memory. Must now generate pixmap.");
-		case ScalingEtc:
-			return _("Scaling etc...");
-		case Ready:
-			return _("Ready to display");
-		case ErrorNoFile:
-			return _("No file found!");
-		case ErrorConverting:
-			return _("Error converting to loadable format");
-		case ErrorLoading:
-			return _("Error loading file into memory");
-		case ErrorGeneratingPixmap:
-			return _("Error generating the pixmap");
-		case ErrorUnknown:
-			return _("No image");
-	}
-	return string();
-}
-
-
-bool InsetGraphics::imageIsDrawable() const
-{
-	if (!cache_->loader.image() || cache_->loader.status() != grfx::Ready)
-		return false;
-
-	return cache_->loader.image()->isDrawable();
-}
-
-
 void InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const
 {
-	cache_->old_ascent = 50;
-	if (imageIsDrawable())
-		cache_->old_ascent = cache_->loader.image()->getHeight();
-	dim.asc = cache_->old_ascent;
-	dim.des = 0;
-	if (imageIsDrawable())
-		dim.wid = cache_->loader.image()->getWidth() + 2 * TEXT_TO_INSET_OFFSET;
-	else {
-		int font_width = 0;
-
-		LyXFont msgFont(mi.base.font);
-		msgFont.setFamily(LyXFont::SANS_FAMILY);
-
-		string const justname = OnlyFilename(params().filename);
-		if (!justname.empty()) {
-			msgFont.setSize(LyXFont::SIZE_FOOTNOTE);
-			font_width = font_metrics::width(justname, msgFont);
-		}
-
-		string const msg = statusMessage();
-		if (!msg.empty()) {
-			msgFont.setSize(LyXFont::SIZE_TINY);
-			font_width = std::max(font_width, font_metrics::width(msg, msgFont));
-		}
-
-		dim.wid = std::max(50, font_width + 15);
-	}
-	dim_ = dim;
-}
-
-
-BufferView * InsetGraphics::view() const
-{
-	return cache_->view.lock().get();
+	graphic_->metrics(mi, dim);
 }
 
 
 void InsetGraphics::draw(PainterInfo & pi, int x, int y) const
 {
-	BufferView * bv = pi.base.bv;
-	cache_->view = bv->owner()->view();
-	int oasc = cache_->old_ascent;
-
-	// we may have changed while someone other was drawing us so better
-	// to not draw anything as we surely call to redraw ourself soon.
-	// This is not a nice thing to do and should be fixed properly somehow.
-	// But I still don't know the best way to go. So let's do this like this
-	// for now (Jug 20020311)
-	if (dim_.asc != oasc)
-		return;
-
-	// Make sure now that x is updated upon exit from this routine
-	grfx::Params const & gparams = params().as_grfxParams();
-
-	if (gparams.display != grfx::NoDisplay &&
-			cache_->loader.status() == grfx::WaitingToLoad)
-		cache_->loader.startLoading();
-
-	if (!cache_->loader.monitoring())
-		cache_->loader.startMonitoring();
-
-	// This will draw the graphics. If the graphics has not been loaded yet,
-	// we draw just a rectangle.
-
-	if (imageIsDrawable()) {
-		pi.pain.image(x + TEXT_TO_INSET_OFFSET, y - dim_.asc,
-			    dim_.wid - 2 * TEXT_TO_INSET_OFFSET, dim_.asc + dim_.des,
-			    *cache_->loader.image());
-
-	} else {
-
-		pi.pain.rectangle(x + TEXT_TO_INSET_OFFSET, y - dim_.asc,
-				dim_.wid - 2 * TEXT_TO_INSET_OFFSET, dim_.asc + dim_.des);
-
-		// Print the file name.
-		LyXFont msgFont = pi.base.font;
-		msgFont.setFamily(LyXFont::SANS_FAMILY);
-		string const justname = OnlyFilename (params().filename);
-		if (!justname.empty()) {
-			msgFont.setSize(LyXFont::SIZE_FOOTNOTE);
-			pi.pain.text(x + TEXT_TO_INSET_OFFSET + 6,
-				   y - font_metrics::maxAscent(msgFont) - 4,
-				   justname, msgFont);
-		}
-
-		// Print the message.
-		string const msg = statusMessage();
-		if (!msg.empty()) {
-			msgFont.setSize(LyXFont::SIZE_TINY);
-			pi.pain.text(x + TEXT_TO_INSET_OFFSET + 6, y - 4, msg, msgFont);
-		}
-	}
+	graphic_->draw(pi, x, y);
 }
 
 
@@ -404,7 +233,7 @@ void InsetGraphics::read(Buffer const * 
 	else
 		lyxerr[Debug::GRAPHICS] << "Not a Graphics inset!\n";
 
-	cache_->update(params().filename);
+	graphic_->update(params().as_grfxParams());
 }
 
 
@@ -517,12 +346,6 @@ string const InsetGraphics::prepareFile(
 		return orig_file;
 	}
 
-	// Ascertain whether the file has changed.
-	unsigned long const new_checksum = cache_->loader.checksum();
-	bool const file_has_changed = cache_->checksum != new_checksum;
-	if (file_has_changed)
-		cache_->checksum = new_checksum;
-
 	// temp_file will contain the file for LaTeX to act on if, for example,
 	// we move it to a temp dir or uncompress it.
 	string temp_file = orig_file;
@@ -534,7 +357,7 @@ string const InsetGraphics::prepareFile(
 		temp_file = MakeAbsPath(OnlyFilename(temp_file), buf->tmppath);
 		lyxerr[Debug::GRAPHICS]
 			<< "\ttemp_file: " << temp_file << endl;
-		if (file_has_changed || !IsFileReadable(temp_file)) {
+  		if (graphic_->hasFileChanged() || !IsFileReadable(temp_file)) {
 			bool const success = lyx::copy(orig_file, temp_file);
 			lyxerr[Debug::GRAPHICS]
 				<< "\tCopying zipped file from "
@@ -578,32 +401,14 @@ string const InsetGraphics::prepareFile(
 		<< "\tthe orig file is: " << orig_file << endl;
 
 	if (lyxrc.use_tempdir) {
-		string const ext_tmp = GetExtension(orig_file);
-		// without ext and /
-		temp_file = subst(
-			ChangeExtension(orig_file, string()), "/", "_");
-		// without dots and again with ext
-		temp_file = ChangeExtension(
-			subst(temp_file, ".", "_"), ext_tmp);
-		// now we have any_dir_file.ext
-		temp_file = MakeAbsPath(temp_file, buf->tmppath);
-		lyxerr[Debug::GRAPHICS]
-			<< "\tchanged to: " << temp_file << endl;
-
-		// if the file doen't exists, copy it into the tempdir
-		if (file_has_changed || !IsFileReadable(temp_file)) {
-			bool const success = lyx::copy(orig_file, temp_file);
-			lyxerr[Debug::GRAPHICS]
-				<< "\tcopying from " << orig_file << " to "
-				<< temp_file
-				<< (success ? " succeeded\n" : " failed\n");
-			if (!success) {
-				string str = bformat(_("Could not copy the file\n%1$s\n"
-					"into the temporary directory."), orig_file);
-				Alert::error(_("Graphics display failed"), str);
-				return orig_file;
-			}
-		}
+ 		temp_file = copyFileToDir(buf->tmppath, orig_file);
+		if (temp_file.empty()) {
+			string str = bformat(_("Could not copy the file\n%1$s\n"
+					       "into the temporary directory."),
+					     orig_file);
+			Alert::error(_("Graphics display failed"), str);
+			return orig_file;
+  		}
 
 		if (from == to) {
 			// No conversion is needed. LaTeX can handle the
@@ -769,13 +574,6 @@ void InsetGraphics::validate(LaTeXFeatur
 }
 
 
-void InsetGraphics::statusChanged()
-{
-	if (!cache_->view.expired())
-		cache_->view.lock()->updateInset(this);
-}
-
-
 bool InsetGraphics::setParams(InsetGraphicsParams const & p)
 {
 	// If nothing is changed, just return and say so.
@@ -785,8 +583,8 @@ bool InsetGraphics::setParams(InsetGraph
 	// Copy the new parameters.
 	params_ = p;
 
-	// Update the inset with the new parameters.
-	cache_->update(params().filename);
+  	// Update the display using the new parameters.
+  	graphic_->update(params().as_grfxParams());
 
 	// We have changed data, report it.
 	return true;
Index: src/insets/insetgraphics.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetgraphics.h,v
retrieving revision 1.71
diff -u -p -r1.71 insetgraphics.h
--- src/insets/insetgraphics.h	3 Jun 2003 15:10:10 -0000	1.71
+++ src/insets/insetgraphics.h	3 Jun 2003 17:13:30 -0000
@@ -15,12 +15,13 @@
 
 #include "inset.h"
 #include "insetgraphicsParams.h"
-#include "dimension.h"
 
-#include <boost/signals/trackable.hpp>
 #include <boost/scoped_ptr.hpp>
+#include <boost/signals/trackable.hpp>
+
 
 class Dialogs;
+class GraphicInset;
 class LaTeXFeatures;
 
 ///
@@ -78,17 +79,11 @@ public:
 	InsetGraphicsParams const & params() const;
 
 private:
-	/// Returns the cached BufferView.
-	BufferView * view() const;
-
 	///
 	friend class InsetGraphicsMailer;
 
-	/// Is the image ready to draw, or should we display a message instead?
-	bool imageIsDrawable() const;
-
-	/** This method is connected to cache_->statusChanged, so we are
-	    informed when the image has been loaded.
+	/** This method is connected to the graphics loader, so we are
+	 *  informed when the image has been loaded.
 	 */
 	void statusChanged();
 
@@ -108,13 +103,8 @@ private:
 	/// holds the entity name that defines the graphics location (SGML).
 	string const graphic_label;
 
-	/// The cached variables
-	class Cache;
-	friend class Cache;
-	/// The pointer never changes although *cache_'s contents may.
-	boost::scoped_ptr<Cache> const cache_;
-	/// dimension cache
-	mutable Dimension dim_;
+	/// The thing that actually draws the image on LyX's screen.
+	boost::scoped_ptr<GraphicInset> const graphic_;
 };
 
 

Reply via email to