]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsCache.h
Merge branch 'master' into biblatex2
[lyx.git] / src / graphics / GraphicsCache.h
index dadec6c150d8ee54815dedf3ffab5d249e8e5a03..0fd1dd0102a1945eb990c32140f79d7a4c2a2018 100644 (file)
 // -*- 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 <baruch.even@writeme.com>
- * \author Angus Leeming <a.leeming@ic.ac.uk>
+ * \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 <memory>
+#include <string>
+#include <vector>
+
 
-#include "GraphicsTypes.h"
-#include <map>
-#include "LString.h"
-#include <boost/utility.hpp>
+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<std::string> 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;
+       typedef std::shared_ptr<CacheItem> ItemPtr;
+       ///
+       ItemPtr const item(support::FileName const & file) const;
 
 private:
-       /** Make the c-tor private so we can control how many objects
-        *  are instantiated.
-        */
-       GCache();
-
-       /// The cache contains data of this type.
-       typedef boost::shared_ptr<GCacheItem> CacheItemType;
+       /// 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<string, CacheItemType> 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