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