X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgraphics%2FGraphicsCache.h;h=0fd1dd0102a1945eb990c32140f79d7a4c2a2018;hb=8663a371f31dc7bb888071c15a0b2cd4c3669c60;hp=ed2d9bb20fc20ec6bf823e3b3fc9205783b5d045;hpb=b95a56f37a1842ac4da4ddd13a5ae6e627d20eef;p=lyx.git diff --git a/src/graphics/GraphicsCache.h b/src/graphics/GraphicsCache.h index ed2d9bb20f..0fd1dd0102 100644 --- a/src/graphics/GraphicsCache.h +++ b/src/graphics/GraphicsCache.h @@ -1,105 +1,92 @@ // -*- C++ -*- /** - * \file GraphicsCache.h - * Copyright 2002 the LyX Team - * Read the file COPYING + * \file GraphicsCache.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * \author Baruch Even - * \author Angus Leeming + * \author Baruch Even + * \author Angus Leeming * - * grfx::GCache is the manager of the image cache. - * It is responsible for creating the grfx::GCacheItem's and maintaining them. + * Full author contact details are available in file CREDITS. * - * grfx::GCache is a singleton class. It is possible to have only one - * instance of it at any moment. + * lyx::graphics::Cache is the manager of the image cache. + * It is responsible for creating the lyx::graphics::CacheItem's + * and maintaining them. + * + * lyx::graphics::Cache is a singleton class. It is possible to have only one + * instance of it at any moment. */ #ifndef GRAPHICSCACHE_H #define GRAPHICSCACHE_H -#ifdef __GNUG__ -#pragma interface -#endif +#include +#include +#include + -#include "GraphicsTypes.h" -#include -#include "LString.h" -#include +namespace lyx { -class InsetGraphics; +namespace support { class FileName; } -namespace grfx { +namespace graphics { -class GCacheItem; +class CacheItem; -class GCache : boost::noncopyable { +class Cache { public: /// This is a singleton class. Get the instance. - static GCache & get(); - - /// - ~GCache(); - - /// Add a file to the cache (or modify an existing image). - void update(InsetGraphics const &, string const & filepath); + static Cache & get(); - /** Remove the data associated with this inset. - * Called from the InsetGraphics d-tor. + /** Which graphics formats can be loaded directly by the image loader. + * Other formats can be loaded if a converter to a loadable format + * can be defined. */ - void remove(InsetGraphics const &); - - /** No processing of the image will take place until this call is - * received. - */ - void startLoading(InsetGraphics const &); - - /** If (changed_background == true), then the background color of the - * graphics inset has changed. Update all images. - * Else, the preferred display type has changed. - * Update the view of all insets whose display type is DEFAULT. + std::vector const & loadableFormats() const; + + /// Add a graphics file to the cache. + void add(support::FileName const & file, support::FileName const & doc_file) const; + + /// Remove a file from the cache. + void remove(support::FileName const & file) const; + + /// Returns \c true if the file is in the cache. + bool inCache(support::FileName const & file) const; + + /** Get the cache item associated with file. + * Returns an empty container if there is no such item. + * + * IMPORTANT: whatever uses an image must make a local copy of this + * ItemPtr. The shared_ptr<>::use_count() function is + * used to ascertain whether or not to remove the item from the cache + * when remove(file) is called. + * + * You have been warned! */ - void changeDisplay(bool changed_background = false); - - /// Get the image referenced by a particular inset. - ImagePtr const image(InsetGraphics const &) const; - - /// How far have we got in loading the image? - ImageStatus status(InsetGraphics const &) const; - - // Used to ascertain the Bounding Box of non (e)ps files. - unsigned int raw_width(string const & filename) const; + typedef std::shared_ptr ItemPtr; /// - unsigned int raw_height(string const & filename) const; - -private: - /** Make the c-tor private so we can control how many objects - * are instantiated. - */ - GCache(); + ItemPtr const item(support::FileName const & file) const; - /// The cache contains data of this type. - typedef boost::shared_ptr CacheItemType; +private: + /// noncopyable + Cache(Cache const &); + void operator=(Cache const &); - /** The cache contains one item per file, so use a map to find the - * cache item quickly by filename. - * Note that each cache item can have multiple views, potentially one - * per inset that references the original file. + /** Make the c-tor, d-tor private so we can control how many objects + * are instantiated. */ - typedef std::map CacheType; - - /// Search the cache by inset. - CacheType::const_iterator find(InsetGraphics const &) const; + Cache(); /// - CacheType::iterator find(InsetGraphics const &); + ~Cache(); - /** Store a pointer to the cache so that we can forward declare - * GCacheItem. - */ - CacheType * cache; + /// Use the Pimpl idiom to hide the internals. + class Impl; + /// The pointer never changes although *pimpl_'s contents may. + Impl * const pimpl_; }; -} // namespace grfx - +} // namespace graphics +} // namespace lyx #endif // GRAPHICSCACHE_H