]> git.lyx.org Git - lyx.git/blob - src/graphics/PreviewedInset.C
dont use pragma impementation and interface anymore
[lyx.git] / src / graphics / PreviewedInset.C
1 // -*- C++ -*-
2 /**
3  *  \file PreviewedInset.C
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #include <config.h>
13
14 #include "PreviewedInset.h"
15 #include "GraphicsImage.h"
16 #include "PreviewLoader.h"
17 #include "PreviewImage.h"
18 #include "Previews.h"
19
20 #include "buffer.h"
21 #include "BufferView.h"
22
23 #include "frontends/LyXView.h"
24
25 #include "support/lstrings.h"
26
27 #include <boost/bind.hpp>
28
29 #include "debug.h"    // temporary
30
31 namespace grfx {
32
33 bool PreviewedInset::activated()
34 {
35         return Previews::activated();
36 }
37
38
39 void PreviewedInset::generatePreview()
40 {
41         if (!Previews::activated() || !previewWanted() ||
42             !view() || !view()->buffer())
43                 return;
44
45         grfx::Previews & previews = grfx::Previews::get();
46         grfx::PreviewLoader & loader = previews.loader(view()->buffer());
47         addPreview(loader);
48         if (!snippet_.empty())
49                 loader.startLoading();
50 }
51
52
53 void PreviewedInset::addPreview(grfx::PreviewLoader & ploader)
54 {
55         if (!Previews::activated() || !previewWanted())
56                 return;
57
58         setView(ploader.buffer().getUser());
59
60         snippet_ = trim(latexString());
61         if (snippet_.empty())
62                 return;
63
64         pimage_ = ploader.preview(snippet_);
65         if (pimage_)
66                 return;
67
68         // If this is the first time of calling, connect to the
69         // grfx::PreviewLoader signal that'll inform us when the preview image
70         // is ready for loading.
71         if (!connection_.connected()) {
72                 connection_ = ploader.connect(
73                         boost::bind(&PreviewedInset::imageReady, this, _1));
74         }
75
76         ploader.add(snippet_);
77 }
78
79
80 void PreviewedInset::removePreview()
81 {
82         if (!view() || !view()->buffer() || snippet_.empty())
83                 return;
84
85         grfx::Previews & previews = grfx::Previews::get();
86         grfx::PreviewLoader & loader = previews.loader(view()->buffer());
87         loader.remove(snippet_);
88         snippet_.erase();
89         pimage_ = 0;
90 }
91
92
93 bool PreviewedInset::previewReady() const
94 {
95         if (!Previews::activated() || !previewWanted() ||
96             !view() || !view()->buffer())
97                 return false;
98
99         if (!pimage_ || snippet_ != pimage_->snippet()) {
100                 grfx::PreviewLoader & ploader =
101                         grfx::Previews::get().loader(view()->buffer());
102                 pimage_ = ploader.preview(snippet_);
103         }
104
105         if (!pimage_)
106                 return false;
107
108         return pimage_->image(inset_, *view());
109 }
110
111
112 void PreviewedInset::setView(BufferView * bv)
113 {
114         if (!bv)
115                 return;
116
117         view_ = bv->owner()->view();
118 }
119
120 void PreviewedInset::imageReady(grfx::PreviewImage const & pimage) const
121 {
122         // Check snippet against the Inset's current contents
123         if (snippet_ != pimage.snippet())
124                 return;
125
126         pimage_ = &pimage;
127
128         if (view())
129                 view()->updateInset(&inset_, false);
130 }
131
132 } // namespace grfx