#pragma once #include "ltstimeline_export.h" #include "timeline_view.h" #include #include #include class QDragEnterEvent; class QDragMoveEvent; class QDragLeaveEvent; class QDropEvent; class QMouseEvent; class QKeyEvent; namespace LtsTimeline { class Item; class Track; class TimelineView; class ItemDelegate; class LTSTIMELINE_EXPORT TimelineViewDragHandler { friend class TimelineView; friend class ItemDelegate; public: explicit TimelineViewDragHandler(TimelineView* view); virtual ~TimelineViewDragHandler(); virtual void dragEnterEvent(QDragEnterEvent* e); virtual void dragMoveEvent(QDragMoveEvent* e); virtual void dragLeaveEvent(QDragLeaveEvent* e); virtual void dropEvent(QDropEvent* e); virtual void mouseMoveEvent(QMouseEvent* e); virtual void mousePressEvent(QMouseEvent* e); virtual void mouseReleaseEvent(QMouseEvent* e); virtual void keyPressEvent(QKeyEvent* e); virtual bool isActive() const; virtual int deltaX() const; virtual int deltaY() const; virtual qint64 deltaTime() const; const QVector& dragItemIds() const { return m_dragItemIds; } const QModelIndex& dragStartIndex() const { return m_dragStartIndex; } qint64 dragStartTime() const { return m_dragStartTime; } const QPoint& dragStartPos() const { return m_dragStartPos; } const QPoint& dragPos() const { return m_dragPos; } protected: virtual bool canDragItemsTo(const QPoint& point) const; virtual bool canMoveItemsTo(const QPoint& point) const; virtual void moveItemsLeft(const QVector& itemIds, int dt); virtual void moveItemsRight(const QVector& itemIds, int dt); int dragItemTrackId(const Item& item) const; void clear(); protected: TimelineView* m_view{nullptr}; QVector m_dragItemIds; QModelIndex m_dragStartIndex; qint64 m_dragStartTime{-1}; QPoint m_dragStartPos; QPoint m_dragPos; int m_snapLinePos{-1}; }; } // namespace LtsTimeline