]> git.sesse.net Git - kdenlive/commitdiff
Allow to change duration of several clips (image, color or text) in one step
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 6 Jan 2010 19:05:28 +0000 (19:05 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 6 Jan 2010 19:05:28 +0000 (19:05 +0000)
svn path=/trunk/kdenlive/; revision=4209

src/clipproperties.cpp
src/clipproperties.h
src/mainwindow.cpp
src/projectlist.cpp

index 5705b04a94c6e54fa0d51cb05ea90bfae540ca0b..087e487aeb2c30c8d97a3a386df63d08f1d9cba7 100644 (file)
@@ -54,6 +54,9 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     m_view.clip_description->setText(m_clip->description());
     QMap <QString, QString> 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 <DocClipBase *>cliplist, QMap <QString, QString> commonproperties, QWidget * parent) :
+ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap <QString, QString> 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 <DocClipBase *>cliplist, QMap <QString, QSt
     connect(m_view.clip_force_threads, SIGNAL(toggled(bool)), m_view.clip_threads, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_vindex, SIGNAL(toggled(bool)), m_view.clip_vindex, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_aindex, SIGNAL(toggled(bool)), m_view.clip_aindex, SLOT(setEnabled(bool)));
+    connect(m_view.clip_force_out, SIGNAL(toggled(bool)), m_view.clip_out, SLOT(setEnabled(bool)));
 
     m_view.tabWidget->removeTab(METATAB);
     m_view.tabWidget->removeTab(MARKERTAB);
@@ -359,13 +364,24 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, QMap <QString, QSt
     m_view.clip_path->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 <QString, QString> 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();
index 33975a0056ed0a3841b20f495eef0b8d28e71b28..23c1f4d749e9c8f135ad011340ef0b4fbbe465d3 100644 (file)
@@ -33,7 +33,7 @@ class ClipProperties : public QDialog
 
 public:
     ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidget * parent = 0);
-    ClipProperties(QList <DocClipBase *>cliplist, QMap <QString, QString> commonproperties, QWidget * parent);
+    ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap <QString, QString> commonproperties, QWidget * parent);
     QMap <QString, QString> properties();
     const QString &clipId() const;
     bool needsTimelineRefresh() const;
index 4a6375497733639b43960629e1961ece2ef34b85..557689fa6fff666874e17e284cc832f592c508fd 100644 (file)
@@ -2601,13 +2601,13 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
 
 void MainWindow::slotShowClipProperties(QList <DocClipBase *> cliplist, QMap<QString, QString> 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++) {
index 0f40dcc90f855ab407cf44fd50eba99437dcc799..7a4121c02481192634367321041856f1bed17fba 100644 (file)
@@ -233,6 +233,8 @@ void ProjectList::editClipSelection(QList<QTreeWidgetItem *> 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<QTreeWidgetItem *> 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 <QString, QString> clipprops = clip->properties();
             QMapIterator<QString, QString> p(commonproperties);
@@ -258,6 +270,7 @@ void ProjectList::editClipSelection(QList<QTreeWidgetItem *> list)
             }
         }
     }
+    if (allowDurationChange) commonproperties.insert("out", QString::number(commonDuration));
     QMapIterator<QString, QString> p(commonproperties);
     while (p.hasNext()) {
         p.next();