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