]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Add center-crop option to slideshow clip.
[kdenlive] / src / projectlist.cpp
index 2850075dfa94fa499ab6590d8098de3cab9e2d4d..8b2d0aa5d1dc7a9f69f083a0f1cc690abc469833 100644 (file)
@@ -953,7 +953,7 @@ void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties)
             m_listView->blockSignals(false);
     }
     if (getProperties && !m_queueTimer.isActive())
-        m_queueTimer.start();
+        slotProcessNextClipInQueue();
 }
 
 void ProjectList::slotResetProjectList()
@@ -986,6 +986,7 @@ void ProjectList::slotProcessNextClipInQueue()
         m_infoQueue.remove(j.key());
         emit getFileProperties(dom, id, m_listView->iconSize().height(), false);
     }
+    if (!m_infoQueue.isEmpty()) m_queueTimer.start();
 }
 
 void ProjectList::slotUpdateClip(const QString &id)
@@ -1076,8 +1077,39 @@ void ProjectList::slotAddClip(const QList <QUrl> givenList, const QString &group
     if (givenList.isEmpty()) {
         QString allExtensions = getExtensions();
         const QString dialogFilter = allExtensions + ' ' + QLatin1Char('|') + i18n("All Supported Files") + "\n* " + QLatin1Char('|') + i18n("All Files");
-        list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), dialogFilter, this);
-
+        QCheckBox *b = new QCheckBox(i18n("Import image sequence"));
+        b->setChecked(KdenliveSettings::autoimagesequence());
+        KFileDialog *d = new KFileDialog(KUrl("kfiledialog:///clipfolder"), dialogFilter, this, b);
+        d->setOperationMode(KFileDialog::Opening);
+        d->setMode(KFile::Files);
+        d->exec();
+        list = d->selectedUrls();
+        if (b->isChecked() && list.count() == 1) {
+            // Check for image sequence
+            KUrl url = list.at(0);
+            QString fileName = url.fileName().section('.', 0, -2);
+            if (fileName.at(fileName.size() - 1).isDigit()) {
+                KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
+                if (item.mimetype().startsWith("image")) {
+                    int count = 0;
+                    // import as sequence if we found at least 5 images in the sequence
+                    QString pattern = SlideshowClip::selectedPath(url.path(), false, QString(), &count);
+                    if (count > 1) {
+                        delete d;
+                        QStringList groupInfo = getGroup();
+
+                        // get image sequence base name
+                        while (fileName.at(fileName.size() - 1).isDigit()) {
+                            fileName.chop(1);
+                        }
+
+                        m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()), false, false, false, m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0, groupInfo.at(0), groupInfo.at(1));
+                        return;
+                    }
+                }
+            }
+        }
+        delete d;
     } else {
         for (int i = 0; i < givenList.count(); i++)
             list << givenList.at(i);
@@ -1159,7 +1191,7 @@ void ProjectList::slotAddSlideshowClip()
 
     if (dia->exec() == QDialog::Accepted) {
         QStringList groupInfo = getGroup();
-        m_doc->slotCreateSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(),
+        m_doc->slotCreateSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->crop(), dia->fade(),
                                            dia->lumaDuration(), dia->lumaFile(), dia->softness(), groupInfo.at(0), groupInfo.at(1));
     }
     delete dia;
@@ -1269,7 +1301,7 @@ QDomElement ProjectList::producersList()
     QDomDocument doc;
     QDomElement prods = doc.createElement("producerlist");
     doc.appendChild(prods);
-    kDebug() << "////////////  PRO LIST BUILD PRDSLIST ";
+    kDebug() << "////////////  PRO LIST BUILD PRDSLIST ";
     QTreeWidgetItemIterator it(m_listView);
     while (*it) {
         if ((*it)->type() != PROJECTCLIPTYPE) {
@@ -1721,4 +1753,11 @@ void ProjectList::doUpdateClipCut(const QString &id, const QPoint oldzone, const
     emit projectModified();
 }
 
+void ProjectList::slotForceProcessing(const QString &id)
+{
+    while (m_infoQueue.contains(id)) {
+        slotProcessNextClipInQueue();
+    }
+}
+
 #include "projectlist.moc"