#pragma once #include "timeline_view.h" #include #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}; }; }