/** * \file Previews.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Angus Leeming * * Full author contact details are available in file CREDITS. */ #include #include "Previews.h" #include "PreviewLoader.h" #include "buffer.h" #include "lyxrc.h" #include "insets/inset.h" #include "support/LAssert.h" #include namespace lyx { using namespace lyx::support; namespace graphics { bool Previews::activated() { return lyxrc.preview; } Previews & Previews::get() { static Previews singleton; return singleton; } struct Previews::Impl { /// typedef boost::shared_ptr PreviewLoaderPtr; /// typedef std::map CacheType; /// CacheType cache; }; Previews::Previews() : pimpl_(new Impl()) {} Previews::~Previews() {} PreviewLoader & Previews::loader(Buffer const & buffer) const { Impl::CacheType::iterator it = pimpl_->cache.find(&buffer); if (it == pimpl_->cache.end()) { Impl::PreviewLoaderPtr ptr(new PreviewLoader(buffer)); pimpl_->cache[&buffer] = ptr; return *ptr.get(); } return *it->second.get(); } void Previews::removeLoader(Buffer const & buffer) const { Impl::CacheType::iterator it = pimpl_->cache.find(&buffer); if (it != pimpl_->cache.end()) pimpl_->cache.erase(it); } void Previews::generateBufferPreviews(Buffer const & buffer) const { PreviewLoader & ploader = loader(buffer); Buffer::inset_iterator it = buffer.inset_const_iterator_begin(); Buffer::inset_iterator end = buffer.inset_const_iterator_end(); for (; it != end; ++it) it->addPreview(ploader); ploader.startLoading(); } } // namespace graphics } // namespace lyx