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);
39 Image const * image() const { return iloader_->image(); }
44 PreviewImage const & parent_;
46 PreviewLoader & ploader_;
48 boost::scoped_ptr<Loader> const iloader_;
50 string const snippet_;
52 double const ascent_frac_;
56 PreviewImage::PreviewImage(PreviewLoader & l,
60 : pimpl_(new Impl(*this, l, s, f, af))
64 PreviewImage::~PreviewImage()
68 void PreviewImage::startLoading()
70 return pimpl_->startLoading();
74 string const & PreviewImage::snippet() const
76 return pimpl_->snippet_;
79 int PreviewImage::ascent() const
81 Image const * const image = pimpl_->image();
85 return int(pimpl_->ascent_frac_ * double(image->getHeight()));
89 int PreviewImage::descent() const
91 Image const * const image = pimpl_->image();
95 return int((1.0 - pimpl_->ascent_frac_) * double(image->getHeight()));
99 int PreviewImage::width() const
101 Image const * const image = pimpl_->image();
102 return image ? image->getWidth() : 0;
106 Image const * PreviewImage::image() const
108 return pimpl_->image();
112 PreviewImage::Impl::Impl(PreviewImage & p, PreviewLoader & l,
116 : parent_(p), ploader_(l), iloader_(new Loader(bf)),
117 snippet_(s), ascent_frac_(af)
121 PreviewImage::Impl::~Impl()
123 lyx::unlink(iloader_->filename());
127 void PreviewImage::Impl::startLoading()
129 if (iloader_->status() != WaitingToLoad)
132 iloader_->statusChanged.connect(
133 boost::bind(&Impl::statusChanged, this));
134 iloader_->startLoading();
138 void PreviewImage::Impl::statusChanged()
140 switch (iloader_->status()) {
149 case ErrorConverting:
151 case ErrorGeneratingPixmap:
153 //lyx::unlink(iloader_->filename());
154 ploader_.remove(snippet_);
158 lyx::unlink(iloader_->filename());
159 ploader_.imageReady(parent_);