]> git.lyx.org Git - lyx.git/blob - src/graphics/Previews.cpp
de.po: fix doubled accelerator keys
[lyx.git] / src / graphics / Previews.cpp
1 /**
2  * \file Previews.cpp
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
20 #include "insets/Inset.h"
21
22 using namespace std;
23
24 namespace lyx {
25
26 namespace graphics {
27
28 LyXRC_PreviewStatus Previews::status()
29 {
30         return lyxrc.preview;
31 }
32
33
34 namespace {
35 typedef boost::shared_ptr<PreviewLoader> PreviewLoaderPtr;
36 ///
37 typedef map<Buffer const *, PreviewLoaderPtr> CacheType;
38 ///
39 static CacheType preview_cache_;
40 }
41
42
43 PreviewLoader & Previews::loader(Buffer const & buffer) const
44 {
45         CacheType::iterator it = preview_cache_.find(&buffer);
46
47         if (it == preview_cache_.end()) {
48                 PreviewLoaderPtr ptr(new PreviewLoader(buffer));
49                 preview_cache_[&buffer] = ptr;
50                 return *ptr.get();
51         }
52
53         return *it->second.get();
54 }
55
56
57 void Previews::removeLoader(Buffer const & buffer) const
58 {
59         CacheType::iterator it = preview_cache_.find(&buffer);
60
61         if (it != preview_cache_.end())
62                 preview_cache_.erase(it);
63 }
64
65
66 void Previews::generateBufferPreviews(Buffer const & buffer) const
67 {
68         PreviewLoader & ploader = loader(buffer);
69
70         Inset & inset = buffer.inset();
71         InsetIterator it = inset_iterator_begin(inset);
72         InsetIterator const end = inset_iterator_end(inset);
73
74         for (; it != end; ++it)
75                 it->addPreview(ploader);
76
77         ploader.startLoading();
78 }
79
80 } // namespace graphics
81 } // namespace lyx