From: Jean-Baptiste Mardelle Date: Sun, 17 Feb 2013 12:41:26 +0000 (+0100) Subject: Warn before overwriting stabilized clip X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c1b370c98c7148e2b7f7c9d964bf90fc0621b6e2;p=kdenlive Warn before overwriting stabilized clip --- diff --git a/src/clipstabilize.cpp b/src/clipstabilize.cpp index dcfd55c4..62422fa3 100644 --- a/src/clipstabilize.cpp +++ b/src/clipstabilize.cpp @@ -33,16 +33,16 @@ #include #include -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 > 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" diff --git a/src/clipstabilize.h b/src/clipstabilize.h index b09969ae..3b709ca4 100644 --- a/src/clipstabilize.h +++ b/src/clipstabilize.h @@ -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 > m_ui_params; QVBoxLayout *vbox; void fillParameters(QStringList); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3ff94d36..acb2d2d4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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) diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 881e1949..cd8dc2fb 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -2639,9 +2639,9 @@ KUrl::List ProjectList::getConditionalUrls(const QString &condition) const return result; } -QStringList ProjectList::getConditionalIds(const QString &condition) const +QMap ProjectList::getConditionalIds(const QString &condition) const { - QStringList result; + QMap result; ProjectItem *item; QList 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 ids = getConditionalIds(condition); + QMap::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 ids = getConditionalIds(condition); + QStringList destination; + QMap::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 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 d = new ClipStabilize(destination, ids.count(), filterName); + QPointer d = new ClipStabilize(destination, filterName); if (d->exec() == QDialog::Accepted) { QMap 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; } diff --git a/src/projectlist.h b/src/projectlist.h index 021058dc..6f763906 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -242,8 +242,8 @@ public: void setupGeneratorMenu(const QHash& 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 getConditionalIds(const QString &condition) const; QDomDocument generateTemplateXml(QString data, const QString &replaceString); void cleanup(); void trashUnusedClips(); diff --git a/src/widgets/clipstabilize_ui.ui b/src/widgets/clipstabilize_ui.ui index 10d8e191..349334b0 100644 --- a/src/widgets/clipstabilize_ui.ui +++ b/src/widgets/clipstabilize_ui.ui @@ -6,8 +6,8 @@ 0 0 - 290 - 122 + 304 + 125 @@ -95,22 +95,6 @@ - - buttonBox - accepted() - ClipStabilize_UI - accept() - - - 248 - 254 - - - 157 - 274 - - - buttonBox rejected()