]> git.sesse.net Git - kdenlive/commitdiff
Add "Edit duration" entry in timeline context menu, patch by Till Theato
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 5 Apr 2010 13:34:04 +0000 (13:34 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 5 Apr 2010 13:34:04 +0000 (13:34 +0000)
svn path=/trunk/kdenlive/; revision=4370

src/customtrackview.cpp
src/customtrackview.h
src/mainwindow.cpp
src/mainwindow.h

index 81b59ac8b115a5809673df188ed1d6ea60fcc7d0..6759a7aeaeaef13d394a9213ddb4e9ad7e4ea21c 100644 (file)
@@ -1285,34 +1285,57 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event)
             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()
+{
+    AbstractClipItem *item;
+    if (m_dragItem) {
+       item = m_dragItem;
+    }
+    else {
+        GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
+        int track = (int)(mapToScene(m_menuPosition).y() / m_tracksHeight);
+        item = getClipItemAt(pos, track);
+    }
+
+    if (item && !item->isItemLocked()) {
         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 +1345,10 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event)
                 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 +1358,9 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event)
                 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 c0aea67124c27def55c1ee52789e24e70ea0be0d..654f8095193fc9f04e85315a1fa45c226f83bcba 100644 (file)
@@ -131,6 +131,7 @@ public:
     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 6c7a5e7d5ad36217b9dc76be2537b528d226a3e9..d64ba1d29aaee2be912c907a5452d62b6ee748f0 100644 (file)
@@ -396,6 +396,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     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"));
@@ -412,6 +413,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     //TODO: re-enable custom effects menu when it is implemented
     m_timelineContextClipMenu->addMenu(m_customEffectsMenu);
 
+    m_timelineContextTransitionMenu->addAction(actionCollection()->action("edit_clip_duration"));
     m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_timeline_clip"));
     m_timelineContextTransitionMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy)));
 
@@ -1134,6 +1136,10 @@ void MainWindow::setupActions()
     ungroupClip->setData("ungroup_clip");
     connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
 
+    KAction* editClipDuration = new KAction(KIcon("measure"), i18n("Edit 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);
     collection->addAction("overwrite_to_in_point", insertOvertwrite);
@@ -2452,6 +2458,13 @@ void MainWindow::slotUnGroupClips()
     }
 }
 
+void MainWindow::slotEditClipDuration()
+{
+    if (m_activeTimeline) {
+        m_activeTimeline->projectView()->editClipDuration();
+    }
+}
+
 void MainWindow::slotAddProjectClip(KUrl url)
 {
     if (m_activeDocument)
index 7fb488d49c09059b5837ea8992b4d19054c8da5a..3c79f9e232312c96e3dd80d99a885197acf661c7 100644 (file)
@@ -320,6 +320,7 @@ private slots:
     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);