]> git.sesse.net Git - kdenlive/commitdiff
Warn before overwriting stabilized clip
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 17 Feb 2013 12:41:26 +0000 (13:41 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 17 Feb 2013 12:41:26 +0000 (13:41 +0100)
src/clipstabilize.cpp
src/clipstabilize.h
src/mainwindow.cpp
src/projectlist.cpp
src/projectlist.h
src/widgets/clipstabilize_ui.ui

index dcfd55c47404459eeb1b0b2ff429a58a85984b6d..62422fa3fad6f0601032c8cfe1f013c4a9ef4e7f 100644 (file)
 #include <QSlider>
 #include <KFileDialog>
 
-ClipStabilize::ClipStabilize(const QString &dest, int count, const QString &filterName,QWidget * parent) :
+ClipStabilize::ClipStabilize(const QStringList &urls, const QString &filterName,QWidget * parent) :
         QDialog(parent), 
         m_filtername(filterName),
-        m_count(count),
+        m_urls(urls),
         vbox(NULL)
 {
     setFont(KGlobalSettings::toolBarFont());
     setupUi(this);
     setWindowTitle(i18n("Stabilize Clip"));
-    auto_add->setText(i18np("Add clip to project", "Add clips to project", count));
+    auto_add->setText(i18np("Add clip to project", "Add clips to project", urls.count()));
     auto_add->setChecked(KdenliveSettings::add_new_clip());
 
     QPalette p = palette();
@@ -61,8 +61,8 @@ ClipStabilize::ClipStabilize(const QString &dest, int count, const QString &filt
             .arg(dark_bg.name()).arg(selected_bg.name()).arg(hover_bg.name()).arg(light_bg.name()));
     setStyleSheet(stylesheet);
 
-    if (m_count == 1) {
-        QString newFile = dest;
+    if (m_urls.count() == 1) {
+        QString newFile = m_urls.first();
         newFile.append(".mlt");
         KUrl dest(newFile);
         dest_url->setMode(KFile::File);
@@ -71,7 +71,7 @@ ClipStabilize::ClipStabilize(const QString &dest, int count, const QString &filt
     } else {
         label_dest->setText(i18n("Destination folder"));
         dest_url->setMode(KFile::Directory);
-        dest_url->setUrl(KUrl(dest));
+        dest_url->setUrl(KUrl(KUrl(m_urls.first()).directory()));
         dest_url->fileDialog()->setOperationMode(KFileDialog::Saving);
     }
 
@@ -102,7 +102,7 @@ ClipStabilize::ClipStabilize(const QString &dest, int count, const QString &filt
 
     }
 
-    //connect(buttonBox,SIGNAL(rejected()), this, SLOT(slotAbortStabilize()));
+    connect(buttonBox->button(QDialogButtonBox::Ok),SIGNAL(clicked()), this, SLOT(slotValidate()));
 
     vbox=new QVBoxLayout(optionsbox);
     QHashIterator<QString,QHash<QString,QString> > hi(m_ui_params);
@@ -165,7 +165,7 @@ QStringList ClipStabilize::params()
 
 QString ClipStabilize::destination() const
 {
-    if (m_count == 1)
+    if (m_urls.count() == 1)
         return dest_url->url().path();
     else
         return dest_url->url().path(KUrl::AddTrailingSlash);
@@ -274,6 +274,27 @@ void ClipStabilize::fillParameters(QStringList lst)
 
 }
 
+void ClipStabilize::slotValidate()
+{
+    if (m_urls.count() == 1) {
+       if (QFile::exists(dest_url->url().path())) {
+           if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", dest_url->url().path() )) == KMessageBox::No) return;
+       }
+    }
+    else {
+       KUrl folder(dest_url->url());
+       QStringList existingFiles;
+       foreach(const QString &path, m_urls) {
+           KUrl dest = folder;
+           dest.addPath(KUrl(path).fileName());
+           if (QFile::exists(dest.path() + ".mlt")) existingFiles.append(dest.path() + ".mlt");
+       }
+       if (!existingFiles.isEmpty()) {
+           if (KMessageBox::warningContinueCancelList(this, i18n("The stabilize job will overwrite the following files:"), existingFiles) ==  KMessageBox::Cancel) return;
+       }
+    }
+    accept();
+}
 
 #include "clipstabilize.moc"
 
index b09969ae3c3474efcd237406263f7e9c3f599cc3..3b709ca444603ecd118c82bdaa1fbd66cb5aff53 100644 (file)
@@ -42,7 +42,7 @@ class ClipStabilize : public QDialog, public Ui::ClipStabilize_UI
     Q_OBJECT
 
 public:
-    ClipStabilize(const QString &dest, int count, const QString &filterName,QWidget * parent = 0);
+    ClipStabilize(const QStringList &urls, const QString &filterName,QWidget * parent = 0);
     ~ClipStabilize();
     /** @brief Should the generated clip be added to current project. */
     bool autoAddClip() const;
@@ -57,10 +57,11 @@ public:
 private slots:
     void slotStartStabilize();
     void slotUpdateParams();
+    void slotValidate();
 
 private:
     QString m_filtername;
-    int m_count;
+    QStringList m_urls;
     QHash<QString,QHash<QString,QString> > m_ui_params;
     QVBoxLayout *vbox;
     void fillParameters(QStringList);
index 3ff94d36b0ea53e738910ea7fdc2a3aac89ea5a9..acb2d2d4ee31fb9bb58d0bbf7c1eaaac259af247 100644 (file)
@@ -4058,22 +4058,6 @@ void MainWindow::slotStartClipAction()
         filtername=action->data().toString();
     }
     m_projectList->startClipFilterJob(filtername, condition);
-    /*
-    if (ids.isEmpty()) {
-        m_messageLabel->setMessage(i18n("No clip to transcode"), ErrorMessage);
-        return;
-    }
-    QString destination;
-    ProjectItem *item = m_projectList->getClipById(ids.at(0));
-    if (ids.count() == 1) {
-
-    }
-    ClipStabilize *d = new ClipStabilize(destination, ids.count(), filtername);
-    //connect(d, SIGNAL(addClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl)));
-    if (d->exec() == QDialog::Accepted) {
-        m_projectList->slotStabilizeClipJob(ids, d->autoAddClip(), d->params(), d->desc());
-    }
-    delete d;*/
 }
 
 void MainWindow::slotTranscode(KUrl::List urls)
index 881e194939d6cae00a03922cf725f3d50f24c458..cd8dc2fbd8acd7c674b1f5d45155024244c26e61 100644 (file)
@@ -2639,9 +2639,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 +2662,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 +2968,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;
@@ -3582,19 +3582,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 +3648,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;
     }
index 021058dc32f10dd34dcaa8a97012bded68e4a63f..6f763906afc9b7f409d54629eac8ce2791427967 100644 (file)
@@ -242,8 +242,8 @@ public:
     void setupGeneratorMenu(const QHash<QString,QMenu*>& menus);
     QString currentClipUrl() const;
     KUrl::List getConditionalUrls(const QString &condition) const;
-    /** @brief Get a list of selected clip Id's that match a condition. */
-    QStringList getConditionalIds(const QString &condition) const;
+    /** @brief Get a list of selected clip Id's and url's that match a condition. */
+    QMap <QString, QString> getConditionalIds(const QString &condition) const;
     QDomDocument generateTemplateXml(QString data, const QString &replaceString);
     void cleanup();
     void trashUnusedClips();
index 10d8e1914c83374ba0bcc9f025a0bed47a7f4183..349334b0a01a752b27d7c53fb97c518d4398f689 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>290</width>
-    <height>122</height>
+    <width>304</width>
+    <height>125</height>
    </rect>
   </property>
   <property name="windowTitle">
  </customwidgets>
  <resources/>
  <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ClipStabilize_UI</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
   <connection>
    <sender>buttonBox</sender>
    <signal>rejected()</signal>