3 * \file PreviewedInset.C
4 * Copyright 2002 the LyX Team
5 * Read the file COPYING
7 * \author Angus Leeming <leeming@lyx.org>
11 #pragma implementation
16 #include "PreviewedInset.h"
17 #include "GraphicsImage.h"
18 #include "PreviewLoader.h"
19 #include "PreviewImage.h"
23 #include "BufferView.h"
25 #include "frontends/LyXView.h"
27 #include "support/lstrings.h"
29 #include <boost/bind.hpp>
31 #include "debug.h" // temporary
35 bool PreviewedInset::activated()
37 return Previews::activated();
41 void PreviewedInset::generatePreview()
43 if (!Previews::activated() || !previewWanted() ||
44 !view() || !view()->buffer())
47 grfx::Previews & previews = grfx::Previews::get();
48 grfx::PreviewLoader & loader = previews.loader(view()->buffer());
50 if (!snippet_.empty())
51 loader.startLoading();
55 void PreviewedInset::addPreview(grfx::PreviewLoader & ploader)
57 if (!Previews::activated() || !previewWanted())
60 setView(ploader.buffer().getUser());
62 snippet_ = trim(latexString());
66 pimage_ = ploader.preview(snippet_);
70 // If this is the first time of calling, connect to the
71 // grfx::PreviewLoader signal that'll inform us when the preview image
72 // is ready for loading.
73 if (!connection_.connected()) {
74 connection_ = ploader.connect(
75 boost::bind(&PreviewedInset::imageReady, this, _1));
78 ploader.add(snippet_);
82 void PreviewedInset::removePreview()
84 if (!view() || !view()->buffer() || snippet_.empty())
87 grfx::Previews & previews = grfx::Previews::get();
88 grfx::PreviewLoader & loader = previews.loader(view()->buffer());
89 loader.remove(snippet_);
95 bool PreviewedInset::previewReady() const
97 if (!Previews::activated() || !previewWanted() ||
98 !view() || !view()->buffer())
101 if (!pimage_ || snippet_ != pimage_->snippet()) {
102 grfx::PreviewLoader & ploader =
103 grfx::Previews::get().loader(view()->buffer());
104 pimage_ = ploader.preview(snippet_);
110 return pimage_->image(inset_, *view());
114 void PreviewedInset::setView(BufferView * bv)
119 view_ = bv->owner()->view();
122 void PreviewedInset::imageReady(grfx::PreviewImage const & pimage) const
124 // Check snippet against the Inset's current contents
125 if (snippet_ != pimage.snippet())
131 view()->updateInset(&inset_, false);