From 4c1498b707d9ecb059d2f85ad84b4981dd333f75 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 28 Dec 2012 12:37:54 +0100 Subject: [PATCH 1/1] Fix grouped items sometimes moving to locked tracks --- src/customtrackview.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 4fad4c8e..21488660 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -817,6 +817,8 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) AbstractGroupItem *dragGroup = NULL; AbstractClipItem *collisionClip = NULL; bool found = false; + QStringList lockedTracks; + double yOffset = 0; while (!m_dragGuide && ct < collisionList.count()) { if (collisionList.at(ct)->type() == AVWIDGET || collisionList.at(ct)->type() == TRANSITIONWIDGET) { collisionClip = static_cast (collisionList.at(ct)); @@ -831,20 +833,20 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) m_dragItem = collisionClip; } found = true; - QStringList lockedTracks; for (int i = 0; i < m_document->tracksCount(); i++) { if (m_document->trackInfoAt(i).isLocked) lockedTracks << QString::number(m_document->tracksCount() - i - 1); } - m_dragItem->setProperty("y_absolute", mapToScene(m_clickEvent).y() - m_dragItem->scenePos().y()); + yOffset = mapToScene(m_clickEvent).y() - m_dragItem->scenePos().y(); + m_dragItem->setProperty("y_absolute", yOffset); m_dragItem->setProperty("locked_tracks", lockedTracks); m_dragItemInfo = m_dragItem->info(); if (m_selectionGroup) { - m_selectionGroup->setProperty("y_absolute", mapToScene(m_clickEvent).y() - m_dragItem->scenePos().y()); + m_selectionGroup->setProperty("y_absolute", yOffset); m_selectionGroup->setProperty("locked_tracks", lockedTracks); } - if (m_dragItem->parentItem() && m_dragItem->parentItem()->type() == GROUPWIDGET && m_dragItem->parentItem() != m_selectionGroup) { + if (dragGroup) { dragGroup = static_cast (m_dragItem->parentItem()); - dragGroup->setProperty("y_absolute", mapToScene(m_clickEvent).y() - m_dragItem->scenePos().y()); + dragGroup->setProperty("y_absolute", yOffset); dragGroup->setProperty("locked_tracks", lockedTracks); } break; @@ -1039,11 +1041,15 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) bool selected = !m_dragItem->isSelected(); QGraphicsView::mousePressEvent(event); - if (dragGroup) { dragGroup->setSelected(selected); - if (dragGroup->parentItem()) + QList children = dragGroup->childItems(); + for (int i = 0; i < children.count(); i++) { + children.at(i)->setSelected(selected); + } + if (dragGroup->parentItem()) { dragGroup->parentItem()->setSelected(selected); + } } else m_dragItem->setSelected(selected); @@ -1051,6 +1057,11 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) m_dragItem = NULL; } groupSelectedItems(QList (), false, true); + if (m_selectionGroup) { + m_selectionGroup->setProperty("y_absolute", yOffset); + m_selectionGroup->setProperty("locked_tracks", lockedTracks); + } + if (m_dragItem) { ClipItem *clip = static_cast (m_dragItem); updateClipTypeActions(dragGroup == NULL ? clip : NULL); -- 2.39.5