From 5363c29035bb35f968e85953bac22ac5dd79cf74 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 6 Jan 2010 19:05:28 +0000 Subject: [PATCH] Allow to change duration of several clips (image, color or text) in one step svn path=/trunk/kdenlive/; revision=4209 --- src/clipproperties.cpp | 33 +++++++++++++++++++++++++++++---- src/clipproperties.h | 2 +- src/mainwindow.cpp | 4 ++-- src/projectlist.cpp | 13 +++++++++++++ 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index 5705b04a..087e487a 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -54,6 +54,9 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg m_view.clip_description->setText(m_clip->description()); QMap props = m_clip->properties(); + m_view.clip_force_out->setHidden(true); + m_view.clip_out->setHidden(true); + if (props.contains("force_aspect_ratio") && props.value("force_aspect_ratio").toDouble() > 0) { m_view.clip_force_ar->setChecked(true); m_view.clip_ar->setEnabled(true); @@ -285,9 +288,10 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg // Used for multiple clips editing -ClipProperties::ClipProperties(QList cliplist, QMap commonproperties, QWidget * parent) : +ClipProperties::ClipProperties(QList cliplist, Timecode tc, QMap commonproperties, QWidget * parent) : QDialog(parent), m_clip(NULL), + m_tc(tc), m_fps(0), m_count(0), m_clipNeedsRefresh(false), @@ -347,6 +351,7 @@ ClipProperties::ClipProperties(QList cliplist, QMap removeTab(METATAB); m_view.tabWidget->removeTab(MARKERTAB); @@ -359,13 +364,24 @@ ClipProperties::ClipProperties(QList cliplist, QMap setHidden(true); m_view.label_path->setHidden(true); m_view.label_description->setHidden(true); - m_view.label_duration->setHidden(true); m_view.label_size->setHidden(true); m_view.clip_filesize->setHidden(true); m_view.clip_filesize->setHidden(true); - m_view.clip_duration->setHidden(true); m_view.clip_path->setHidden(true); m_view.clip_description->setHidden(true); + m_view.clip_thumb->setHidden(true); + m_view.label_duration->setHidden(true); + m_view.clip_duration->setHidden(true); + + if (commonproperties.contains("out")) { + if (commonproperties.value("out").toInt() > 0) { + m_view.clip_force_out->setChecked(true); + m_view.clip_out->setText(m_tc.getTimecodeFromFrames(commonproperties.value("out").toInt())); + } else m_view.clip_out->setText(KdenliveSettings::image_duration()); + } else { + m_view.clip_force_out->setHidden(true); + m_view.clip_out->setHidden(true); + } } @@ -511,7 +527,16 @@ QMap ClipProperties::properties() } // If we adjust several clips, return now - if (m_clip == NULL) return props; + if (m_clip == NULL) { + if (m_view.clip_out->isEnabled()) { + int duration = m_tc.getFrameCount(m_view.clip_out->text()); + kDebug() << "// DURAT: " << duration << ", OLD: " << m_old_props.value("out").toInt(); + if (duration != m_old_props.value("out").toInt()) { + props["out"] = QString::number(duration - 1); + } + } + return props; + } if (m_old_props.value("description") != m_view.clip_description->text()) props["description"] = m_view.clip_description->text(); diff --git a/src/clipproperties.h b/src/clipproperties.h index 33975a00..23c1f4d7 100644 --- a/src/clipproperties.h +++ b/src/clipproperties.h @@ -33,7 +33,7 @@ class ClipProperties : public QDialog public: ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidget * parent = 0); - ClipProperties(QList cliplist, QMap commonproperties, QWidget * parent); + ClipProperties(QList cliplist, Timecode tc, QMap commonproperties, QWidget * parent); QMap properties(); const QString &clipId() const; bool needsTimelineRefresh() const; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4a637549..557689fa 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2601,13 +2601,13 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) void MainWindow::slotShowClipProperties(QList cliplist, QMap commonproperties) { - ClipProperties dia(cliplist, commonproperties, this); + ClipProperties dia(cliplist, m_activeDocument->timecode(), commonproperties, this); if (dia.exec() == QDialog::Accepted) { QUndoCommand *command = new QUndoCommand(); command->setText(i18n("Edit clips")); for (int i = 0; i < cliplist.count(); i++) { DocClipBase *clip = cliplist.at(i); - new EditClipCommand(m_projectList, clip->getId(), clip->properties(), dia.properties(), true, command); + new EditClipCommand(m_projectList, clip->getId(), commonproperties, dia.properties(), true, command); } m_activeDocument->commandStack()->push(command); for (int i = 0; i < cliplist.count(); i++) { diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 0f40dcc9..7a4121c0 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -233,6 +233,8 @@ void ProjectList::editClipSelection(QList list) commonproperties.insert("video_index", "-"); commonproperties.insert("audio_index", "-"); + bool allowDurationChange = true; + int commonDuration = -1; ProjectItem *item; for (int i = 0; i < list.count(); i++) { item = NULL; @@ -245,6 +247,16 @@ void ProjectList::editClipSelection(QList list) // check properties DocClipBase *clip = item->referencedClip(); if (clipList.contains(clip)) continue; + if (clip->clipType() != COLOR && clip->clipType() != IMAGE && clip->clipType() != TEXT) { + allowDurationChange = false; + } + if (allowDurationChange && commonDuration != 0) { + if (commonDuration == -1) { + commonDuration = clip->duration().frames(m_fps); + } else if (commonDuration != clip->duration().frames(m_fps)) { + commonDuration = 0; + } + } clipList.append(clip); QMap clipprops = clip->properties(); QMapIterator p(commonproperties); @@ -258,6 +270,7 @@ void ProjectList::editClipSelection(QList list) } } } + if (allowDurationChange) commonproperties.insert("out", QString::number(commonDuration)); QMapIterator p(commonproperties); while (p.hasNext()) { p.next(); -- 2.39.5