From 2132b23b05cd9f8f766c2b7a91d770563d7b9463 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 3 Nov 2009 12:26:36 +0000 Subject: [PATCH] Fix deletion animation with Qt 4.6 svn path=/trunk/kdenlive/; revision=4089 --- src/abstractclipitem.cpp | 4 +++- src/clipitem.cpp | 2 ++ src/customtrackview.cpp | 13 +++++++++++-- src/transition.cpp | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/abstractclipitem.cpp b/src/abstractclipitem.cpp index a9aec95f..5b990206 100644 --- a/src/abstractclipitem.cpp +++ b/src/abstractclipitem.cpp @@ -58,7 +58,8 @@ void AbstractClipItem::closeAnimation() { #if QT_VERSION >= 0x040600 if (m_closeAnimation) return; - m_closeAnimation = new QPropertyAnimation(this, "geometry"); + setEnabled(false); + m_closeAnimation = new QPropertyAnimation(this, "rect"); connect(m_closeAnimation, SIGNAL(finished()), this, SLOT(deleteLater())); m_closeAnimation->setDuration(200); QRectF r = rect(); @@ -196,6 +197,7 @@ void AbstractClipItem::resizeEnd(int posx) if (durationDiff > GenTime()) { QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); for (int i = 0; i < collisionList.size(); ++i) { + if (!collisionList.at(i)->isEnabled()) continue; QGraphicsItem *item = collisionList.at(i); if (item->type() == type() && item->pos().x() > pos().x()) { kDebug() << "///////// COLLISION DETECTED!!!!!!!!!"; diff --git a/src/clipitem.cpp b/src/clipitem.cpp index befec3a4..96870209 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -1173,6 +1173,7 @@ QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value) int offset = 0; if (!items.isEmpty()) { for (int i = 0; i < items.count(); i++) { + if (!items.at(i)->isEnabled()) continue; if (items.at(i)->type() == type()) { // Collision! QPointF otherPos = items.at(i)->pos(); @@ -1196,6 +1197,7 @@ QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value) QList subitems = scene()->items(sceneShape, Qt::IntersectsItemShape); subitems.removeAll(this); for (int j = 0; j < subitems.count(); j++) { + if (!subitems.at(j)->isEnabled()) continue; if (subitems.at(j)->type() == type()) { // move was not successful, revert to previous pos m_info.startPos = GenTime((int) pos().x(), m_fps); diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 43c5af46..2fcad0ac 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2088,6 +2088,7 @@ void CustomTrackView::adjustTimelineClips(EDITMODE mode, ClipItem *item, ItemInf QList selection = m_scene->items(rect); if (item) selection.removeAll(item); for (int i = 0; i < selection.count(); i++) { + if (!selection.at(i)->isEnabled()) continue; if (selection.at(i)->type() == AVWIDGET) { ClipItem *clip = static_cast(selection.at(i)); if (clip->startPos() < info.startPos) { @@ -2142,6 +2143,7 @@ void CustomTrackView::adjustTimelineTransitions(EDITMODE mode, Transition *item, QList selection = m_scene->items(rect); selection.removeAll(item); for (int i = 0; i < selection.count(); i++) { + if (!selection.at(i)->isEnabled()) continue; if (selection.at(i)->type() == TRANSITIONWIDGET) { Transition *tr = static_cast(selection.at(i)); if (tr->startPos() < info.startPos) { @@ -3335,13 +3337,14 @@ void CustomTrackView::deleteClip(ItemInfo info, bool refresh) if (m_dragItem == item) m_dragItem = NULL; #if QT_VERSION >= 0x040600 // animate item deletion - if (refresh) item->closeAnimation(); + item->closeAnimation(); + /*if (refresh) item->closeAnimation(); else { // no refresh, means we have several operations chained, we need to delete clip immediatly // so that it does not get in the way of the other delete item; item = NULL; - } + }*/ #else delete item; item = NULL; @@ -3622,6 +3625,7 @@ ClipItem *CustomTrackView::getClipItemAtEnd(GenTime pos, int track) QList list = scene()->items(QPointF(framepos - 1, track * m_tracksHeight + m_tracksHeight / 2)); ClipItem *clip = NULL; for (int i = 0; i < list.size(); i++) { + if (!list.at(i)->isEnabled()) continue; if (list.at(i)->type() == AVWIDGET) { ClipItem *test = static_cast (list.at(i)); if (test->endPos() == pos) clip = test; @@ -3636,6 +3640,7 @@ ClipItem *CustomTrackView::getClipItemAtStart(GenTime pos, int track) QList list = scene()->items(QPointF(pos.frames(m_document->fps()), track * m_tracksHeight + m_tracksHeight / 2)); ClipItem *clip = NULL; for (int i = 0; i < list.size(); i++) { + if (!list.at(i)->isEnabled()) continue; if (list.at(i)->type() == AVWIDGET) { ClipItem *test = static_cast (list.at(i)); if (test->startPos() == pos) clip = test; @@ -3651,6 +3656,7 @@ ClipItem *CustomTrackView::getClipItemAt(int pos, int track) QList list = scene()->items(p); ClipItem *clip = NULL; for (int i = 0; i < list.size(); i++) { + if (!list.at(i)->isEnabled()) continue; if (list.at(i)->type() == AVWIDGET) { clip = static_cast (list.at(i)); break; @@ -3670,6 +3676,7 @@ Transition *CustomTrackView::getTransitionItemAt(int pos, int track) QList list = scene()->items(p); Transition *clip = NULL; for (int i = 0; i < list.size(); i++) { + if (!list.at(i)->isEnabled()) continue; if (list.at(i)->type() == TRANSITIONWIDGET) { clip = static_cast (list.at(i)); break; @@ -3690,6 +3697,7 @@ Transition *CustomTrackView::getTransitionItemAtEnd(GenTime pos, int track) QList list = scene()->items(p); Transition *clip = NULL; for (int i = 0; i < list.size(); i++) { + if (!list.at(i)->isEnabled()) continue; if (list.at(i)->type() == TRANSITIONWIDGET) { Transition *test = static_cast (list.at(i)); if (test->endPos() == pos) clip = test; @@ -3705,6 +3713,7 @@ Transition *CustomTrackView::getTransitionItemAtStart(GenTime pos, int track) QList list = scene()->items(p); Transition *clip = NULL; for (int i = 0; i < list.size(); ++i) { + if (!list.at(i)->isEnabled()) continue; if (list.at(i)->type() == TRANSITIONWIDGET) { Transition *test = static_cast (list.at(i)); if (test->startPos() == pos) clip = test; diff --git a/src/transition.cpp b/src/transition.cpp index 1c5b3ce3..a322f068 100644 --- a/src/transition.cpp +++ b/src/transition.cpp @@ -231,6 +231,7 @@ QVariant Transition::itemChange(GraphicsItemChange change, const QVariant &value if (!items.isEmpty()) { for (int i = 0; i < items.count(); i++) { + if (!items.at(i)->isEnabled()) continue; if (items.at(i)->type() == type()) { // Collision! Don't move. //kDebug()<<"/// COLLISION WITH ITEM: "<boundingRect()<<", POS: "<pos()<<", ME: "<