]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/PreviewedInset.C
If the graphics loader has a copy c-tor it should have copy assignment that does...
[lyx.git] / src / graphics / PreviewedInset.C
index a5ccfa2ca24f9fdf17b9a21f0bab05540777ea17..468d1f65ce0249efbde5901931c2873a2f8cbea8 100644 (file)
@@ -1,29 +1,32 @@
 // -*- C++ -*-
 /**
  *  \file PreviewedInset.C
- *  Copyright 2002 the LyX Team
- *  Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author Angus Leeming <leeming@lyx.org>
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS
  */
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include <config.h>
 
 #include "PreviewedInset.h"
-
-#include "BufferView.h"
-
 #include "GraphicsImage.h"
 #include "PreviewLoader.h"
 #include "PreviewImage.h"
 #include "Previews.h"
 
+#include "buffer.h"
+#include "BufferView.h"
+
+#include "frontends/LyXView.h"
+
+#include "support/lstrings.h"
+
 #include <boost/bind.hpp>
 
+#include "debug.h"    // temporary
 
 namespace grfx {
 
@@ -33,7 +36,13 @@ bool PreviewedInset::activated()
 }
 
 
-void PreviewedInset::generatePreview() const
+BufferView * PreviewedInset::view() const
+{
+       return inset_.view();
+}
+
+
+void PreviewedInset::generatePreview()
 {
        if (!Previews::activated() || !previewWanted() ||
            !view() || !view()->buffer())
@@ -42,19 +51,21 @@ void PreviewedInset::generatePreview() const
        grfx::Previews & previews = grfx::Previews::get();
        grfx::PreviewLoader & loader = previews.loader(view()->buffer());
        addPreview(loader);
-       loader.startLoading();
+       if (!snippet_.empty())
+               loader.startLoading();
 }
 
 
-void PreviewedInset::addPreview(grfx::PreviewLoader & ploader) const
+void PreviewedInset::addPreview(grfx::PreviewLoader & ploader)
 {
        if (!Previews::activated() || !previewWanted())
                return;
 
-       // Generate the LaTeX snippet.
-       string const snippet = latexString();
+       snippet_ = trim(latexString());
+       if (snippet_.empty())
+               return;
 
-       pimage_ = ploader.preview(snippet);
+       pimage_ = ploader.preview(snippet_);
        if (pimage_)
                return;
 
@@ -66,41 +77,52 @@ void PreviewedInset::addPreview(grfx::PreviewLoader & ploader) const
                        boost::bind(&PreviewedInset::imageReady, this, _1));
        }
 
-       ploader.add(snippet);
+       ploader.add(snippet_);
+}
+
+
+void PreviewedInset::removePreview()
+{
+       if (!view() || !view()->buffer() || snippet_.empty())
+               return;
+
+       grfx::Previews & previews = grfx::Previews::get();
+       grfx::PreviewLoader & loader = previews.loader(view()->buffer());
+       loader.remove(snippet_);
+       snippet_.erase();
+       pimage_ = 0;
 }
 
 
 bool PreviewedInset::previewReady() const
 {
-       if (!grfx::Previews::activated() || !previewWanted() ||
+       if (!Previews::activated() || !previewWanted() ||
            !view() || !view()->buffer())
                return false;
 
-       // If the cached grfx::PreviewImage is invalid, update it.
-       string const snippet = latexString();
-
-       if (!pimage_ || snippet != pimage_->snippet()) {
+       if (!pimage_ || snippet_ != pimage_->snippet()) {
                grfx::PreviewLoader & ploader =
                        grfx::Previews::get().loader(view()->buffer());
-               pimage_ = ploader.preview(snippet);
+               pimage_ = ploader.preview(snippet_);
        }
 
        if (!pimage_)
                return false;
 
-       return pimage_->image(inset_, *view());
+       return pimage_->image();
 }
 
 
 void PreviewedInset::imageReady(grfx::PreviewImage const & pimage) const
 {
        // Check snippet against the Inset's current contents
-       if (latexString() != pimage.snippet())
+       if (snippet_ != pimage.snippet())
                return;
 
        pimage_ = &pimage;
+
        if (view())
-               view()->updateInset(&inset_, false);
+               view()->updateInset(&inset_);
 }
 
 } // namespace grfx