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