#include "support/lassert.h"
#include "support/unique_ptr.h"
-#include "support/bind.h"
#include "support/TempFile.h"
using namespace std;
namespace graphics {
-class CacheItem::Impl : public boost::signals2::trackable {
+class CacheItem::Impl {
public:
///
/**
* If no file conversion is needed, then tryDisplayFormat() calls
* loadImage() directly.
- * \return true if a conversion is necessary and no error occurred.
+ * \return true if a conversion is necessary and no error occurred.
*/
bool tryDisplayFormat(FileName & filename, string & from);
* file to this->imageConverted.
*
* convertToDisplayFormat() will set the loading status flag as
- * approriate through calls to setStatus().
+ * appropriate through calls to setStatus().
*/
void convertToDisplayFormat();
/// The filename we refer too.
FileName const filename_;
/// The document filename this graphic item belongs to
- FileName const & doc_file_;
+ FileName const doc_file_;
///
- FileMonitorPtr monitor_;
+ ActiveFileMonitorPtr monitor_;
/// Is the file compressed?
bool zipped_;
ImageStatus status_;
/// This signal is emitted when the image loading status changes.
- boost::signals2::signal<void()> statusChanged;
-
- /// The connection of the signal ConvProcess::finishedConversion,
- boost::signals2::connection cc_;
+ signals2::signal<void()> statusChanged;
///
unique_ptr<Converter> converter_;
}
+void CacheItem::checkModifiedAsync() const
+{
+ if (!pimpl_->monitor_)
+ return;
+ pimpl_->monitor_->checkModifiedAsync();
+}
+
+
Image const * CacheItem::image() const
{
return pimpl_->image_.get();
}
-boost::signals2::connection CacheItem::connect(slot_type const & slot) const
+signals2::connection CacheItem::connect(slot_type const & slot) const
{
return pimpl_->statusChanged.connect(slot);
}
{
if (monitor_)
return;
- monitor_ = FileSystemWatcher::monitor(filename_);
- monitor_->connect([=](){ startLoading(); });
+ monitor_ = FileSystemWatcher::activeMonitor(filename_);
+ // Disconnected at the same time as this is destroyed.
+ monitor_->connect([=](bool /* exists */){ startLoading(); });
}
status_ = WaitingToLoad;
- if (cc_.connected())
- cc_.disconnect();
-
if (converter_)
converter_.reset();
}
file_to_load_ = converter_ ? FileName(converter_->convertedFile())
: FileName();
converter_.reset();
- cc_.disconnect();
success = !file_to_load_.empty() && file_to_load_.isReadableFile();
// Connect a signal to this->imageConverted and pass this signal to
// the graphics converter so that we can load the modified file
// on completion of the conversion process.
- converter_ = make_unique<Converter>(doc_file_, filename, to_file_base.absFileName(),
+ converter_ = make_unique<Converter>(doc_file_, filename,
+ to_file_base.absFileName(),
from, to_);
- converter_->connect(bind(&Impl::imageConverted, this, _1));
+ // Connection is closed at the same time as *this is destroyed.
+ converter_->connect([this](bool success){
+ imageConverted(success);
+ });
converter_->startConversion();
}