]> git.lyx.org Git - lyx.git/blob - src/graphics/Previews.C
more cursor dispatch
[lyx.git] / src / graphics / Previews.C
1 /**
2  * \file Previews.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 "Previews.h"
14 #include "PreviewLoader.h"
15
16 #include "buffer.h"
17 #include "lyxrc.h"
18 #include "paragraph.h"
19
20 #include "insets/inset.h"
21
22
23 namespace lyx {
24 namespace graphics {
25
26 bool Previews::activated()
27 {
28         return lyxrc.preview;
29 }
30
31
32 Previews & Previews::get()
33 {
34         static Previews singleton;
35         return singleton;
36 }
37
38
39 struct Previews::Impl {
40         ///
41         typedef boost::shared_ptr<PreviewLoader> PreviewLoaderPtr;
42         ///
43         typedef std::map<Buffer const *, PreviewLoaderPtr> CacheType;
44         ///
45         CacheType cache;
46 };
47
48
49 Previews::Previews()
50         : pimpl_(new Impl)
51 {}
52
53
54 Previews::~Previews()
55 {}
56
57
58 PreviewLoader & Previews::loader(Buffer const & buffer) const
59 {
60         Impl::CacheType::iterator it = pimpl_->cache.find(&buffer);
61
62         if (it == pimpl_->cache.end()) {
63                 Impl::PreviewLoaderPtr ptr(new PreviewLoader(buffer));
64                 pimpl_->cache[&buffer] = ptr;
65                 return *ptr.get();
66         }
67
68         return *it->second.get();
69 }
70
71
72 void Previews::removeLoader(Buffer const & buffer) const
73 {
74         Impl::CacheType::iterator it = pimpl_->cache.find(&buffer);
75
76         if (it != pimpl_->cache.end())
77                 pimpl_->cache.erase(it);
78 }
79
80
81 void Previews::generateBufferPreviews(Buffer const & buffer) const
82 {
83         PreviewLoader & ploader = loader(buffer);
84
85         Buffer::inset_iterator it  = buffer.inset_const_iterator_begin();
86         Buffer::inset_iterator end = buffer.inset_const_iterator_end();
87
88         for (; it != end; ++it)
89                 it->addPreview(ploader);
90
91         ploader.startLoading();
92 }
93
94 } // namespace graphics
95 } // namespace lyx