]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/LoaderQueue.C
Add more controls to the view-source dialog.
[lyx.git] / src / graphics / LoaderQueue.C
index 73062317b6ec31501f87ef04457b3f731f5c22c0..c21726d5562ff1a80958c06e8abf5ea40442ace8 100644 (file)
@@ -5,10 +5,13 @@
  *
  * \author Alfredo Braunstein
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
+#include <config.h>
+
 #include "LoaderQueue.h"
+#include "GraphicsCacheItem.h"
 
 #include "debug.h"
 
 using std::endl;
 using std::list;
 
+namespace lyx {
+namespace graphics {
 
-namespace grfx {
+int LoaderQueue::s_numimages_ = 5;
+int LoaderQueue::s_millisecs_ = 500;
 
 
 LoaderQueue & LoaderQueue::get()
@@ -28,20 +34,20 @@ LoaderQueue & LoaderQueue::get()
 }
 
 
-void LoaderQueue::loadNext() 
+void LoaderQueue::loadNext()
 {
-       emptyBucket();
        lyxerr[Debug::GRAPHICS] << "LoaderQueue: "
                                << cache_queue_.size()
-                               << " items in the queue" << endl; 
-       int counter = 10;
+                               << " items in the queue" << endl;
+       int counter = s_numimages_;
        while (cache_queue_.size() && counter--) {
-               if(cache_queue_.front()->status() == WaitingToLoad)
-                       cache_queue_.front()->startLoading();
-               cache_set_.erase(cache_queue_.front());
+               Cache::ItemPtr ptr = cache_queue_.front();
+               cache_set_.erase(ptr);
                cache_queue_.pop_front();
+               if (ptr->status() == WaitingToLoad)
+                       ptr->startLoading();
        }
-       if (cache_queue_.size() || bucket_.size()) {
+       if (cache_queue_.size()) {
                startLoader();
        } else {
                stopLoader();
@@ -49,21 +55,21 @@ void LoaderQueue::loadNext()
 }
 
 
-LoaderQueue::LoaderQueue() : timer(100, Timeout::ONETIME), 
-                            running_(false)
+void LoaderQueue::setPriority(int numimages , int millisecs)
 {
-       timer.timeout.connect(boost::bind(&LoaderQueue::loadNext, this));
+       s_numimages_ = numimages;
+       s_millisecs_ = millisecs;
+       lyxerr[Debug::GRAPHICS] << "LoaderQueue:  priority set to "
+                               << s_numimages_ << " images at a time, "
+                               << s_millisecs_ << " milliseconds between calls"
+                               << endl;
 }
 
-       
-void LoaderQueue::emptyBucket()
+
+LoaderQueue::LoaderQueue() : timer(s_millisecs_, Timeout::ONETIME),
+                            running_(false)
 {
-       lyxerr[Debug::GRAPHICS] << "LoaderQueue: emptying bucket" 
-                               << endl;
-       while (! bucket_.empty()) {
-               addToQueue(bucket_.front());
-               bucket_.pop();
-       }
+       timer.timeout.connect(boost::bind(&LoaderQueue::loadNext, this));
 }
 
 
@@ -71,6 +77,7 @@ void LoaderQueue::startLoader()
 {
        lyxerr[Debug::GRAPHICS] << "LoaderQueue: waking up" << endl;
        running_ = true ;
+       timer.setTimeout(s_millisecs_);
        timer.start();
 }
 
@@ -90,27 +97,22 @@ bool LoaderQueue::running() const
 
 
 void LoaderQueue::touch(Cache::ItemPtr const & item)
-{
-       if (! running_)
-               startLoader();
-       bucket_.push(item);
-}
-
-
-void LoaderQueue::addToQueue(Cache::ItemPtr const & item)
 {
        if (! cache_set_.insert(item).second) {
-               list<Cache::ItemPtr>::iterator 
+               list<Cache::ItemPtr>::iterator
                        it = cache_queue_.begin();
-               list<Cache::ItemPtr>::iterator 
+               list<Cache::ItemPtr>::iterator
                        end = cache_queue_.end();
-               
+
                it = std::find(it, end, item);
                if (it != end)
                        cache_queue_.erase(it);
-       } 
+       }
        cache_queue_.push_front(item);
+       if (!running_)
+               startLoader();
 }
 
 
-} // namespace grfx
+} // namespace graphics
+} // namespace lyx