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); } }
void BracketStackList::addItems(const KUrl::List& list) { if (list.count() == 0) return; KUrl::List urls; for ( KUrl::List::ConstIterator it = list.constBegin(); it != list.constEnd(); ++it ) { KUrl imageUrl = *it; // Check if the new item already exist in the list. bool found = false; QTreeWidgetItemIterator iter(this); while (*iter) { BracketStackItem* item = dynamic_cast<BracketStackItem*>(*iter); if (item->url() == imageUrl) found = true; ++iter; } if (!found) { BracketStackItem* item = new BracketStackItem(this); item->setUrl(imageUrl); item->setOn(true); urls.append(imageUrl); } } if (d->iface) { d->iface->thumbnails(urls, iconSize().width()); } else { #if KDE_IS_VERSION(4,7,0) KFileItemList items; for (KUrl::List::ConstIterator it = urls.begin() ; it != urls.end() ; ++it) { if ((*it).isValid()) items.append(KFileItem(KFileItem::Unknown, KFileItem::Unknown, *it, true)); } KIO::PreviewJob* job = KIO::filePreview(items, iconSize()); #else KIO::PreviewJob *job = KIO::filePreview(urls, iconSize().width()); #endif connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(slotKDEPreview(KFileItem,QPixmap))); connect(job, SIGNAL(failed(KFileItem)), this, SLOT(slotKDEPreviewFailed(KFileItem))); } emit signalAddItems(urls); }