lyx_mirror/src/graphics/PreviewLoader.h

102 lines
2.6 KiB
C
Raw Normal View History

// -*- C++ -*-
/**
* \file PreviewLoader.h
* 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.
*
* lyx::graphics::PreviewLoader collects latex snippets together. Then, on a
* startLoading() call, these are dumped to file and processed, converting
* each snippet to a separate bitmap image file. Once a bitmap file is ready
* to be loaded back into LyX, the PreviewLoader emits a signal to inform
* the initiating process.
*/
#ifndef PREVIEWLOADER_H
#define PREVIEWLOADER_H
#include <boost/noncopyable.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/signal.hpp>
namespace lyx {
class Buffer;
namespace graphics {
class PreviewImage;
class PreviewLoader : boost::noncopyable {
public:
/** We need buffer because we require the preamble to the
* LaTeX file.
*/
PreviewLoader(Buffer const & buffer);
///
~PreviewLoader();
/** Is there an image already associated with this snippet of LaTeX?
* If so, returns a pointer to it, else returns 0.
*/
PreviewImage const * preview(std::string const & latex_snippet) const;
///
enum Status {
///
NotFound,
///
InQueue,
///
Processing,
///
Ready
};
/// How far have we got in loading the image?
Status status(std::string const & latex_snippet) const;
/// Add a snippet of LaTeX to the queue for processing.
void add(std::string const & latex_snippet) const;
/// Remove this snippet of LaTeX from the PreviewLoader.
void remove(std::string const & latex_snippet) const;
/** We have accumulated several latex snippets with status "InQueue".
* Initiate their transformation into bitmap images.
*/
void startLoading() const;
/** Connect and you'll be informed when the bitmap image file
* has been created and is ready for loading through
* lyx::graphics::PreviewImage::image().
*/
typedef boost::signal<void(PreviewImage const &)> sig_type;
typedef sig_type::slot_type slot_type;
///
boost::signals::connection connect(slot_type const &) const;
/** When PreviewImage has finished loading the image file into memory,
* it tells the PreviewLoader to tell the outside world
*/
void emitSignal(PreviewImage const &) const;
/// Which buffer owns this loader.
Buffer const & buffer() const;
private:
/// Use the Pimpl idiom to hide the internals.
class Impl;
/// The pointer never changes although *pimpl_'s contents may.
boost::scoped_ptr<Impl> const pimpl_;
};
} // namespace graphics
} // namespace lyx
#endif // PREVIEWLOADER_H