X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsCacheItem.h;h=481e4b117a6a770f132daa2c4125f46644ccf547;hb=f345feecede25b164502abdacf893a36de9ef4ae;hp=e139fbffc46a4d24387dbfc728878aab066efc9b;hpb=7110b8eda4ab2dc3e87c53c89225caaff972f9eb;p=lyx.git diff --git a/src/graphics/GraphicsCacheItem.h b/src/graphics/GraphicsCacheItem.h index e139fbffc4..481e4b117a 100644 --- a/src/graphics/GraphicsCacheItem.h +++ b/src/graphics/GraphicsCacheItem.h @@ -1,29 +1,107 @@ // -*- C++ -*- -/* This file is part of - * ================================================= - * - * LyX, The Document Processor - * Copyright 1995 Matthias Ettrich. - * Copyright 1995-2000 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 -#ifdef __GNUG__ -#pragma interface -#endif +#include "GraphicsTypes.h" + +#include + + +namespace lyx { + +namespace support { class FileName; } + +namespace graphics { + +class Image; +class Converter; -/// -class GraphicsCacheItem { +/// A graphics::Cache item holder. +class CacheItem { public: + /// + CacheItem(support::FileName const & 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; + /** Returns the check checksum of filename() so that, for example, you can + * ascertain whether to output a new PostScript version of the file + * for a LaTeX run. + */ + unsigned long checksum() 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 boost::signal sig_type; + typedef sig_type::slot_type slot_type; + /// + boost::signals::connection connect(slot_type const &) const; + private: - /// - GraphicsCacheItem() {} - // - friend class GraphicsCache; + /// 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