2 * \file PreviewedInset.C
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Angus Leeming
8 * Full author contact details are available in file CREDITS.
13 #include "PreviewedInset.h"
14 #include "PreviewImage.h"
15 #include "PreviewLoader.h"
18 #include "BufferView.h"
20 #include "insets/inset.h"
22 #include "support/lstrings.h"
24 #include <boost/bind.hpp>
26 namespace support = lyx::support;
32 bool PreviewedInset::activated()
34 return Previews::activated();
38 PreviewedInset::PreviewedInset(InsetOld & inset)
39 : inset_(inset), pimage_(0)
43 BufferView * PreviewedInset::view() const
49 void PreviewedInset::generatePreview(Buffer const & buffer)
51 if (!Previews::activated() || !previewWanted(buffer))
54 Previews & previews = Previews::get();
55 PreviewLoader & loader = previews.loader(buffer);
57 if (!snippet_.empty())
58 loader.startLoading();
62 void PreviewedInset::addPreview(PreviewLoader & ploader)
64 if (!Previews::activated() || !previewWanted(ploader.buffer()))
67 snippet_ = support::trim(latexString(ploader.buffer()));
71 pimage_ = ploader.preview(snippet_);
75 // If this is the first time of calling, connect to the
76 // PreviewLoader signal that'll inform us when the preview image
77 // is ready for loading.
78 if (!connection_.connected()) {
79 connection_ = ploader.connect(
80 boost::bind(&PreviewedInset::imageReady, this, _1));
83 ploader.add(snippet_);
87 void PreviewedInset::removePreview()
89 if (!view() || !view()->buffer() || snippet_.empty())
92 Previews & previews = Previews::get();
93 PreviewLoader & loader = previews.loader(*view()->buffer());
94 loader.remove(snippet_);
100 bool PreviewedInset::previewReady() const
102 if (!Previews::activated() || !view() || !view()->buffer())
105 if (!previewWanted(*view()->buffer()))
108 if (!pimage_ || snippet_ != pimage_->snippet()) {
109 PreviewLoader & ploader =
110 Previews::get().loader(*view()->buffer());
111 pimage_ = ploader.preview(snippet_);
117 return pimage_->image();
121 void PreviewedInset::imageReady(PreviewImage const & pimage) const
123 // Check snippet against the Inset's current contents
124 if (snippet_ != pimage.snippet())
130 view()->updateInset(&inset());
133 } // namespace graphics