#include "support/debug.h"
#include "support/Timeout.h"
-#include <boost/bind.hpp>
+#include "support/bind.h"
#include <set>
#include <queue>
LoaderQueue::LoaderQueue() : timer(s_millisecs_, Timeout::ONETIME),
running_(false)
{
- timer.timeout.connect(boost::bind(&LoaderQueue::loadNext, this));
+ timer.timeout.connect(bind(&LoaderQueue::loadNext, this));
}
//
/////////////////////////////////////////////////////////////////////
-typedef boost::shared_ptr<Image> ImagePtr;
+typedef shared_ptr<Image> ImagePtr;
class Loader::Impl : public boost::signals::trackable {
public:
{}
-Loader::Loader(FileName const & file, DisplayType type)
+Loader::Loader(FileName const & file, bool display)
: pimpl_(new Impl)
{
- reset(file, type);
+ reset(file, display);
}
}
-void Loader::reset(FileName const & file, DisplayType type) const
+void Loader::reset(FileName const & file, bool display) const
{
Params params;
- params.display = type;
+ params.display = display;
pimpl_->resetParams(params);
pimpl_->resetFile(file);
}
+void Loader::reload() const
+{
+ pimpl_->cached_item_->startLoading();
+}
+
+
void Loader::startMonitoring() const
{
if (!pimpl_->cached_item_.get())
// signal needs to be disconnected.
sc_.disconnect();
cached_item_.reset();
- Cache::get().remove(old_file);
+ if (status_ != Converting) {
+ Cache::get().remove(old_file);
+ } else {
+ //TODO remove cache item when it is not busy any more, see #7163
+ }
}
status_ = cached_item_.get() ? cached_item_->status() : WaitingToLoad;
if (continue_monitoring && !cached_item_->monitoring())
cached_item_->startMonitoring();
- sc_ = cached_item_->connect(boost::bind(&Impl::statusChanged, this));
+ sc_ = cached_item_->connect(bind(&Impl::statusChanged, this));
}
void Loader::Impl::createPixmap()
{
- if (!cached_item_.get() ||
- params_.display == NoDisplay || status_ != Loaded)
+ if (!params_.display || status_ != Loaded)
return;
+ if (!cached_item_.get()) {
+ LYXERR(Debug::GRAPHICS, "pixmap not cached yet");
+ return;
+ }
+
+ if (!cached_item_->image()) {
+ // There must have been a problem reading the file.
+ LYXERR(Debug::GRAPHICS, "Graphics file not loaded.");
+ return;
+ }
+
image_.reset(cached_item_->image()->clone());
bool const success = image_->setPixmap(params_);
if (status_ != WaitingToLoad)
return;
- if (cached_item_->tryDisplayFormat())
+ if (cached_item_->tryDisplayFormat()) {
+ status_ = Loaded;
+ createPixmap();
return;
+ }
LoaderQueue::get().touch(cached_item_);
}