]> git.lyx.org Git - lyx.git/blobdiff - src/insets/RenderPreview.cpp
Fix trailing whitespace in cpp files.
[lyx.git] / src / insets / RenderPreview.cpp
index d9946e838d807a1cc44320d55c0e29736eac4ad9..64a5eb58adcc4f7194fbb4320fe26dbc100b485d 100644 (file)
 #include "support/lassert.h"
 #include "support/lstrings.h"
 
-#include "support/bind.h"
-
 using namespace std;
 using namespace lyx::support;
 
 namespace lyx {
 
 
-LyXRC_PreviewStatus RenderPreview::status()
+bool RenderPreview::previewText()
 {
-       return lyxrc.preview;
+       // Use a switch to trigger a warning if the enum is changed.
+       switch(lyxrc.preview) {
+       case LyXRC::PREVIEW_ON:
+       case LyXRC::PREVIEW_NO_MATH:
+               return true;
+       case LyXRC::PREVIEW_OFF:
+               break;
+       }
+
+       return false;
+}
+
+
+bool RenderPreview::previewMath()
+{
+       // Use a switch to trigger a warning if the enum is changed.
+       switch(lyxrc.preview) {
+       case LyXRC::PREVIEW_ON:
+               return true;
+       case LyXRC::PREVIEW_NO_MATH:
+       case LyXRC::PREVIEW_OFF:
+               break;
+       }
+
+       return false;
 }
 
 
@@ -53,19 +75,11 @@ RenderPreview::RenderPreview(Inset const * inset)
 RenderPreview::RenderPreview(RenderPreview const & other,
                             Inset const * inset)
        : RenderBase(other),
-         boost::signals::trackable(),
          snippet_(other.snippet_),
          parent_(inset)
 {}
 
 
-RenderPreview::~RenderPreview()
-{
-       if (ploader_connection_.connected())
-               ploader_connection_.disconnect();
-}
-
-
 RenderBase * RenderPreview::clone(Inset const * inset) const
 {
        return new RenderPreview(*this, inset);
@@ -80,6 +94,9 @@ docstring const statusMessage(BufferView const * bv, string const & snippet)
 
        Buffer const & buffer = bv->buffer();
        graphics::PreviewLoader const * loader = buffer.loader();
+       // please coverity (probably worth the check anyway)
+       if (!loader)
+               return docstring();
        graphics::PreviewLoader::Status const status = loader->status(snippet);
 
        docstring message;
@@ -166,12 +183,14 @@ void RenderPreview::draw(PainterInfo & pi, int x, int y) const
                             y - theFontMetrics(font).maxAscent() - 4,
                             stat, font);
        }
+       pi.change_.paintCue(pi, x, y - dim_.asc,
+                           x + dim_.width(), y - dim_.asc + dim_.height());
 }
 
 
 void RenderPreview::startLoading(Buffer const & buffer, bool forexport) const
 {
-       if (!forexport && (status() == LyXRC::PREVIEW_OFF || snippet_.empty()))
+       if (!forexport && (lyxrc.preview == LyXRC::PREVIEW_OFF || snippet_.empty()))
                return;
 
        graphics::PreviewLoader * loader = buffer.loader();
@@ -181,10 +200,10 @@ void RenderPreview::startLoading(Buffer const & buffer, bool forexport) const
 
 
 void RenderPreview::addPreview(docstring const & latex_snippet,
-                               Buffer const & buffer, 
+                               Buffer const & buffer,
                                bool ignore_lyxrc)
 {
-       if (status() == LyXRC::PREVIEW_OFF && !ignore_lyxrc)
+       if (lyxrc.preview == LyXRC::PREVIEW_OFF && !ignore_lyxrc)
                return;
 
        graphics::PreviewLoader * loader = buffer.loader();
@@ -194,10 +213,10 @@ void RenderPreview::addPreview(docstring const & latex_snippet,
 
 
 void RenderPreview::addPreview(docstring const & latex_snippet,
-                               graphics::PreviewLoader & ploader, 
+                               graphics::PreviewLoader & ploader,
                                bool ignore_lyxrc)
 {
-       if (status() == LyXRC::PREVIEW_OFF && !ignore_lyxrc)
+       if (lyxrc.preview == LyXRC::PREVIEW_OFF && !ignore_lyxrc)
                return;
 
        // FIXME UNICODE
@@ -212,10 +231,12 @@ void RenderPreview::addPreview(docstring const & latex_snippet,
        // If this is the first time of calling, connect to the
        // PreviewLoader signal that'll inform us when the preview image
        // is ready for loading.
-       if (!ploader_connection_.connected()) {
-               ploader_connection_ = ploader.connect(
-                       bind(&RenderPreview::imageReady, this, _1));
-       }
+       if (!ploader_connection_.connected())
+               // This is a scoped connection.
+               ploader_connection_ =
+                       ploader.connect([this](graphics::PreviewImage const & pi){
+                               imageReady(pi);
+                       });
 
        ploader.add(snippet_);
 }
@@ -242,28 +263,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();
+       monitor_->checkModifiedAsync();
+}
+
+
+signals2::connection RenderMonitoredPreview::connect(slot const & slot)
+{
+       return changed_.connect(slot);
+}
+
+
+bool RenderMonitoredPreview::monitoring() const
+{
+       return (bool) monitor_;
 }
 
 
-boost::signals::connection
-RenderMonitoredPreview::fileChanged(slot_type const & slot)
+void RenderMonitoredPreview::startMonitoring() const
 {
-       return monitor_.connect(slot);
+       if (!monitoring()) {
+               monitor_ = FileSystemWatcher::activeMonitor(filename_);
+               monitor_->connect([this](bool /* exists */){ changed_(); });
+       }
 }
 
+
+void RenderMonitoredPreview::stopMonitoring() const
+{
+       monitor_ = nullptr;
+}
+
+
+
+
 } // namespace lyx