From 5963ec201afb2996f11ddbbf859d2dc96b1a1757 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 6 Apr 2010 01:03:10 +0000 Subject: [PATCH] Fix thumbnail creation in slideshow dialog: http://kdenlive.org/mantis/view.php?id=1546 svn path=/trunk/kdenlive/; revision=4371 --- src/kdenlivesettings.kcfg | 5 +++ src/slideshowclip.cpp | 63 +++++++++++++++++++++++-------- src/slideshowclip.h | 10 ++++- src/widgets/slideshowclip_ui.ui | 66 ++++++++++++++++++++++----------- src/widgets/titlewidget_ui.ui | 20 +++++----- 5 files changed, 116 insertions(+), 48 deletions(-) diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index 7ccf949c..f4d35385 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -509,5 +509,10 @@ + + + + false + diff --git a/src/slideshowclip.cpp b/src/slideshowclip.cpp index 37195a36..aa104542 100644 --- a/src/slideshowclip.cpp +++ b/src/slideshowclip.cpp @@ -25,6 +25,9 @@ #include #include +#include +#include + SlideshowClip::SlideshowClip(Timecode tc, QWidget * parent) : QDialog(parent), @@ -37,9 +40,12 @@ SlideshowClip::SlideshowClip(Timecode tc, QWidget * parent) : m_view.clip_name->setText(i18n("Slideshow Clip")); m_view.folder_url->setMode(KFile::Directory); m_view.icon_list->setIconSize(QSize(50, 50)); + m_view.show_thumbs->setChecked(KdenliveSettings::showslideshowthumbs()); + connect(m_view.folder_url, SIGNAL(textChanged(const QString &)), this, SLOT(parseFolder())); connect(m_view.image_type, SIGNAL(currentIndexChanged(int)), this, SLOT(parseFolder())); + connect(m_view.show_thumbs, SIGNAL(stateChanged(int)), this, SLOT(slotEnableThumbs(int))); connect(m_view.slide_fade, SIGNAL(stateChanged(int)), this, SLOT(slotEnableLuma(int))); connect(m_view.luma_fade, SIGNAL(stateChanged(int)), this, SLOT(slotEnableLumaFile(int))); @@ -106,6 +112,17 @@ void SlideshowClip::slotEnableLuma(int state) m_view.luma_softness->setEnabled(m_view.label_softness->isEnabled()); } +void SlideshowClip::slotEnableThumbs(int state) +{ + if (state == Qt::Checked) { + KdenliveSettings::setShowslideshowthumbs(true); + slotGenerateThumbs(); + } else { + KdenliveSettings::setShowslideshowthumbs(false); + } + +} + void SlideshowClip::slotEnableLumaFile(int state) { bool enable = false; @@ -137,28 +154,42 @@ void SlideshowClip::parseFolder() KIcon unknownicon("unknown"); foreach(const QString &path, result) { i++; - if (i < 80) { - QIcon icon(dir.filePath(path)); - item = new QListWidgetItem(icon, KUrl(path).fileName()); - } else { - item = new QListWidgetItem(unknownicon, KUrl(path).fileName()); - item->setData(Qt::UserRole, dir.filePath(path)); - } + item = new QListWidgetItem(unknownicon, KUrl(path).fileName()); + item->setData(Qt::UserRole, dir.filePath(path)); m_view.icon_list->addItem(item); } - if (m_count >= 80) connect(m_view.icon_list, SIGNAL(currentRowChanged(int)), this, SLOT(slotSetItemIcon(int))); + if (m_view.show_thumbs->isChecked()) slotGenerateThumbs(); m_view.icon_list->setCurrentRow(0); } -void SlideshowClip::slotSetItemIcon(int row) +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); + } +} + +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() { - QListWidgetItem * item = m_view.icon_list->item(row); - if (item) { - QString path = item->data(Qt::UserRole).toString(); - if (!path.isEmpty()) { - KIcon icon(path); - item->setIcon(icon); - item->setData(Qt::UserRole, QString()); + 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()) { + QString path = item->data(Qt::UserRole).toString(); + if (path.isEmpty()) continue; + else { + item->setIcon(KIcon(path)); + item->setData(Qt::UserRole, QString()); + break; + } } } } diff --git a/src/slideshowclip.h b/src/slideshowclip.h index d9b57172..83db3d81 100644 --- a/src/slideshowclip.h +++ b/src/slideshowclip.h @@ -27,6 +27,9 @@ #include "timecode.h" #include "ui_slideshowclip_ui.h" +#include +#include + class SlideshowClip : public QDialog { Q_OBJECT @@ -47,14 +50,19 @@ public: private slots: void parseFolder(); void slotEnableLuma(int state); + void slotEnableThumbs(int state); void slotEnableLumaFile(int state); - void slotSetItemIcon(int row); + void doGetThumbs(); void slotUpdateDurationFormat(int ix); + void slotGenerateThumbs(); + void slotCheckGenerateThumbs(); private: Ui::SlideshowClip_UI m_view; int m_count; Timecode m_timecode; + QFuture m_future; + QFutureWatcher m_watcher; }; diff --git a/src/widgets/slideshowclip_ui.ui b/src/widgets/slideshowclip_ui.ui index 9fb045d8..0948951f 100644 --- a/src/widgets/slideshowclip_ui.ui +++ b/src/widgets/slideshowclip_ui.ui @@ -6,7 +6,7 @@ 0 0 - 275 + 268 359 @@ -81,7 +81,7 @@ - + Loop @@ -172,13 +172,37 @@ - - - No image found - - + + + + + Show thumbnails + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + No image found + + + + - + Qt::Horizontal @@ -191,36 +215,36 @@ - - KComboBox - QComboBox -
kcombobox.h
-
KIntSpinBox QSpinBox
knuminput.h
- KLineEdit - QLineEdit -
klineedit.h
+ KUrlRequester + QFrame +
kurlrequester.h
KListWidget QListWidget
klistwidget.h
+ + KLineEdit + QLineEdit +
klineedit.h
+
+ + KComboBox + QComboBox +
kcombobox.h
+
KRestrictedLine KLineEdit
krestrictedline.h
- - KUrlRequester - QFrame -
kurlrequester.h
-
diff --git a/src/widgets/titlewidget_ui.ui b/src/widgets/titlewidget_ui.ui index d8182999..4a2b5170 100644 --- a/src/widgets/titlewidget_ui.ui +++ b/src/widgets/titlewidget_ui.ui @@ -6,8 +6,8 @@ 0 0 - 1383 - 835 + 986 + 621 @@ -552,14 +552,14 @@
- + 0 0 0 - + 0 0 @@ -785,14 +785,14 @@ - + 0 0 0 - + 0 0 @@ -820,14 +820,14 @@ - + 0 0 0 - + 0 0 @@ -900,14 +900,14 @@ false - + 0 0 0 - + 0 0 -- 2.39.2