]> git.sesse.net Git - kdenlive/blobdiff - src/slideshowclip.cpp
Show the track type in add track dialog through icons in the track list
[kdenlive] / src / slideshowclip.cpp
index aa1045427ff490d5ab37d06d7d58dc3aebf4cec3..e4557ab07e2a5dd7abce223f1337d2fedc0380d9 100644 (file)
 #include <KFileItem>
 
 #include <QDir>
-#include <QtConcurrentRun>
-#include <QFutureWatcher>
 
 
 SlideshowClip::SlideshowClip(Timecode tc, QWidget * parent) :
         QDialog(parent),
         m_count(0),
-        m_timecode(tc)
+        m_timecode(tc),
+        m_thumbJob(NULL)
 {
     setFont(KGlobalSettings::toolBarFont());
     setWindowTitle(i18n("Add Slideshow Clip"));
@@ -59,9 +58,11 @@ SlideshowClip::SlideshowClip(Timecode tc, QWidget * parent) :
     m_view.image_type->addItem("TIFF (*.tiff)", "tiff");
     m_view.image_type->addItem("Open EXR (*.exr)", "exr");
 
-    m_view.clip_duration->setInputMask(m_timecode.inputMask());
+    m_view.clip_duration->setInputMask("");
+    m_view.clip_duration->setValidator(m_timecode.validator());
     m_view.clip_duration->setText(m_timecode.reformatSeparators(KdenliveSettings::image_duration()));
-    m_view.luma_duration->setInputMask(m_timecode.inputMask());
+    m_view.luma_duration->setInputMask("");
+    m_view.luma_duration->setValidator(m_timecode.validator());
     m_view.luma_duration->setText(m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))));
     m_view.folder_url->setUrl(QDir::homePath());
 
@@ -98,6 +99,13 @@ SlideshowClip::SlideshowClip(Timecode tc, QWidget * parent) :
     //adjustSize();
 }
 
+SlideshowClip::~SlideshowClip()
+{
+    if (m_thumbJob) {
+        delete m_thumbJob;
+    }
+}
+
 void SlideshowClip::slotEnableLuma(int state)
 {
     bool enable = false;
@@ -119,6 +127,11 @@ void SlideshowClip::slotEnableThumbs(int state)
         slotGenerateThumbs();
     } else {
         KdenliveSettings::setShowslideshowthumbs(false);
+        if (m_thumbJob) {
+            disconnect(m_thumbJob, SIGNAL(gotPreview(const KFileItem &, const QPixmap &)), this, SLOT(slotSetPixmap(const KFileItem &, const QPixmap &)));
+            m_thumbJob->kill();
+            m_thumbJob = NULL;
+        }
     }
 
 }
@@ -136,7 +149,6 @@ void SlideshowClip::parseFolder()
 {
     m_view.icon_list->clear();
     QDir dir(m_view.folder_url->url().path());
-
     QStringList filters;
     QString filter = m_view.image_type->itemData(m_view.image_type->currentIndex()).toString();
     filters << "*." + filter;
@@ -164,29 +176,33 @@ void SlideshowClip::parseFolder()
 
 void SlideshowClip::slotGenerateThumbs()
 {
-    if (!m_future.isRunning()) {
-        connect(&m_watcher, SIGNAL(finished()), this, SLOT(slotCheckGenerateThumbs()));
-        m_future = QtConcurrent::run(this, &SlideshowClip::doGetThumbs);
-        m_watcher.setFuture(m_future);
+    if (m_thumbJob) {
+        delete m_thumbJob;
+    };
+    KFileItemList fileList;
+    for (int i = 0; i < m_view.icon_list->count(); i++) {
+        QListWidgetItem* item = m_view.icon_list->item(i);
+        if (item) {
+            QString path = item->data(Qt::UserRole).toString();
+            if (!path.isEmpty()) {
+                fileList.append(KFileItem(KFileItem::Unknown, KFileItem::Unknown, KUrl(path)));
+            }
+        }
     }
+    m_thumbJob = new KIO::PreviewJob(fileList, 50, 0, 0, 0, true, true, 0);
+    m_thumbJob->setAutoDelete(false);
+    connect(m_thumbJob, SIGNAL(gotPreview(const KFileItem &, const QPixmap &)), this, SLOT(slotSetPixmap(const KFileItem &, const QPixmap &)));
+    m_thumbJob->start();
 }
 
-void SlideshowClip::slotCheckGenerateThumbs()
-{
-    QListWidgetItem* item = m_view.icon_list->item(m_view.icon_list->count() - 1);
-    if (!item || item->data(Qt::UserRole).toString().isEmpty() || m_view.show_thumbs->isChecked() == false) return;
-    QTimer::singleShot(300, this, SLOT(slotGenerateThumbs()));
-}
-
-void SlideshowClip::doGetThumbs()
+void SlideshowClip::slotSetPixmap(const KFileItem &fileItem, const QPixmap &pix)
 {
     for (int i = 0; i < m_view.icon_list->count(); i++) {
         QListWidgetItem* item = m_view.icon_list->item(i);
-        if (item && m_view.show_thumbs->isChecked()) {
+        if (item) {
             QString path = item->data(Qt::UserRole).toString();
-            if (path.isEmpty()) continue;
-            else {
-                item->setIcon(KIcon(path));
+            if (path == fileItem.url().path()) {
+                item->setIcon(KIcon(pix));
                 item->setData(Qt::UserRole, QString());
                 break;
             }
@@ -194,6 +210,7 @@ void SlideshowClip::doGetThumbs()
     }
 }
 
+
 QString SlideshowClip::selectedPath() const
 {
     QString extension = "/.all." + m_view.image_type->itemData(m_view.image_type->currentIndex()).toString();
@@ -259,9 +276,11 @@ void SlideshowClip::slotUpdateDurationFormat(int ix)
         m_view.luma_duration_frames->setValue(m_timecode.getFrameCount(m_view.luma_duration->text()));
     } else {
         // switching to timecode format
-        m_view.clip_duration->setInputMask(m_timecode.inputMask());
+        m_view.clip_duration->setInputMask("");
+        m_view.clip_duration->setValidator(m_timecode.validator());
         m_view.clip_duration->setText(m_timecode.getTimecodeFromFrames(m_view.clip_duration_frames->value()));
-        m_view.luma_duration->setInputMask(m_timecode.inputMask());
+        m_view.luma_duration->setInputMask("");
+        m_view.luma_duration->setValidator(m_timecode.validator());
         m_view.luma_duration->setText(m_timecode.getTimecodeFromFrames(m_view.luma_duration_frames->value()));
     }
     m_view.clip_duration_frames->setHidden(!framesFormat);