KoShape *KPrPlaceholderPictureStrategy::createShape(KoDocumentResourceManager *rm) { KoShape * shape = 0; KUrl url = KFileDialog::getOpenUrl(); if ( !url.isEmpty() ) { shape = KPrPlaceholderStrategy::createShape(rm); KoImageCollection *collection = rm->imageCollection(); Q_ASSERT(collection); QString tmpFile; if (KIO::NetAccess::download(url, tmpFile, 0)) { QImage image(tmpFile); if (!image.isNull()) { //setSuffix(url.prettyUrl()); KoImageData *data = collection->createImageData(image); if (data->isValid()) { shape->setUserData( data ); // TODO the pic should be fit into the space provided shape->setSize( data->imageSize() ); } } } else { kWarning() << "open image " << url.prettyUrl() << "failed"; } } return shape; }
void KPrPicturesImport::pictureImported(KJob *job) { KoShape *shape = m_factory->createDefaultShape(); if (shape) { KIO::StoredTransferJob *transferJob = qobject_cast<KIO::StoredTransferJob*>(job); Q_ASSERT(transferJob); KoImageData *imageData = m_doc->resourceManager()->imageCollection()->createImageData(transferJob->data()); if (imageData->isValid()) { shape->setUserData(imageData); // make sure the picture fits on the page QSizeF imageSize = imageData->imageSize(); QSizeF pageSize = m_masterPage->size(); qreal zoom = 1; if (imageSize.width() > pageSize.width() || imageSize.height() > pageSize.height()) { zoom = pageSize.width() / imageSize.width(); zoom = qMin(zoom, pageSize.height() / imageSize.height()); } imageSize *= zoom; shape->setSize(imageSize); // center the picture on the page QPointF pos( pageSize.width() / 2- imageSize.width() / 2, pageSize.height() / 2 - imageSize.height() / 2 ); shape->setPosition(pos); KoPAPageBase *page = m_doc->newPage(m_masterPage); KoShapeLayer *layer = dynamic_cast<KoShapeLayer *>(page->shapes().first()); if (layer) { layer->addShape(shape); new KoPAPageInsertCommand(m_doc, page, m_currentPage, m_cmd); m_currentPage = page; } else { delete page; delete shape; } } else { kWarning(33001) << "imageData not valid"; delete shape; } } else { kWarning(33001) << "shape not created"; } import(); }