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