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