3 * Copyright 2002 the LyX Team
4 * Read the file COPYING
6 * \author Angus Leeming <a.leeming@ic.ac.uk>
12 #pragma implementation
15 #include "PreviewImage.h"
16 #include "PreviewLoader.h"
17 #include "GraphicsImage.h"
18 #include "GraphicsLoader.h"
22 #include "support/lyxlib.h"
24 #include <boost/bind.hpp>
25 #include <boost/signals/trackable.hpp>
30 struct PreviewImage::Impl : public boost::signals::trackable {
32 Impl(PreviewImage & p, PreviewLoader & l,
33 string const & s, string const & f, double af);
37 Image const * image() const { return iloader_->image(); }
42 PreviewImage const & parent_;
44 PreviewLoader & ploader_;
46 boost::scoped_ptr<Loader> const iloader_;
48 string const snippet_;
50 double const ascent_frac_;
54 PreviewImage::PreviewImage(PreviewLoader & l,
58 : pimpl_(new Impl(*this, l, s, f, af))
62 PreviewImage::~PreviewImage()
66 void PreviewImage::startLoading()
68 return pimpl_->startLoading();
72 string const & PreviewImage::snippet() const
74 return pimpl_->snippet_;
77 int PreviewImage::ascent() const
79 Image const * const image = pimpl_->image();
83 return int(pimpl_->ascent_frac_ * double(image->getHeight()));
87 int PreviewImage::descent() const
89 Image const * const image = pimpl_->image();
93 return int((1.0 - pimpl_->ascent_frac_) * double(image->getHeight()));
97 int PreviewImage::width() const
99 Image const * const image = pimpl_->image();
100 return image ? image->getWidth() : 0;
104 Image const * PreviewImage::image() const
106 return pimpl_->image();
110 PreviewImage::Impl::Impl(PreviewImage & p, PreviewLoader & l,
114 : parent_(p), ploader_(l), iloader_(new Loader(bf)),
115 snippet_(s), ascent_frac_(af)
119 void PreviewImage::Impl::startLoading()
121 if (iloader_->status() != WaitingToLoad)
124 iloader_->statusChanged.connect(
125 boost::bind(&Impl::statusChanged, this));
126 iloader_->startLoading();
130 void PreviewImage::Impl::statusChanged()
132 switch (iloader_->status()) {
141 case ErrorConverting:
143 case ErrorGeneratingPixmap:
145 //lyx::unlink(iloader_->filename());
146 ploader_.remove(snippet_);
150 lyx::unlink(iloader_->filename());
151 ploader_.imageReady(parent_);