3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Angus Leeming
8 * Full author contact details are available in file CREDITS.
14 #include "PreviewLoader.h"
17 #include "InsetIterator.h"
20 #include "insets/Inset.h"
27 LyXRC_PreviewStatus Previews::status()
33 Previews & Previews::get()
35 static Previews singleton;
40 class Previews::Impl {
43 typedef boost::shared_ptr<PreviewLoader> PreviewLoaderPtr;
45 typedef std::map<Buffer const *, PreviewLoaderPtr> CacheType;
62 PreviewLoader & Previews::loader(Buffer const & buffer) const
64 Impl::CacheType::iterator it = pimpl_->cache.find(&buffer);
66 if (it == pimpl_->cache.end()) {
67 Impl::PreviewLoaderPtr ptr(new PreviewLoader(buffer));
68 pimpl_->cache[&buffer] = ptr;
72 return *it->second.get();
76 void Previews::removeLoader(Buffer const & buffer) const
78 Impl::CacheType::iterator it = pimpl_->cache.find(&buffer);
80 if (it != pimpl_->cache.end())
81 pimpl_->cache.erase(it);
85 void Previews::generateBufferPreviews(Buffer const & buffer) const
87 PreviewLoader & ploader = loader(buffer);
89 Inset & inset = buffer.inset();
90 InsetIterator it = inset_iterator_begin(inset);
91 InsetIterator const end = inset_iterator_end(inset);
93 for (; it != end; ++it)
94 it->addPreview(ploader);
96 ploader.startLoading();
99 } // namespace graphics