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