]> git.sesse.net Git - kdenlive/commitdiff
Load zone thumbnails from disk if available
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 25 Oct 2011 20:21:21 +0000 (20:21 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 25 Oct 2011 20:21:21 +0000 (20:21 +0000)
svn path=/trunk/kdenlive/; revision=5992

src/projectlist.cpp
src/projectlist.h

index 47a4afd234975b08241ae511049eb2c045cfbbeb..bc8ff570b0cd341c9253dc2b0905b421de1d8f03 100644 (file)
@@ -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 <ProjectItem *>(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 <SubProjectItem *>(*it);
-            if (displayRatioChanged || sub->data(0, Qt::DecorationRole).isNull()) {
+            if (displayRatioChanged) {
                 item = static_cast <ProjectItem *>((*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) {
index f4a16f49d1188282d95a79e96a96b47eb42468e3..98b1a8ae8fa6788c2256e1cfa30d4640cdbbae28 100644 (file)
@@ -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);