m_selectedKeyframe(0),
m_keyframeFactor(1),
m_fps(fps)
+#if QT_VERSION >= 0x040600
+ , m_closeAnimation(NULL)
+#endif
{
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
#if QT_VERSION >= 0x040600
#endif
}
+AbstractClipItem::~AbstractClipItem()
+{
+#if QT_VERSION >= 0x040600
+ if (m_closeAnimation) delete m_closeAnimation;
+#endif
+}
+
+void AbstractClipItem::closeAnimation()
+{
+#if QT_VERSION >= 0x040600
+ if (m_closeAnimation) return;
+ m_closeAnimation = new QPropertyAnimation(this, "rect");
+ connect(m_closeAnimation, SIGNAL(finished()), this, SLOT(deleteLater()));
+ m_closeAnimation->setDuration(200);
+ QRectF r = rect();
+ QRectF r2 = r;
+ r2.setLeft(r.left() + r.width() / 2);
+ r2.setTop(r.top() + r.height() / 2);
+ r2.setWidth(1);
+ r2.setHeight(1);
+ m_closeAnimation->setStartValue(r);
+ m_closeAnimation->setEndValue(r2);
+ m_closeAnimation->setEasingCurve(QEasingCurve::InQuad);
+ m_closeAnimation->start();
+#endif
+}
+
ItemInfo AbstractClipItem::info() const
{
ItemInfo info = m_info;
#define ABSTRACTCLIPITEM
#include <QGraphicsRectItem>
+#include <QGraphicsWidget>
+
+#if QT_VERSION >= 0x040600
+#include <QPropertyAnimation>
+#endif
+
#include "definitions.h"
#include "gentime.h"
class CustomTrackScene;
class QGraphicsSceneMouseEvent;
-class AbstractClipItem : public QObject , public QGraphicsRectItem
+class AbstractClipItem : public QObject, public QGraphicsRectItem
{
Q_OBJECT
+#if QT_VERSION >= 0x040600
+ Q_PROPERTY(QRectF rect READ rect WRITE setRect)
+#endif
+
public:
AbstractClipItem(const ItemInfo info, const QRectF& rect, double fps);
+ virtual ~ AbstractClipItem();
void updateSelectedKeyFrame();
void updateKeyFramePos(const GenTime pos, const double value);
void addKeyFrame(const GenTime pos, const double value);
void updateItem();
void setItemLocked(bool locked);
bool isItemLocked() const;
-
+ void closeAnimation();
+
virtual OPERATIONTYPE operationMode(QPointF pos) = 0;
virtual GenTime startPos() const ;
virtual void setTrack(int track);
void drawKeyFrames(QPainter *painter, QRectF exposedRect);
int mouseOverKeyFrames(QPointF pos, double maxOffset);
virtual void mousePressEvent(QGraphicsSceneMouseEvent * event);
+
+private:
+#if QT_VERSION >= 0x040600
+ QPropertyAnimation *m_closeAnimation;
+#endif
};
#endif
ClipItem::~ClipItem()
{
blockSignals(true);
+ if (scene()) scene()->removeItem(this);
if (m_clipType == VIDEO || m_clipType == AV || m_clipType == SLIDESHOW || m_clipType == PLAYLIST) {
disconnect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QImage)), this, SLOT(slotThumbReady(int, QImage)));
disconnect(m_clip, SIGNAL(gotAudioData()), this, SLOT(slotGotAudioData()));
}*/
m_waitingThumbs.removeAll(item);
if (m_dragItem == item) m_dragItem = NULL;
- scene()->removeItem(item);
+#if QT_VERSION >= 0x040600
+ // animate item deletion
+ item->closeAnimation();
+#else
delete item;
item = NULL;
+#endif
+
setDocumentModified();
if (refresh) m_document->renderer()->doRefresh();
}
Transition::~Transition()
{
+ blockSignals(true);
+ if (scene()) scene()->removeItem(this);
}
Transition *Transition::clone()