From fabef9314d49feafdb280e5f5369963358747d78 Mon Sep 17 00:00:00 2001 From: Till Theato Date: Wed, 21 Jul 2010 10:28:24 +0000 Subject: [PATCH] Allow cutting selections containing groups (some cases still need to be fixed) svn path=/trunk/kdenlive/; revision=4612 --- src/customtrackview.cpp | 14 +++++++++++--- src/customtrackview.h | 1 + src/renderer.cpp | 1 - 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 28feba2e..5c30adff 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -3580,17 +3580,21 @@ void CustomTrackView::cutSelectedClips() { QList itemList = scene()->selectedItems(); GenTime currentPos = GenTime(m_cursorPos, m_document->fps()); - for (int i = 0; i < itemList.count(); i++) { + QList skipList; + for (int i = 0; i < itemList.count(); ++i) { + if (skipList.indexOf(itemList.at(i)) != -1) + continue; if (itemList.at(i)->type() == AVWIDGET) { ClipItem *item = static_cast (itemList.at(i)); if (item->parentItem() && item->parentItem() != m_selectionGroup) { + skipList.append(item->parentItem()->childItems()); razorGroup((AbstractGroupItem *)item->parentItem(), currentPos); - return; } else if (currentPos > item->startPos() && currentPos < item->endPos()) { RazorClipCommand *command = new RazorClipCommand(this, item->info(), currentPos); m_commandStack->push(command); } } else if (itemList.at(i)->type() == GROUPWIDGET && itemList.at(i) != m_selectionGroup) { + skipList.append(itemList.at(i)->childItems()); razorGroup((AbstractGroupItem *)itemList.at(i), currentPos); } } @@ -3638,13 +3642,16 @@ void CustomTrackView::slotRazorGroup(QList clips1, QList t if (clip) { ClipItem *clipBehind = cutClip(clipsCut.at(i), cutPos, true); clips1 << clip->info(); - clips2 << clipBehind->info(); + if (clipBehind != NULL) + clips2 << clipBehind->info(); } } // TODO: cut transitionsCut doGroupClips(clips1, transitions1, true); doGroupClips(clips2, transitions2, true); } else { + /* we might also just use clipsCut.at(0)->parentItem(). + Do this loop just in case something went wrong during cut */ for (int i = 0; i < clipsCut.count(); ++i) { ClipItem *clip = getClipItemAt(cutPos.frames(m_document->fps()), clipsCut.at(i).track); if (clip && clip->parentItem() && clip->parentItem()->type() == GROUPWIDGET) { @@ -3659,6 +3666,7 @@ void CustomTrackView::slotRazorGroup(QList clips1, QList t groupTrans << ((AbstractClipItem *)children.at(j))->info(); } doGroupClips(groupClips, groupTrans, false); + break; } } for(int i = 0; i < clipsCut.count(); ++i) diff --git a/src/customtrackview.h b/src/customtrackview.h index ff6ac879..79b8758a 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -82,6 +82,7 @@ public: void activateMonitor(); int duration() const; void deleteSelectedClips(); + /** @brief Cuts all clips that are selected at the timeline cursor position. */ void cutSelectedClips(); void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition, QActionGroup *clipTypeGroup, QMenu *markermenu); void checkTrackHeight(); diff --git a/src/renderer.cpp b/src/renderer.cpp index d66be273..37118113 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1645,7 +1645,6 @@ int Render::mltInsertClip(ItemInfo info, QDomElement element, Mlt::Producer *pro void Render::mltCutClip(int track, GenTime position) { - m_isBlocked = true; Mlt::Service service(m_mltProducer->parent().get_service()); -- 2.39.2