]> git.lyx.org Git - lyx.git/blob - src/graphics/PreviewedInset.C
Fix InsetInclude properly. Data is now stored in an InsetCommandParams
[lyx.git] / src / graphics / PreviewedInset.C
1 /**
2  * \file PreviewedInset.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Angus Leeming
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "PreviewedInset.h"
14 #include "PreviewImage.h"
15 #include "PreviewLoader.h"
16 #include "Previews.h"
17
18 #include "BufferView.h"
19
20 #include "insets/inset.h"
21
22 #include "support/lstrings.h"
23
24 #include <boost/bind.hpp>
25
26 namespace support = lyx::support;
27
28
29 namespace lyx {
30 namespace graphics {
31
32 bool PreviewedInset::activated()
33 {
34         return Previews::activated();
35 }
36
37
38 PreviewedInset::PreviewedInset(InsetOld & inset)
39         : inset_(inset), pimage_(0)
40 {}
41
42
43 BufferView * PreviewedInset::view() const
44 {
45         return inset_.view();
46 }
47
48
49 void PreviewedInset::generatePreview(Buffer const & buffer)
50 {
51         if (!Previews::activated() || !previewWanted(buffer))
52                 return;
53
54         Previews & previews = Previews::get();
55         PreviewLoader & loader = previews.loader(buffer);
56         addPreview(loader);
57         if (!snippet_.empty())
58                 loader.startLoading();
59 }
60
61
62 void PreviewedInset::addPreview(PreviewLoader & ploader)
63 {
64         if (!Previews::activated() || !previewWanted(ploader.buffer()))
65                 return;
66
67         snippet_ = support::trim(latexString(ploader.buffer()));
68         if (snippet_.empty())
69                 return;
70
71         pimage_ = ploader.preview(snippet_);
72         if (pimage_)
73                 return;
74
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));
81         }
82
83         ploader.add(snippet_);
84 }
85
86
87 void PreviewedInset::removePreview()
88 {
89         if (!view() || !view()->buffer() || snippet_.empty())
90                 return;
91
92         Previews & previews = Previews::get();
93         PreviewLoader & loader = previews.loader(*view()->buffer());
94         loader.remove(snippet_);
95         snippet_.erase();
96         pimage_ = 0;
97 }
98
99
100 bool PreviewedInset::previewReady() const
101 {
102         if (!Previews::activated() || !view() || !view()->buffer())
103                 return false;
104
105         if (!previewWanted(*view()->buffer()))
106                 return false;
107
108         if (!pimage_ || snippet_ != pimage_->snippet()) {
109                 PreviewLoader & ploader =
110                         Previews::get().loader(*view()->buffer());
111                 pimage_ = ploader.preview(snippet_);
112         }
113
114         if (!pimage_)
115                 return false;
116
117         return pimage_->image();
118 }
119
120
121 void PreviewedInset::imageReady(PreviewImage const & pimage) const
122 {
123         // Check snippet against the Inset's current contents
124         if (snippet_ != pimage.snippet())
125                 return;
126
127         pimage_ = &pimage;
128
129         if (view())
130                 view()->updateInset(&inset());
131 }
132
133 } // namespace graphics
134 } // namespace lyx