void KPImageDialogPreview::showPreview(const QUrl& url) { if (!url.isValid()) { clearPreview(); return; } if (url != d->currentUrl) { QString make, model, dateTime, aperture, focalLength, exposureTime, sensitivity; QString unavailable(i18n("<i>unavailable</i>")); clearPreview(); d->currentUrl = url; if (d->iface) { d->iface->thumbnail(d->currentUrl, 256); } else { qCDebug(KIPIPLUGINS_LOG) << "No KIPI interface available : thumbnails will not generated."; } // Try to use Metadata Processor from KIPI host to identify image. if (d->meta && d->meta->load(d->currentUrl) && (d->meta->hasExif() || d->meta->hasXmp())) { make = d->meta->getExifTagString(QLatin1String("Exif.Image.Make")); if (make.isEmpty()) make = d->meta->getXmpTagString(QLatin1String("Xmp.tiff.Make")); model = d->meta->getExifTagString(QLatin1String("Exif.Image.Model")); if (model.isEmpty()) model = d->meta->getXmpTagString(QLatin1String("Xmp.tiff.Model")); if (d->meta->getImageDateTime().isValid()) dateTime = QLocale().toString(d->meta->getImageDateTime(), QLocale::ShortFormat); aperture = d->meta->getExifTagString(QLatin1String("Exif.Photo.FNumber")); if (aperture.isEmpty()) { aperture = d->meta->getExifTagString(QLatin1String("Exif.Photo.ApertureValue")); if (aperture.isEmpty()) { aperture = d->meta->getXmpTagString(QLatin1String("Xmp.exif.FNumber")); if (aperture.isEmpty()) aperture = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ApertureValue")); } } focalLength = d->meta->getExifTagString(QLatin1String("Exif.Photo.FocalLength")); if (focalLength.isEmpty()) focalLength = d->meta->getXmpTagString(QLatin1String("Xmp.exif.FocalLength")); exposureTime = d->meta->getExifTagString(QLatin1String("Exif.Photo.ExposureTime")); if (exposureTime.isEmpty()) { exposureTime = d->meta->getExifTagString(QLatin1String("Exif.Photo.ShutterSpeedValue")); if (exposureTime.isEmpty()) { exposureTime = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ExposureTime")); if (exposureTime.isEmpty()) exposureTime = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ShutterSpeedValue")); } } sensitivity = d->meta->getExifTagString(QLatin1String("Exif.Photo.ISOSpeedRatings")); if (sensitivity.isEmpty()) { sensitivity = d->meta->getExifTagString(QLatin1String("Exif.Photo.ExposureIndex")); if (sensitivity.isEmpty()) { sensitivity = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ISOSpeedRatings")); if (sensitivity.isEmpty()) sensitivity = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ExposureIndex")); } } } if (make.isEmpty()) make = unavailable; if (model.isEmpty()) model = unavailable; if (dateTime.isEmpty()) dateTime = unavailable; if (aperture.isEmpty()) aperture = unavailable; if (focalLength.isEmpty()) focalLength = unavailable; if (exposureTime.isEmpty()) exposureTime = unavailable; if (sensitivity.isEmpty()) sensitivity = unavailable; else sensitivity = i18n("%1 ISO", sensitivity); QString identify(QString::fromLatin1("<qt><center>")); QString cellBeg(QString::fromLatin1("<tr><td><nobr><font size=-1>")); QString cellMid(QString::fromLatin1("</font></nobr></td><td><nobr><font size=-1>")); QString cellEnd(QString::fromLatin1("</font></nobr></td></tr>")); identify += QString::fromLatin1("<table cellspacing=0 cellpadding=0>"); identify += cellBeg + i18n("<i>Make:</i>") + cellMid + make + cellEnd; identify += cellBeg + i18n("<i>Model:</i>") + cellMid + model + cellEnd; identify += cellBeg + i18n("<i>Created:</i>") + cellMid + dateTime + cellEnd; identify += cellBeg + i18n("<i>Aperture:</i>") + cellMid + aperture + cellEnd; identify += cellBeg + i18n("<i>Focal:</i>") + cellMid + focalLength + cellEnd; identify += cellBeg + i18n("<i>Exposure:</i>") + cellMid + exposureTime + cellEnd; identify += cellBeg + i18n("<i>Sensitivity:</i>") + cellMid + sensitivity + cellEnd; identify += QString::fromLatin1("</table></center></qt>"); d->infoLabel->setText(identify); } }
void KPImageDialogPreview::showPreview(const KUrl& url) { if (!url.isValid()) { clearPreview(); return; } if (url != d->currentUrl) { QString make, model, dateTime, aperture, focalLength, exposureTime, sensitivity; QString unavailable(i18n("<i>unavailable</i>")); clearPreview(); d->currentUrl = url; if (d->iface) { d->iface->thumbnail(d->currentUrl, 256); } else { if ( !d->currentUrl.isValid() ) return; #if KDE_IS_VERSION(4,7,0) KFileItemList items; items.append(KFileItem(KFileItem::Unknown, KFileItem::Unknown, d->currentUrl, true)); KIO::PreviewJob* job = KIO::filePreview(items, QSize(256, 256)); #else KIO::PreviewJob* job = KIO::filePreview(d->currentUrl, 256); #endif connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(slotKDEPreview(KFileItem,QPixmap))); connect(job, SIGNAL(failed(KFileItem)), this, SLOT(slotKDEPreviewFailed(KFileItem))); } // Try to use libkexiv2 to identify image. if (d->metaIface.load(d->currentUrl.path()) && (d->metaIface.hasExif() || d->metaIface.hasXmp())) { make = d->metaIface.getExifTagString("Exif.Image.Make"); if (make.isEmpty()) make = d->metaIface.getXmpTagString("Xmp.tiff.Make"); model = d->metaIface.getExifTagString("Exif.Image.Model"); if (model.isEmpty()) model = d->metaIface.getXmpTagString("Xmp.tiff.Model"); if (d->metaIface.getImageDateTime().isValid()) dateTime = KGlobal::locale()->formatDateTime(d->metaIface.getImageDateTime(), KLocale::ShortDate, true); aperture = d->metaIface.getExifTagString("Exif.Photo.FNumber"); if (aperture.isEmpty()) { aperture = d->metaIface.getExifTagString("Exif.Photo.ApertureValue"); if (aperture.isEmpty()) { aperture = d->metaIface.getXmpTagString("Xmp.exif.FNumber"); if (aperture.isEmpty()) aperture = d->metaIface.getXmpTagString("Xmp.exif.ApertureValue"); } } focalLength = d->metaIface.getExifTagString("Exif.Photo.FocalLength"); if (focalLength.isEmpty()) focalLength = d->metaIface.getXmpTagString("Xmp.exif.FocalLength"); exposureTime = d->metaIface.getExifTagString("Exif.Photo.ExposureTime"); if (exposureTime.isEmpty()) { exposureTime = d->metaIface.getExifTagString("Exif.Photo.ShutterSpeedValue"); if (exposureTime.isEmpty()) { exposureTime = d->metaIface.getXmpTagString("Xmp.exif.ExposureTime"); if (exposureTime.isEmpty()) exposureTime = d->metaIface.getXmpTagString("Xmp.exif.ShutterSpeedValue"); } } sensitivity = d->metaIface.getExifTagString("Exif.Photo.ISOSpeedRatings"); if (sensitivity.isEmpty()) { sensitivity = d->metaIface.getExifTagString("Exif.Photo.ExposureIndex"); if (sensitivity.isEmpty()) { sensitivity = d->metaIface.getXmpTagString("Xmp.exif.ISOSpeedRatings"); if (sensitivity.isEmpty()) sensitivity = d->metaIface.getXmpTagString("Xmp.exif.ExposureIndex"); } } } else { // Try to use libkdcraw interface to identify image. DcrawInfoContainer info; KDcraw dcrawIface; dcrawIface.rawFileIdentify(info, d->currentUrl.path()); if (info.isDecodable) { if (!info.make.isEmpty()) make = info.make; if (!info.model.isEmpty()) model = info.model; if (info.dateTime.isValid()) dateTime = KGlobal::locale()->formatDateTime(info.dateTime, KLocale::ShortDate, true); if (info.aperture != -1.0) aperture = QString::number(info.aperture); if (info.focalLength != -1.0) focalLength = QString::number(info.focalLength); if (info.exposureTime != -1.0) exposureTime = QString::number(info.exposureTime); if (info.sensitivity != -1) sensitivity = QString::number(info.sensitivity); } else { d->infoLabel->clear(); return; } } if (make.isEmpty()) make = unavailable; if (model.isEmpty()) model = unavailable; if (dateTime.isEmpty()) dateTime = unavailable; if (aperture.isEmpty()) aperture = unavailable; if (focalLength.isEmpty()) focalLength = unavailable; if (exposureTime.isEmpty()) exposureTime = unavailable; if (sensitivity.isEmpty()) sensitivity = unavailable; else sensitivity = i18n("%1 ISO", sensitivity); QString identify("<qt><center>"); QString cellBeg("<tr><td><nobr><font size=-1>"); QString cellMid("</font></nobr></td><td><nobr><font size=-1>"); QString cellEnd("</font></nobr></td></tr>"); identify += "<table cellspacing=0 cellpadding=0>"; identify += cellBeg + i18n("<i>Make:</i>") + cellMid + make + cellEnd; identify += cellBeg + i18n("<i>Model:</i>") + cellMid + model + cellEnd; identify += cellBeg + i18n("<i>Created:</i>") + cellMid + dateTime + cellEnd; identify += cellBeg + i18n("<i>Aperture:</i>") + cellMid + aperture + cellEnd; identify += cellBeg + i18n("<i>Focal:</i>") + cellMid + focalLength + cellEnd; identify += cellBeg + i18n("<i>Exposure:</i>") + cellMid + exposureTime + cellEnd; identify += cellBeg + i18n("<i>Sensitivity:</i>") + cellMid + sensitivity + cellEnd; identify += "</table></center></qt>"; d->infoLabel->setText(identify); } }