]> git.lyx.org Git - features.git/commitdiff
Replace FileMonitor with FileMonitor2 in RenderPreview
authorGuillaume Munch <gm@lyx.org>
Thu, 9 Mar 2017 21:44:07 +0000 (22:44 +0100)
committerGuillaume Munch <gm@lyx.org>
Fri, 10 Mar 2017 23:50:57 +0000 (00:50 +0100)
src/insets/InsetExternal.cpp
src/insets/InsetInclude.cpp
src/insets/RenderPreview.cpp
src/insets/RenderPreview.h

index 8ddd7565d78ca566bcb4699907baf9ec77d51f9b..3b79249cc0b4c08a2e5e3f21ad6b7185cf180d15 100644 (file)
@@ -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)
index 3a8c0b8c7ed6c02b513798e3034041739b914470..a5ed017d7526d466346f6ce42b04d295790807f6 100644 (file)
@@ -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_);
index e985d290a27391427a44df676147d0f8b4c56b95..99abca9f3c5800d0e18591155043ccd8bc4c8ae2 100644 (file)
@@ -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
index 841ffdacdeea2f531339d96974b6a040fe1c5584..c6dd74d28e6ffdd65e31e3bb76ab84aa82284286 100644 (file)
@@ -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