]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsLoader.C
Quote graphics conversion commands correctly.
[lyx.git] / src / graphics / GraphicsLoader.C
index 4c0b19a78635830011b34e8348b2dd480ef236d0..bea847426a961b48801a6ea18cdfba1af9c67122 100644 (file)
@@ -3,41 +3,33 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Angus Leeming 
+ * \author Angus Leeming
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "GraphicsLoader.h"
 
-#include "BufferView.h"
-
-#include "GraphicsCache.h"
 #include "GraphicsCacheItem.h"
 #include "GraphicsImage.h"
 #include "GraphicsParams.h"
-#include "GraphicsSupport.h"
-
-#include "frontends/LyXView.h"
-#include "frontends/Timeout.h"
+#include "LoaderQueue.h"
 
-#include <boost/weak_ptr.hpp>
 #include <boost/bind.hpp>
-#include <boost/signals/trackable.hpp>
 
-#include <list>
 
-namespace grfx {
+using std::string;
 
-struct Loader::Impl : boost::signals::trackable {
+
+namespace lyx {
+namespace graphics {
+
+class Loader::Impl : public boost::signals::trackable {
+public:
        ///
-       Impl(Params const &);
+       Impl();
        ///
        ~Impl();
        ///
@@ -46,9 +38,10 @@ struct Loader::Impl : boost::signals::trackable {
        void resetParams(Params const &);
        ///
        void createPixmap();
-
        ///
-       void startLoading(Inset const &, BufferView const &);
+       void startLoading();
+       ///
+       Params const & params() const { return params_; }
 
        /// The loading status of the image.
        ImageStatus status_;
@@ -59,7 +52,7 @@ struct Loader::Impl : boost::signals::trackable {
        /// We modify a local copy of the image once it is loaded.
        Image::ImagePtr image_;
        /// This signal is emitted when the image loading status changes.
-       boost::signal0<void> signal_;
+       boost::signal<void()> signal_;
 
 private:
        ///
@@ -69,41 +62,50 @@ private:
 
        ///
        Params params_;
-
-       ///
-       Timeout timer;
-       // Multiple Insets can share the same image
-       typedef std::list<Inset const *> InsetList;
-       ///
-       InsetList insets;
-       ///
-       boost::weak_ptr<BufferView const> view;
 };
 
 
 Loader::Loader()
-       : pimpl_(new Impl(Params()))
+       : pimpl_(new Impl)
 {}
 
 
 Loader::Loader(string const & file, DisplayType type)
-       : pimpl_(new Impl(Params()))
+       : pimpl_(new Impl)
 {
        reset(file, type);
 }
 
 
 Loader::Loader(string const & file, Params const & params)
-       : pimpl_(new Impl(params))
+       : pimpl_(new Impl)
 {
        reset(file, params);
 }
 
 
+Loader::Loader(Loader const & other)
+       : pimpl_(new Impl)
+{
+       Params const & params = other.pimpl_->params();
+       reset(params.filename, params);
+}
+
+
 Loader::~Loader()
 {}
 
 
+Loader & Loader::operator=(Loader const & other)
+{
+       if (this != &other) {
+               Params const & params = other.pimpl_->params();
+               reset(params.filename, params);
+       }
+       return *this;
+}
+
+
 void Loader::reset(string const & file, DisplayType type) const
 {
        Params params;
@@ -134,15 +136,7 @@ void Loader::startLoading() const
 {
        if (pimpl_->status_ != WaitingToLoad || !pimpl_->cached_item_.get())
                return;
-       pimpl_->cached_item_->startLoading();
-}
-
-
-void Loader::startLoading(Inset const & inset, BufferView const & bv) const
-{
-       if (pimpl_->status_ != WaitingToLoad || !pimpl_->cached_item_.get())
-               return;
-       pimpl_->startLoading(inset, bv);
+       pimpl_->startLoading();
 }
 
 
@@ -199,11 +193,9 @@ Image const * Loader::image() const
 }
 
 
-Loader::Impl::Impl(Params const & params)
-       : status_(WaitingToLoad), params_(params),
-         timer(2000, Timeout::ONETIME)
+Loader::Impl::Impl()
+       : status_(WaitingToLoad)
 {
-       timer.timeout.connect(boost::bind(&Impl::checkedLoading, this));
 }
 
 
@@ -294,60 +286,14 @@ void Loader::Impl::createPixmap()
        }
 }
 
-
-void Loader::Impl::startLoading(Inset const & inset, BufferView const & bv)
+void Loader::Impl::startLoading()
 {
-       if (status_ != WaitingToLoad || timer.running())
+       if (status_ != WaitingToLoad)
                return;
 
-       InsetList::const_iterator it  = insets.begin();
-       InsetList::const_iterator end = insets.end();
-       it = std::find(it, end, &inset);
-       if (it == end)
-               insets.push_back(&inset);
-       view = bv.owner()->view();
-
-       timer.start();
-}
-
-
-namespace {
-
-struct FindVisibleInset {
-
-       FindVisibleInset(std::list<VisibleParagraph> const & vps) : vps_(vps) {}
-
-       bool operator()(Inset const * inset_ptr)
-       {
-               if (!inset_ptr)
-                       return false;
-               return isInsetVisible(*inset_ptr, vps_);
-       }
-
-private:
-       std::list<VisibleParagraph> const & vps_;
-};
-
-} // namespace anon
-
-
-void Loader::Impl::checkedLoading()
-{
-       if (insets.empty() || !view.get())
-               return;
-
-       std::list<VisibleParagraph> const vps =
-               getVisibleParagraphs(*view.get());
-
-       InsetList::const_iterator it  = insets.begin();
-       InsetList::const_iterator end = insets.end();
-
-       it = std::find_if(it, end, FindVisibleInset(vps));
-
-       // One of the insets is visible, so start loading the image.
-       if (it != end)
-               cached_item_->startLoading();
+       LoaderQueue::get().touch(cached_item_);
 }
 
 
-} // namespace grfx
+} // namespace graphics
+} // namespace lyx