3 * \file render_preview.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Angus Leeming
9 * Full author contact details are available in file CREDITS.
11 * graphics::RenderPreview is an abstract base class that can help
12 * insets to generate previews. The daughter class must instantiate two small
13 * methods. The Inset would own an instance of this daughter class.
16 #ifndef RENDER_PREVIEW_H
17 #define RENDER_PREVIEW_H
19 #include "render_base.h"
21 #include "support/FileMonitor.h"
22 #include "support/docstring.h"
24 #include <boost/signal.hpp>
25 #include <boost/signals/trackable.hpp>
26 #include <boost/signals/connection.hpp>
31 class LyXRC_PreviewStatus;
35 namespace support { class FileName; }
42 } // namespace graphics
45 class RenderPreview : public RenderBase, public boost::signals::trackable {
47 /// a wrapper for Previews::status()
48 static LyXRC_PreviewStatus status();
50 RenderPreview(InsetBase const *);
51 RenderPreview(RenderPreview const &, InsetBase const *);
52 std::auto_ptr<RenderBase> clone(InsetBase const *) const;
54 /// Compute the size of the object, returned in dim
55 bool metrics(MetricsInfo &, Dimension & dim) const;
57 void draw(PainterInfo & pi, int x, int y) const;
59 /** Find the PreviewLoader and add a LaTeX snippet to it.
60 * Do not start the loading process.
62 void addPreview(docstring const & latex_snippet, Buffer const &);
64 /** Add a LaTeX snippet to the PreviewLoader.
65 * Do not start the loading process.
67 void addPreview(docstring const & latex_snippet,
68 graphics::PreviewLoader & ploader);
70 /// Begin the loading process.
71 void startLoading(Buffer const & buffer) const;
73 /** Remove a snippet from the cache of previews.
74 * Useful if previewing the contents of a file that has changed.
76 void removePreview(Buffer const &);
78 /** \returns a pointer to the PreviewImage associated with this snippet
81 graphics::PreviewImage const *
82 getPreviewImage(Buffer const & buffer) const;
84 /// equivalent to dynamic_cast
85 virtual RenderPreview * asPreview() { return this; }
89 RenderPreview & operator=(RenderPreview const &);
91 /// This method is connected to the PreviewLoader::imageReady signal.
92 void imageReady(graphics::PreviewImage const &);
94 /// The thing that we're trying to generate a preview of.
97 /** Store the connection to the preview loader so that we connect
100 boost::signals::connection ploader_connection_;
102 /// Inform the core that the inset has changed.
103 InsetBase const * parent_;
107 class RenderMonitoredPreview : public RenderPreview {
109 RenderMonitoredPreview(InsetBase const *);
111 void draw(PainterInfo & pi, int x, int y) const;
113 void setAbsFile(support::FileName const & file);
115 bool monitoring() const { return monitor_.monitoring(); }
116 void startMonitoring() const { monitor_.start(); }
117 void stopMonitoring() const { monitor_.stop(); }
119 /// Connect and you'll be informed when the file changes.
120 typedef support::FileMonitor::slot_type slot_type;
121 boost::signals::connection fileChanged(slot_type const &);
123 /// equivalent to dynamic_cast
124 virtual RenderMonitoredPreview * asMonitoredPreview() { return this; }
128 mutable support::FileMonitor monitor_;
133 #endif // RENDERPREVIEW_H