#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();
.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);
} 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);
}
}
- //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);
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);
}
+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"
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;
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);
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)
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++) {
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;
}
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;
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);
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;
}
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();
<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>