]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsLoader.C
* src/LaTeX.C
[lyx.git] / src / graphics / GraphicsLoader.C
index b7c1d953a4acc02270c7026d51489e87e8dc281a..dc128a1b6bd98bec92f6da4623641f70f0ba69b1 100644 (file)
@@ -5,46 +5,46 @@
  *
  * \author Angus Leeming
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
 #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 {
+
+using support::FileName;
+       
+namespace graphics {
+
+class Loader::Impl : public boost::signals::trackable {
+public:
        ///
-       Impl(Params const &);
+       Impl();
        ///
        ~Impl();
        ///
-       void resetFile(string const &);
+       void resetFile(FileName const &);
        ///
        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_;
@@ -55,7 +55,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:
        ///
@@ -65,42 +65,51 @@ 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()))
+Loader::Loader(FileName const & file, DisplayType type)
+       : pimpl_(new Impl)
 {
        reset(file, type);
 }
 
 
-Loader::Loader(string const & file, Params const & params)
-       : pimpl_(new Impl(params))
+Loader::Loader(FileName const & file, Params const & 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()
 {}
 
 
-void Loader::reset(string const & file, DisplayType type) const
+Loader & Loader::operator=(Loader const & other)
+{
+       if (this != &other) {
+               Params const & params = other.pimpl_->params();
+               reset(params.filename, params);
+       }
+       return *this;
+}
+
+
+void Loader::reset(FileName const & file, DisplayType type) const
 {
        Params params;
        params.display = type;
@@ -111,7 +120,7 @@ void Loader::reset(string const & file, DisplayType type) const
 }
 
 
-void Loader::reset(string const & file, Params const & params) const
+void Loader::reset(FileName const & file, Params const & params) const
 {
        pimpl_->resetParams(params);
        pimpl_->resetFile(file);
@@ -130,15 +139,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();
 }
 
 
@@ -169,9 +170,9 @@ unsigned long Loader::checksum() const
 }
 
 
-string const & Loader::filename() const
+FileName const & Loader::filename() const
 {
-       static string const empty;
+       static FileName const empty;
        return pimpl_->cached_item_.get() ?
                pimpl_->cached_item_->filename() : empty;
 }
@@ -195,24 +196,22 @@ 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));
 }
 
 
 Loader::Impl::~Impl()
 {
-       resetFile(string());
+       resetFile(FileName());
 }
 
 
-void Loader::Impl::resetFile(string const & file)
+void Loader::Impl::resetFile(FileName const & file)
 {
-       string const old_file = cached_item_.get() ?
-               cached_item_->filename() : string();
+       FileName const old_file = cached_item_.get() ?
+               cached_item_->filename() : FileName();
 
        if (file == old_file)
                return;
@@ -290,60 +289,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