From 959c6ee8defd13d4f59620644044495ae19bb09d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 25 Oct 2011 20:21:21 +0000 Subject: [PATCH] Load zone thumbnails from disk if available svn path=/trunk/kdenlive/; revision=5992 --- src/projectlist.cpp | 25 ++++++++++++++++++++++++- src/projectlist.h | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 47a4afd2..bc8ff570 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -1200,6 +1200,26 @@ void ProjectList::getCachedThumbnail(ProjectItem *item) else requestClipThumbnail(item->clipId()); } +void ProjectList::getCachedThumbnail(SubProjectItem *item) +{ + if (!item) return; + ProjectItem *parentItem = static_cast (item->parent()); + if (!parentItem) return; + DocClipBase *clip = parentItem->referencedClip(); + if (!clip) return; + int pos = item->zone().x(); + QString cachedPixmap = m_doc->projectFolder().path(KUrl::AddTrailingSlash) + "thumbs/" + clip->getClipHash() + "#" + QString::number(pos) + ".png"; + if (QFile::exists(cachedPixmap)) { + QPixmap pix(cachedPixmap); + if (pix.isNull()) { + KIO::NetAccess::del(KUrl(cachedPixmap), this); + requestClipThumbnail(parentItem->clipId() + '#' + QString::number(pos)); + } + else item->setData(0, Qt::DecorationRole, pix); + } + else requestClipThumbnail(parentItem->clipId() + '#' + QString::number(pos)); +} + void ProjectList::updateAllClips(bool displayRatioChanged, bool fpsChanged) { m_listView->setSortingEnabled(false); @@ -1221,10 +1241,13 @@ void ProjectList::updateAllClips(bool displayRatioChanged, bool fpsChanged) if ((*it)->type() == PROJECTSUBCLIPTYPE) { // subitem SubProjectItem *sub = static_cast (*it); - if (displayRatioChanged || sub->data(0, Qt::DecorationRole).isNull()) { + if (displayRatioChanged) { item = static_cast ((*it)->parent()); requestClipThumbnail(item->clipId() + '#' + QString::number(sub->zone().x())); } + else if (sub->data(0, Qt::DecorationRole).isNull()) { + getCachedThumbnail(sub); + } ++it; continue; } else if ((*it)->type() == PROJECTFOLDERTYPE) { diff --git a/src/projectlist.h b/src/projectlist.h index f4a16f49..98b1a8ae 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -343,6 +343,7 @@ private: void setThumbnail(const QString &clipId, const QPixmap &pix); /** @brief Get cached thumbnail for a project's clip or create it if no cache. */ void getCachedThumbnail(ProjectItem *item); + void getCachedThumbnail(SubProjectItem *item); /** @brief The clip is about to be reloaded, cancel thumbnail requests. */ void resetThumbsProducer(DocClipBase *clip); -- 2.39.2