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