From 104feb68ab9d5ba11892253d1460a3ba211d0af9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 26 May 2009 22:16:18 +0000 Subject: [PATCH] Allow transcoding of several clips svn path=/trunk/kdenlive/; revision=3431 --- src/cliptranscode.cpp | 62 ++++++++++++++++++++++++++++++------------- src/cliptranscode.h | 3 ++- src/mainwindow.cpp | 17 ++++++------ src/mainwindow.h | 2 +- 4 files changed, 54 insertions(+), 30 deletions(-) diff --git a/src/cliptranscode.cpp b/src/cliptranscode.cpp index e9ccc376..3386edf6 100644 --- a/src/cliptranscode.cpp +++ b/src/cliptranscode.cpp @@ -25,20 +25,30 @@ #include -ClipTranscode::ClipTranscode(const KUrl &src, const QString ¶ms, QWidget * parent) : - QDialog(parent) +ClipTranscode::ClipTranscode(KUrl::List urls, const QString ¶ms, QWidget * parent) : + QDialog(parent), m_urls(urls) { setFont(KGlobalSettings::toolBarFont()); m_view.setupUi(this); setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(i18n("Transcode Clip")); - QString fileName = src.path(); //.section('.', 0, -1); - QString newFile = params.section(' ', -1).replace("%1", fileName); - KUrl dest(newFile); - m_view.source_url->setUrl(src); - m_view.dest_url->setUrl(dest); - connect(m_view.source_url, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateParams())); + if (m_urls.count() == 1) { + QString fileName = m_urls.at(0).path(); //.section('.', 0, -1); + QString newFile = params.section(' ', -1).replace("%1", fileName); + KUrl dest(newFile); + m_view.source_url->setUrl(m_urls.at(0)); + m_view.dest_url->setUrl(dest); + m_view.urls_list->setHidden(true); + connect(m_view.source_url, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateParams())); + } else { + m_view.label_source->setHidden(true); + m_view.label_dest->setHidden(true); + m_view.source_url->setHidden(true); + m_view.dest_url->setHidden(true); + for (int i = 0; i < m_urls.count(); i++) + m_view.urls_list->addItem(m_urls.at(i).path()); + } if (!params.isEmpty()) { m_view.label_profile->setHidden(true); m_view.profile_list->setHidden(true); @@ -57,8 +67,6 @@ ClipTranscode::ClipTranscode(const KUrl &src, const QString ¶ms, QWidget * p } } - kDebug() << "//PARAMS: " << params << "\n\nNAME: " << newFile; - connect(m_view.button_start, SIGNAL(clicked()), this, SLOT(slotStartTransCode())); m_transcodeProcess.setProcessChannelMode(QProcess::MergedChannels); @@ -81,8 +89,18 @@ void ClipTranscode::slotStartTransCode() return; } QStringList parameters; - parameters << "-i" << m_view.source_url->url().path(); + if (m_view.urls_list->count() > 0) { + m_view.source_url->setUrl(m_urls.takeFirst()); + slotUpdateParams(-1); + QList matching = m_view.urls_list->findItems(m_view.source_url->url().path(), Qt::MatchExactly); + if (matching.count() > 0) { + matching.at(0)->setFlags(Qt::ItemIsSelectable); + m_view.urls_list->setCurrentItem(matching.at(0)); + } + } + QString source_url = m_view.source_url->url().path(); + parameters << "-i" << source_url; if (QFile::exists(m_view.dest_url->url().path())) { if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", m_view.dest_url->url().path())) == KMessageBox::No) return; parameters << "-y"; @@ -92,7 +110,7 @@ void ClipTranscode::slotStartTransCode() params = params.section(' ', 0, -2); parameters << params.split(' ') << m_view.dest_url->url().path(); - kDebug() << "/// FFMPEG ARGS: " << parameters; + //kDebug() << "/// FFMPEG ARGS: " << parameters; m_transcodeProcess.start("ffmpeg", parameters); m_view.button_start->setEnabled(false); @@ -114,7 +132,11 @@ void ClipTranscode::slotTranscodeFinished(int exitCode, QProcess::ExitStatus exi if (exitCode == 0 && exitStatus == QProcess::NormalExit) { m_view.log->setHtml(m_view.log->toPlainText() + "
" + i18n("Transcoding finished.")); if (m_view.auto_add->isChecked()) emit addClip(m_view.dest_url->url()); - if (m_view.auto_close->isChecked()) accept(); + if (m_view.urls_list->count() > 0 && m_urls.count() > 0) { + m_transcodeProcess.close(); + slotStartTransCode(); + return; + } else if (m_view.auto_close->isChecked()) accept(); } else { m_view.log->setHtml(m_view.log->toPlainText() + "
" + i18n("Transcoding FAILED!")); } @@ -124,13 +146,15 @@ void ClipTranscode::slotTranscodeFinished(int exitCode, QProcess::ExitStatus exi void ClipTranscode::slotUpdateParams(int ix) { - if (ix == -1) ix = m_view.profile_list->currentIndex(); QString fileName = m_view.source_url->url().path(); - QString params = m_view.profile_list->itemData(ix).toString(); - QString newFile = params.section(' ', -1).replace("%1", fileName); - KUrl dest(newFile); - m_view.dest_url->setUrl(dest); - m_view.params->setPlainText(params.simplified()); + if (ix != -1) { + QString params = m_view.profile_list->itemData(ix).toString(); + m_view.params->setPlainText(params.simplified()); + } + + QString newFile = m_view.params->toPlainText().simplified().section(' ', -1).replace("%1", fileName); + m_view.dest_url->setUrl(KUrl(newFile)); + } #include "cliptranscode.moc" diff --git a/src/cliptranscode.h b/src/cliptranscode.h index 2a885278..e46fc53a 100644 --- a/src/cliptranscode.h +++ b/src/cliptranscode.h @@ -33,7 +33,7 @@ class ClipTranscode : public QDialog Q_OBJECT public: - ClipTranscode(const KUrl &src, const QString ¶ms, QWidget * parent = 0); + ClipTranscode(KUrl::List urls, const QString ¶ms, QWidget * parent = 0); ~ClipTranscode(); @@ -46,6 +46,7 @@ private slots: private: Ui::ClipTranscode_UI m_view; QProcess m_transcodeProcess; + KUrl::List m_urls; signals: void addClip(KUrl url); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 59fbf3e8..ccf544b8 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2678,17 +2678,16 @@ void MainWindow::loadTranscoders() } } -void MainWindow::slotTranscode(QString url) +void MainWindow::slotTranscode(KUrl::List urls) { QString params; - if (url.isEmpty()) { - url = m_projectList->currentClipUrl(); + if (urls.isEmpty()) { + urls.append(m_projectList->currentClipUrl()); QAction *action = qobject_cast(sender()); params = action->data().toString(); - } - if (url.isEmpty()) return; - ClipTranscode *d = new ClipTranscode(url, params); + if (urls.isEmpty()) return; + ClipTranscode *d = new ClipTranscode(urls, params); connect(d, SIGNAL(addClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl))); d->show(); //QProcess::startDetached("ffmpeg", parameters); @@ -2696,9 +2695,9 @@ void MainWindow::slotTranscode(QString url) void MainWindow::slotTranscodeClip() { - KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder")); - if (url.isEmpty()) return; - slotTranscode(url.path()); + KUrl::List urls = KFileDialog::getOpenUrls(KUrl("kfiledialog:///projectfolder")); + if (urls.isEmpty()) return; + slotTranscode(urls); } #include "mainwindow.moc" diff --git a/src/mainwindow.h b/src/mainwindow.h index f5b7851f..1e5ebc25 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -298,7 +298,7 @@ private slots: void slotUpdateClipType(QAction *action); void slotShowTimeline(bool show); void slotMaximizeCurrent(bool show); - void slotTranscode(QString url = QString()); + void slotTranscode(KUrl::List urls = KUrl::List()); void slotTranscodeClip(); signals: -- 2.39.5