-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

The attached patch adds the duration dialog to the context menu for
clips in the timeline to make it easier to access, especially when using
keyframeable effects (then a double click adds a new keyframe).

regards ttill
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAku5nEkACgkQzwEyz7QP6nQl7wCgk+yD8TLJPjgTFRb1SzxTuyIA
PIYAoNlb95CyYVb8zr1YMUvywGG7zF04
=aePB
-----END PGP SIGNATURE-----
Index: src/customtrackview.cpp
===================================================================
--- src/customtrackview.cpp	(revision 4369)
+++ src/customtrackview.cpp	(working copy)
@@ -1285,34 +1285,51 @@
             emit clipItemSelected(item, item->selectedEffectIndex());
         }
     } else if (m_dragItem && !m_dragItem->isItemLocked()) {
+        editClipDuration();
+    } else {
+        QList<QGraphicsItem *> collisionList = items(event->pos());
+        if (collisionList.count() == 1 && collisionList.at(0)->type() == GUIDEITEM) {
+            Guide *editGuide = (Guide *) collisionList.at(0);
+            if (editGuide) slotEditGuide(editGuide->info());
+        }
+    }
+}
+
+void CustomTrackView::editClipDuration()
+{
+	GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
+    int track = (int)(mapToScene(m_menuPosition).y() / m_tracksHeight);
+    ClipItem *item = getClipItemAt(pos, track);
+    
+    if(item) {
         GenTime minimum;
         GenTime maximum;
-        if (m_dragItem->type() == TRANSITIONWIDGET) {
-            getTransitionAvailableSpace(m_dragItem, minimum, maximum);
+        if (item->type() == TRANSITIONWIDGET) {
+            getTransitionAvailableSpace(item, minimum, maximum);
         } else {
-            getClipAvailableSpace(m_dragItem, minimum, maximum);
+            getClipAvailableSpace(item, minimum, maximum);
         }
         //kDebug()<<"// GOT MOVE POS: "<<minimum.frames(25)<<" - "<<maximum.frames(25);
-        ClipDurationDialog d(m_dragItem, m_document->timecode(), minimum, maximum, this);
+        ClipDurationDialog d(item, m_document->timecode(), minimum, maximum, this);
         if (d.exec() == QDialog::Accepted) {
-            if (m_dragItem->type() == TRANSITIONWIDGET) {
+            if (item->type() == TRANSITIONWIDGET) {
                 // move & resize transition
                 ItemInfo startInfo;
-                startInfo.startPos = m_dragItem->startPos();
-                startInfo.endPos = m_dragItem->endPos();
-                startInfo.track = m_dragItem->track();
+                startInfo.startPos = item->startPos();
+                startInfo.endPos = item->endPos();
+                startInfo.track = item->track();
                 ItemInfo endInfo;
                 endInfo.startPos = d.startPos();
                 endInfo.endPos = endInfo.startPos + d.duration();
-                endInfo.track = m_dragItem->track();
+                endInfo.track = item->track();
                 MoveTransitionCommand *command = new MoveTransitionCommand(this, startInfo, endInfo, true);
                 m_commandStack->push(command);
             } else {
                 // move and resize clip
                 QUndoCommand *moveCommand = new QUndoCommand();
                 moveCommand->setText(i18n("Edit clip"));
-                ItemInfo clipInfo = m_dragItem->info();
-                if (d.duration() < m_dragItem->cropDuration() || d.cropStart() != clipInfo.cropStart) {
+                ItemInfo clipInfo = item->info();
+                if (d.duration() < item->cropDuration() || d.cropStart() != clipInfo.cropStart) {
                     // duration was reduced, so process it first
                     ItemInfo startInfo = clipInfo;
                     clipInfo.endPos = clipInfo.startPos + d.duration();
@@ -1322,10 +1339,10 @@
                 if (d.startPos() != clipInfo.startPos) {
                     ItemInfo startInfo = clipInfo;
                     clipInfo.startPos = d.startPos();
-                    clipInfo.endPos = m_dragItem->endPos() + (clipInfo.startPos - startInfo.startPos);
+                    clipInfo.endPos = item->endPos() + (clipInfo.startPos - startInfo.startPos);
                     new MoveClipCommand(this, startInfo, clipInfo, true, moveCommand);
                 }
-                if (d.duration() > m_dragItem->cropDuration()) {
+                if (d.duration() > item->cropDuration()) {
                     // duration was increased, so process it after move
                     ItemInfo startInfo = clipInfo;
                     clipInfo.endPos = clipInfo.startPos + d.duration();
@@ -1335,16 +1352,9 @@
                 m_commandStack->push(moveCommand);
             }
         }
-    } else {
-        QList<QGraphicsItem *> collisionList = items(event->pos());
-        if (collisionList.count() == 1 && collisionList.at(0)->type() == GUIDEITEM) {
-            Guide *editGuide = (Guide *) collisionList.at(0);
-            if (editGuide) slotEditGuide(editGuide->info());
-        }
     }
 }
 
-
 void CustomTrackView::editKeyFrame(const GenTime pos, const int track, const int index, const QString keyframes)
 {
     ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), track);
Index: src/mainwindow.cpp
===================================================================
--- src/mainwindow.cpp	(revision 4369)
+++ src/mainwindow.cpp	(working copy)
@@ -396,6 +396,7 @@
     m_timelineContextMenu->addAction(actionCollection()->action("delete_space"));
     m_timelineContextMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Paste)));
 
+    m_timelineContextClipMenu->addAction(actionCollection()->action("edit_clip_duration"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("group_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("ungroup_clip"));
@@ -1133,6 +1134,10 @@
     ungroupClip->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_G);
     ungroupClip->setData("ungroup_clip");
     connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
+    
+    KAction* editClipDuration = new KAction(KIcon("measure"), i18n("Edit Clip Duration"), this);
+    collection->addAction("edit_clip_duration", editClipDuration);
+    connect(editClipDuration, SIGNAL(triggered(bool)), this, SLOT(slotEditClipDuration()));
 
     KAction* insertOvertwrite = new KAction(KIcon(), i18n("Insert Clip Zone in Timeline (Overwrite)"), this);
     insertOvertwrite->setShortcut(Qt::Key_V);
@@ -2452,6 +2457,13 @@
     }
 }
 
+void MainWindow::slotEditClipDuration()
+{
+    if (m_activeTimeline) {
+        m_activeTimeline->projectView()->editClipDuration();	
+    }
+}    
+
 void MainWindow::slotAddProjectClip(KUrl url)
 {
     if (m_activeDocument)
Index: src/customtrackview.h
===================================================================
--- src/customtrackview.h	(revision 4369)
+++ src/customtrackview.h	(working copy)
@@ -131,6 +131,7 @@
     void setEditMode(EDITMODE mode);
     void insertClipCut(DocClipBase *clip, int in, int out);
     void clearSelection();
+    void editClipDuration();
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
Index: src/mainwindow.h
===================================================================
--- src/mainwindow.h	(revision 4369)
+++ src/mainwindow.h	(working copy)
@@ -320,6 +320,7 @@
     void slotDvdWizard(const QString &url = QString(), const QString &profile = "dv_pal");
     void slotGroupClips();
     void slotUnGroupClips();
+    void slotEditClipDuration();
     void slotSplitAudio();
     void slotUpdateClipType(QAction *action);
     void slotShowTimeline(bool show);
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Kdenlive-devel mailing list
Kdenlive-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kdenlive-devel

Reply via email to