commit a4fae021f23aa38382673d014cea839aaa9cb812
Author: Guillaume Munch <[email protected]>
Date: Thu Mar 9 22:44:07 2017 +0100
Replace FileMonitor with FileMonitor2 in RenderPreview
---
src/insets/InsetExternal.cpp | 10 +++-----
src/insets/InsetInclude.cpp | 8 +++---
src/insets/RenderPreview.cpp | 44 +++++++++++++++++++++++++++++++++++------
src/insets/RenderPreview.h | 21 ++++++++++++-------
4 files changed, 58 insertions(+), 25 deletions(-)
diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp
index 8ddd756..3b79249 100644
--- a/src/insets/InsetExternal.cpp
+++ b/src/insets/InsetExternal.cpp
@@ -629,14 +629,12 @@ void InsetExternal::setParams(InsetExternalParams const &
p)
LASSERT(false, return);
break;
case PREVIEW_INSTANT: {
- renderer_.reset(new RenderMonitoredPreview(this));
+ renderer_ = make_unique<RenderMonitoredPreview>(this);
RenderMonitoredPreview * preview_ptr =
renderer_->asMonitoredPreview();
- preview_ptr->fileChanged(bind(&InsetExternal::fileChanged,
this));
- if (preview_ptr->monitoring())
- preview_ptr->stopMonitoring();
+ preview_ptr->connect([=]() { fileChanged(); });
add_preview_and_start_loading(*preview_ptr, *this, buffer());
break;
- }
+ }
case PREVIEW_GRAPHICS: {
RenderGraphic * graphic_ptr = renderer_->asGraphic();
if (!graphic_ptr) {
@@ -837,7 +835,7 @@ void InsetExternal::validate(LaTeXFeatures & features) const
void InsetExternal::addPreview(DocIterator const & /*inset_pos*/,
- graphics::PreviewLoader & ploader) const
+ graphics::PreviewLoader & ploader) const
{
RenderMonitoredPreview * const ptr = renderer_->asMonitoredPreview();
if (!ptr)
diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp
index 3a8c0b8..a5ed017 100644
--- a/src/insets/InsetInclude.cpp
+++ b/src/insets/InsetInclude.cpp
@@ -170,10 +170,10 @@ InsetLabel * createLabel(Buffer * buf, docstring const &
label_str)
InsetInclude::InsetInclude(Buffer * buf, InsetCommandParams const & p)
: InsetCommand(buf, p), include_label(uniqueID()),
- preview_(new RenderMonitoredPreview(this)), failedtoload_(false),
+ preview_(make_unique<RenderMonitoredPreview>(this)),
failedtoload_(false),
set_label_(false), label_(0), child_buffer_(0)
{
- preview_->fileChanged(bind(&InsetInclude::fileChanged, this));
+ preview_->connect([=](){ fileChanged(); });
if (isListings(params())) {
InsetListingsParams listing_params(to_utf8(p["lstparams"]));
@@ -185,10 +185,10 @@ InsetInclude::InsetInclude(Buffer * buf,
InsetCommandParams const & p)
InsetInclude::InsetInclude(InsetInclude const & other)
: InsetCommand(other), include_label(other.include_label),
- preview_(new RenderMonitoredPreview(this)), failedtoload_(false),
+ preview_(make_unique<RenderMonitoredPreview>(this)),
failedtoload_(false),
set_label_(false), label_(0), child_buffer_(0)
{
- preview_->fileChanged(bind(&InsetInclude::fileChanged, this));
+ preview_->connect([=](){ fileChanged(); });
if (other.label_)
label_ = new InsetLabel(*other.label_);
diff --git a/src/insets/RenderPreview.cpp b/src/insets/RenderPreview.cpp
index e985d29..99abca9 100644
--- a/src/insets/RenderPreview.cpp
+++ b/src/insets/RenderPreview.cpp
@@ -271,28 +271,58 @@ void RenderPreview::imageReady(graphics::PreviewImage
const & pimage)
RenderMonitoredPreview::RenderMonitoredPreview(Inset const * inset)
- : RenderPreview(inset), monitor_(FileName(), 2000)
-{}
+ : RenderPreview(inset)
+{
+ setAbsFile(FileName());
+}
void RenderMonitoredPreview::setAbsFile(FileName const & file)
{
- monitor_.reset(file);
+ bool mon = monitoring();
+ if (mon)
+ stopMonitoring();
+ filename_ = file;
+ if (mon)
+ startMonitoring();
}
void RenderMonitoredPreview::draw(PainterInfo & pi, int x, int y) const
{
RenderPreview::draw(pi, x, y);
- if (!monitoring())
- startMonitoring();
+ startMonitoring();
}
boost::signals2::connection
-RenderMonitoredPreview::fileChanged(slot_type const & slot)
+RenderMonitoredPreview::connect(ChangedSig::slot_type const & slot)
{
- return monitor_.connect(slot);
+ return changed_.connect(slot);
}
+
+bool RenderMonitoredPreview::monitoring() const
+{
+ return (bool) monitor_;
+}
+
+
+void RenderMonitoredPreview::startMonitoring() const
+{
+ if (!monitoring()) {
+ monitor_ = FileSystemWatcher::monitor(filename_);
+ monitor_->connect(changed_);
+ }
+}
+
+
+void RenderMonitoredPreview::stopMonitoring() const
+{
+ monitor_ = nullptr;
+}
+
+
+
+
} // namespace lyx
diff --git a/src/insets/RenderPreview.h b/src/insets/RenderPreview.h
index 841ffda..c6dd74d 100644
--- a/src/insets/RenderPreview.h
+++ b/src/insets/RenderPreview.h
@@ -20,6 +20,7 @@
#include "support/docstring.h"
#include "support/FileMonitor.h"
+#include "support/FileName.h"
#include <boost/signals2.hpp>
#include <boost/signals2/trackable.hpp>
@@ -31,8 +32,6 @@ class Buffer;
class MetricsInfo;
class PainterInfo;
-namespace support { class FileName; }
-
namespace graphics {
class PreviewImage;
@@ -120,22 +119,28 @@ public:
///
void setAbsFile(support::FileName const & file);
///
- bool monitoring() const { return monitor_.monitoring(); }
- void startMonitoring() const { monitor_.start(); }
- void stopMonitoring() const { monitor_.stop(); }
+ bool monitoring() const;
+ void startMonitoring() const;
+ void stopMonitoring() const;
/// Connect and you'll be informed when the file changes.
- typedef support::FileMonitor::slot_type slot_type;
- boost::signals2::connection fileChanged(slot_type const &);
+ typedef boost::signals2::signal<void()> ChangedSig;
+ boost::signals2::connection connect(ChangedSig::slot_type const &);
/// equivalent to dynamic_cast
virtual RenderMonitoredPreview * asMonitoredPreview() { return this; }
private:
+ /// This signal is emitted if the file is modified
+ ChangedSig changed_;
+ ///
+ mutable support::FileMonitorPtr monitor_;
///
- mutable support::FileMonitor monitor_;
+ support::FileName filename_;
};
+
+
} // namespace lyx
#endif // RENDERPREVIEW_H