]> git.lyx.org Git - lyx.git/blob - src/graphics/PreviewedInset.C
* Mathed now caches the BufferView as a weak_ptr.
[lyx.git] / src / graphics / PreviewedInset.C
1 // -*- C++ -*-
2 /**
3  *  \file PreviewedInset.C
4  *  Copyright 2002 the LyX Team
5  *  Read the file COPYING
6  *
7  * \author Angus Leeming <leeming@lyx.org>
8  */
9
10 #ifdef __GNUG__
11 #pragma implementation
12 #endif
13
14 #include <config.h>
15
16 #include "PreviewedInset.h"
17
18 #include "BufferView.h"
19
20 #include "GraphicsImage.h"
21 #include "PreviewLoader.h"
22 #include "PreviewImage.h"
23 #include "Previews.h"
24
25 #include <boost/bind.hpp>
26
27
28 namespace grfx {
29
30 bool PreviewedInset::activated()
31 {
32         return Previews::activated();
33 }
34
35
36 void PreviewedInset::generatePreview()
37 {
38         if (!Previews::activated() || !previewWanted() ||
39             !view() || !view()->buffer())
40                 return;
41
42         grfx::Previews & previews = grfx::Previews::get();
43         grfx::PreviewLoader & loader = previews.loader(view()->buffer());
44         addPreview(loader);
45         loader.startLoading();
46 }
47
48
49 void PreviewedInset::addPreview(grfx::PreviewLoader & ploader)
50 {
51         if (!Previews::activated() || !previewWanted())
52                 return;
53
54         snippet_ = latexString();
55
56         pimage_ = ploader.preview(snippet_);
57         if (pimage_)
58                 return;
59
60         // If this is the first time of calling, connect to the
61         // grfx::PreviewLoader signal that'll inform us when the preview image
62         // is ready for loading.
63         if (!connection_.connected()) {
64                 connection_ = ploader.connect(
65                         boost::bind(&PreviewedInset::imageReady, this, _1));
66         }
67
68         ploader.add(snippet_);
69 }
70
71
72 bool PreviewedInset::previewReady() const
73 {
74         if (!grfx::Previews::activated() || !previewWanted() ||
75             !view() || !view()->buffer())
76                 return false;
77
78         if (!pimage_ || snippet_ != pimage_->snippet()) {
79                 grfx::PreviewLoader & ploader =
80                         grfx::Previews::get().loader(view()->buffer());
81                 pimage_ = ploader.preview(snippet_);
82         }
83
84         if (!pimage_)
85                 return false;
86
87         return pimage_->image(inset_, *view());
88 }
89
90
91 void PreviewedInset::imageReady(grfx::PreviewImage const & pimage) const
92 {
93         // Check snippet against the Inset's current contents
94         if (snippet_ != pimage.snippet())
95                 return;
96
97         pimage_ = &pimage;
98         if (view())
99                 view()->updateInset(&inset_, false);
100 }
101
102 } // namespace grfx