]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Fix clip monitor not activated on open: http://kdenlive.org/mantis/view.php?id=2992
[kdenlive] / src / projectlist.cpp
index 181cb96d82d8a1bb3c5f2d53b55e02ee3b4991d3..860b9b4383889b941964b48f3d576cc9265221dd 100644 (file)
@@ -2380,8 +2380,9 @@ void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Produce
         return;
     }
     if (replace) toReload = clipId;
-    if (!toReload.isEmpty())
+    if (!toReload.isEmpty()) {
         emit clipNeedsReload(toReload);
+    }
 }
 
 bool ProjectList::adjustProjectProfileToItem(ProjectItem *item)
@@ -2639,9 +2640,9 @@ KUrl::List ProjectList::getConditionalUrls(const QString &condition) const
     return result;
 }
 
-QStringList ProjectList::getConditionalIds(const QString &condition) const
+QMap <QString, QString> ProjectList::getConditionalIds(const QString &condition) const
 {
-    QStringList result;
+    QMap <QString, QString> result;
     ProjectItem *item;
     QList<QTreeWidgetItem *> list = m_listView->selectedItems();
     for (int i = 0; i < list.count(); i++) {
@@ -2662,7 +2663,7 @@ QStringList ProjectList::getConditionalIds(const QString &condition) const
             else if (condition.startsWith("acodec") && !clip->hasAudioCodec(condition.section('=', 1, 1)))
                 continue;
         }
-        result.append(item->clipId());
+        result.insert(item->clipId(), item->clipUrl().path());
     }
     return result;
 }
@@ -2968,14 +2969,14 @@ void ProjectList::slotCutClipJob(const QString &id, QPoint zone)
 void ProjectList::slotTranscodeClipJob(const QString &condition, QString params, QString desc)
 {
     QStringList existingFiles;
-    QStringList ids = getConditionalIds(condition);
+    QMap <QString, QString> ids = getConditionalIds(condition);
+    QMap<QString, QString>::const_iterator i = ids.constBegin();
     QStringList destinations;
-    foreach(const QString &id, ids) {
-        ProjectItem *item = getItemById(id);
-        if (!item) continue;
-        QString newFile = params.section(' ', -1).replace("%1", item->clipUrl().path());
-        destinations << newFile;
+    while (i != ids.constEnd()) {
+       QString newFile = params.section(' ', -1).replace("%1", i.value());
+       destinations << newFile;
         if (QFile::exists(newFile)) existingFiles << newFile;
+       ++i;
     }
     if (!existingFiles.isEmpty()) {
         if (KMessageBox::warningContinueCancelList(this, i18n("The transcoding job will overwrite the following files:"), existingFiles) ==  KMessageBox::Cancel) return;
@@ -3008,10 +3009,11 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
     params = ui.extra_params->toPlainText().simplified();
     KdenliveSettings::setAdd_new_clip(ui.add_clip->isChecked());
     int index = 0;
-    foreach(const QString &id, ids) {
-        ProjectItem *item = getItemById(id);
+    i = ids.constBegin();
+    while (i != ids.constEnd()) {
+        ProjectItem *item = getItemById(i.key());
         if (!item || !item->referencedClip()) continue;
-        QString src = item->clipUrl().path();
+        QString src = i.value();
         QString dest;
         if (ids.count() > 1) {
            dest = destinations.at(index);
@@ -3027,13 +3029,14 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
         jobParams << duration;
         jobParams << QString::number(KdenliveSettings::add_new_clip());
         jobParams << params;
-        CutClipJob *job = new CutClipJob(item->clipType(), id, jobParams);
+        CutClipJob *job = new CutClipJob(item->clipType(), i.key(), jobParams);
         if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
             delete job;
             continue;
         }
         m_jobList.append(job);
         setJobStatus(item, job->jobType, JOBWAITING, 0, job->statusMessage());
+       ++i;
     }
     delete d;
     slotCheckJobProcess();
@@ -3567,8 +3570,8 @@ void ProjectList::slotStartFilterJob(ItemInfo info, const QString&id, const QStr
     ProjectItem *item = getItemById(id);
     if (!item) return;
     QStringList jobParams;
-    jobParams << QString::number(info.cropStart.frames(m_fps)) << QString::number((info.cropStart + info.cropDuration).frames(m_fps));
-    jobParams << QString() << filterName << filterParams << consumer << consumerParams << QString::number(info.startPos.frames(m_fps)) << QString::number(info.track);
+    jobParams << QString::number((int) info.cropStart.frames(m_fps)) << QString::number((int) (info.cropStart + info.cropDuration).frames(m_fps));
+    jobParams << QString() << filterName << filterParams << consumer << consumerParams << QString::number((int) info.startPos.frames(m_fps)) << QString::number(info.track);
     MeltJob *job = new MeltJob(item->clipType(), id, jobParams, extraParams);
     if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
         delete job;
@@ -3582,19 +3585,25 @@ void ProjectList::slotStartFilterJob(ItemInfo info, const QString&id, const QStr
 
 void ProjectList::startClipFilterJob(const QString &filterName, const QString &condition)
 {
-    QStringList ids = getConditionalIds(condition);
-    QString destination;
-    ProjectItem *item = getItemById(ids.at(0));
+    QMap <QString, QString> ids = getConditionalIds(condition);
+    QStringList destination;
+    QMap<QString, QString>::const_iterator first = ids.constBegin();
+    if (first == ids.constEnd()) {
+       emit displayMessage(i18n("Cannot find clip to process filter %1", filterName), -2, ErrorMessage);
+        return;
+    }
+    ProjectItem *item = getItemById(first.key());
     if (!item) {
         emit displayMessage(i18n("Cannot find clip to process filter %1", filterName), -2, ErrorMessage);
         return;
     }
     if (ids.count() == 1) {
-        destination = item->clipUrl().path();
+        destination << item->clipUrl().path();
     }
     else {
-        destination = item->clipUrl().directory();
+        destination = ids.values();
     }
+    
     if (filterName == "motion_est") {
        // Show config dialog
        QPointer<QDialog> d = new QDialog(this);
@@ -3642,14 +3651,14 @@ void ProjectList::startClipFilterJob(const QString &filterName, const QString &c
            extraParams.insert("cutscenes", "1");
        }
        delete d;
-       processClipJob(ids, QString(), false, jobParams, i18n("Auto split"), extraParams);
+       processClipJob(ids.keys(), QString(), false, jobParams, i18n("Auto split"), extraParams);
     }
     else {
-       QPointer<ClipStabilize> d = new ClipStabilize(destination, ids.count(), filterName);
+       QPointer<ClipStabilize> d = new ClipStabilize(destination, filterName);
        if (d->exec() == QDialog::Accepted) {
            QMap <QString, QString> extraParams;
            extraParams.insert("producer_profile", "1");
-           processClipJob(ids, d->destination(), d->autoAddClip(), d->params(), d->desc(), extraParams);
+           processClipJob(ids.keys(), d->destination(), d->autoAddClip(), d->params(), d->desc(), extraParams);
        }
        delete d;
     }