]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsCacheItem.h
Fix typo (from Thibaut)
[lyx.git] / src / graphics / GraphicsCacheItem.h
index 6fc9ee4f1c6f1b56ad82090ac2f5e5d18bb8717b..6f7f968bc6a44086af831849470043faa4053c0e 100644 (file)
 // -*- C++ -*-
-/* This file is part of
- * =================================================
- * 
- *          LyX, The Document Processor
- *          Copyright 1995 Matthias Ettrich.
- *          Copyright 1995-2001 The LyX Team.
+/**
+ * \file GraphicsCacheItem.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *          This file Copyright 2000 Baruch Even
- * ================================================= */
+ * \author Baruch Even
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS.
+ *
+ * The graphics cache is a container of graphics::CacheItems.
+ * Each graphics::CacheItem, defined here represents a separate image file.
+ *
+ * The routines here can be used to load the graphics file into memory at
+ * which point (status() == graphics::Loaded).
+ * The user is then free to access image() in order to copy it and to then
+ * transform the copy (rotate, scale, clip) and to generate the pixmap.
+ *
+ * The graphics cache supports fully asynchronous:
+ * file conversion to a loadable format;
+ * file loading.
+ *
+ * Whether you get that, of course, depends on graphics::Converter and
+ * on the graphics::Image-derived image class.
+ */
 
 #ifndef GRAPHICSCACHEITEM_H
 #define GRAPHICSCACHEITEM_H
 
-#include <config.h>
+#include "GraphicsTypes.h"
 
-#ifdef __GNUG__
-#pragma interface
-#endif
+#include "support/signals.h"
 
-#include XPM_H_LOCATION
-#include "LString.h"
 
-#include <boost/utility.hpp>
-#include <boost/smart_ptr.hpp>
+namespace lyx {
 
-#include <sigc++/signal_system.h>
+namespace support { class FileName; }
 
-class LyXImage;
+namespace graphics {
 
-/// A GraphicsCache item holder.
-class GraphicsCacheItem : boost::noncopyable {
+class Image;
+class Converter;
+
+/// A graphics::Cache item holder.
+class CacheItem {
 public:
-       /// c-tor
-       GraphicsCacheItem(string const & filename);
-       /// d-tor, frees the image structures.
-       ~GraphicsCacheItem();
-       
-       /// Return a pixmap that can be displayed on X server.
-       LyXImage * getImage() const; 
        ///
-       enum ImageStatus {
-               ///
-               Loading = 1,
-               ///
-               ErrorConverting,
-               ///
-               ErrorReading,
-               ///
-               UnknownError,
-               ///
-               Loaded
-       };
-       
-       /// Is the pixmap ready for display?
-       ImageStatus getImageStatus() const; 
-
-       /** Get a notification when the image conversion is done.
-           used by an internal callback mechanism.
-       */
-       void imageConverted(int retval);
+       CacheItem(support::FileName const & file, support::FileName const & doc_file);
+       /// Needed for the pimpl
+       ~CacheItem();
+
+       ///
+       support::FileName const & filename() const;
+
+       /// Try to load a display format.
+       bool tryDisplayFormat() const;
+
+       /// It's in the cache. Now start the loading process.
+       void startLoading() const;
+
+       /** Monitor any changes to the file.
+        *  There is no point monitoring the file before startLoading() is
+        *  invoked.
+        */
+       void startMonitoring() const;
+       ///
+       bool monitoring() const;
+       /// perform a modification check asynchronously
+       void checkModifiedAsync() const;
+
+       /** Get the image associated with filename().
+        *  If the image is not yet loaded, returns 0.
+        *  This routine returns a pointer to const; if you want to modify it,
+        *  create a copy and modify that.
+        */
+       Image const * image() const;
+
+       /// How far have we got in loading the image?
+       ImageStatus status() const;
+
+       /** Connect and you'll be informed when the loading status of the image
+        *  changes.
+        */
+       typedef signals2::signal<void()>::slot_type slot_type;
+       ///
+       signals2::connection connect(slot_type const &) const;
 
 private:
-       bool convertImage(string const & filename);
-       void loadImage();
-
-       /** The filename we refer too.
-           This is used when removing ourselves from the cache.
-       */
-       string filename_;
-       /// The temporary file that we use
-       string tempfile;
-       /// The image status
-       ImageStatus imageStatus_;
-       /// The image (if it got loaded)
-       boost::scoped_ptr<LyXImage> image_;
+       /// noncopyable
+       CacheItem(CacheItem const &);
+       void operator=(CacheItem const &);
+
+       /// Use the Pimpl idiom to hide the internals.
+       class Impl;
+       /// The pointer never changes although *pimpl_'s contents may.
+       Impl * const pimpl_;
 };
 
-#endif
+} // namespace graphics
+} // namespace lyx
+
+#endif // GRAPHICSCACHEITEM_H