QByteArray KstViewObjectImageDrag::encodedData(const char *mimeType) const { if (!_mimeTypes.contains(QString::fromLatin1(mimeType))) { return QByteArray(); } QRect geom(0, 0, 0, 0); for (KstViewObjectList::ConstIterator i = _objects.begin(); i != _objects.end(); ++i) { geom = geom.unite((*i)->geometry()); } QPixmap pm; pm.resize(geom.size()); pm.fill(); int prog = 0; bool cancelled = false; KstPainter p(KstPainter::P_EXPORT); p.begin(&pm); p.setClipping(true); KProgressDialog *dlg = new KProgressDialog(0, 0, QString::null, i18n("Generating and storing images of objects..."), true); dlg->setAllowCancel(true); dlg->progressBar()->setTotalSteps(_objects.count()); dlg->progressBar()->setValue(prog); dlg->show(); for (KstViewObjectList::Iterator i = _objects.begin(); i != _objects.end(); ++i) { p.setClipRect((*i)->geometry()); p.setViewport((*i)->geometry()); (*i)->paint(p, QRegion()); if (dlg->wasCancelled()) { cancelled = true; break; } dlg->progressBar()->setValue(++prog); kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers); } p.end(); delete dlg; if (cancelled) { return QByteArray(); } QByteArray rc; #if QT_VERSION < 0x030200 KTempFile tf; pm.save(tf.name(), KImageIO::typeForMime(mimeType).latin1()); tf.close(); QFile f(tf.name()); if (f.open(IO_ReadOnly)) { rc = f.readAll(); f.close(); } QFile::remove(tf.name()); #else QDataStream ds(rc, IO_WriteOnly); pm.save(ds.device(), KImageIO::typeForMime(mimeType).latin1()); #endif return rc; }