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