lyx_mirror/src/graphics/PreviewLoader.h
Guillaume MM db58111360 Properly track the lifetime of signals2::slots (#8261)
Starting at 61b2bd5e, boost::bind was progressively replaced with
std::bind. They are not interchangeable though. boost::bind implements
the tracking of boost::signals{,2}::trackable objects. Now that
std::bind has completely replaced boost::bind, tracking never occurred.

This commit replaces boost::signals2::trackable with the new preferred
boost::signals2 methods: scoped_connections or slot::track_foreign. The
support::Trackable class introduced is less safe but easier for transitioning
old code.

Fixes the crash at #8261.
2017-06-11 19:51:17 +02:00

118 lines
2.9 KiB
C++

// -*- 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.
*
* 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 "support/signals.h"
#include <QObject>
#include "ColorCode.h"
namespace lyx {
class Buffer;
namespace graphics {
class PreviewImage;
class PreviewLoader : public QObject {
Q_OBJECT
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(bool wait = false) 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 signals2::signal<void(PreviewImage const &)> sig;
typedef sig::slot_type slot;
///
signals2::connection connect(slot 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;
/// The background color used
static ColorCode backgroundColor() { return Color_background; }
/// The foreground color used
static ColorCode foregroundColor() { return Color_preview; }
double displayPixelRatio() const ;
public Q_SLOTS:
///
void refreshPreviews();
private:
/// noncopyable
PreviewLoader(PreviewLoader const &);
void operator=(PreviewLoader const &);
/// Use the Pimpl idiom to hide the internals.
class Impl;
/// The pointer never changes although *pimpl_'s contents may.
Impl * const pimpl_;
};
} // namespace graphics
} // namespace lyx
#endif // PREVIEWLOADER_H