diff options
Diffstat (limited to 'src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h')
-rw-r--r-- | src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h | 98 |
1 files changed, 64 insertions, 34 deletions
diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h index 4e33ce362e..7413cb1dbb 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h @@ -36,6 +36,7 @@ QT_FORWARD_DECLARE_CLASS(QGraphicsLinearLayout) QT_FORWARD_DECLARE_CLASS(QComboBox) +QT_FORWARD_DECLARE_CLASS(QWidget) namespace QmlDesigner { @@ -51,15 +52,66 @@ class TimelinePlaceholder; class TimelineGraphicsLayout; class TimelineToolBar; -class TimelineGraphicsScene : public QGraphicsScene +class AbstractScrollGraphicsScene : public QGraphicsScene { Q_OBJECT +public: + AbstractScrollGraphicsScene(QWidget *parent); + ; + + int scrollOffset() const; + void setScrollOffset(int offset); + static int getScrollOffset(QGraphicsScene *scene); + + QRectF selectionBounds() const; + + void selectKeyframes(const SelectionMode &mode, const QList<TimelineKeyframeItem *> &items); + virtual void clearSelection(); + QList<TimelineKeyframeItem *> selectedKeyframes() const; + bool hasSelection() const; + bool isCurrent(TimelineKeyframeItem *keyframe) const; + bool isKeyframeSelected(TimelineKeyframeItem *keyframe) const; + bool multipleKeyframesSelected() const; + + virtual qreal rulerScaling() const = 0; + virtual int rulerWidth() const = 0; + virtual qreal rulerDuration() const = 0; + + virtual AbstractView *abstractView() const = 0; + + virtual void setCurrentFrame(int) {} + + virtual qreal startFrame() const = 0; + virtual qreal endFrame() const = 0; + + virtual void invalidateScrollbar() = 0; + + virtual qreal snap(qreal frame, bool snapToPlayhead = true) + { + Q_UNUSED(snapToPlayhead); + return frame; + } + + QGraphicsView *graphicsView() const; + QGraphicsView *rulerView() const; + signals: + void statusBarMessageChanged(const QString &message); void selectionChanged(); - void scroll(const TimelineUtils::Side &side); +private: + void emitScrollOffsetChanged(); + + int m_scrollOffset = 0; + QList<TimelineKeyframeItem *> m_selectedKeyframes; +}; + +class TimelineGraphicsScene : public AbstractScrollGraphicsScene +{ + Q_OBJECT + public: explicit TimelineGraphicsScene(TimelineWidget *parent); @@ -74,7 +126,7 @@ public: void invalidateLayout(); qreal setCurrenFrame(const QmlTimeline &timeline, qreal frame); - void setCurrentFrame(int frame); + void setCurrentFrame(int frame) override; void setStartFrame(int frame); void setEndFrame(int frame); @@ -82,11 +134,12 @@ public: TimelineWidget *timelineWidget() const; TimelineToolBar *toolBar() const; - qreal rulerScaling() const; - int rulerWidth() const; - qreal rulerDuration() const; - qreal startFrame() const; - qreal endFrame() const; + qreal rulerScaling() const override; + int rulerWidth() const override; + qreal rulerDuration() const override; + + qreal startFrame() const override; + qreal endFrame() const override; void updateKeyframePositionsCache(); @@ -97,39 +150,22 @@ public: QVector<qreal> keyframePositions() const; QVector<qreal> keyframePositions(const QmlTimelineKeyframeGroup &frames) const; - qreal snap(qreal frame, bool snapToPlayhead = true); + qreal snap(qreal frame, bool snapToPlayhead = true) override; void setRulerScaling(int scaling); void commitCurrentFrame(qreal frame); - QList<TimelineKeyframeItem *> selectedKeyframes() const; - - bool hasSelection() const; - bool isCurrent(TimelineKeyframeItem *keyframe) const; - bool isKeyframeSelected(TimelineKeyframeItem *keyframe) const; - bool multipleKeyframesSelected() const; - void invalidateSectionForTarget(const ModelNode &modelNode); void invalidateKeyframesForTarget(const ModelNode &modelNode); void invalidateScene(); - void invalidateScrollbar(); + void invalidateScrollbar() override; void invalidateCurrentValues(); void invalidateRecordButtonsStatus(); - int scrollOffset() const; - void setScrollOffset(int offset); - QGraphicsView *graphicsView() const; - QGraphicsView *rulerView() const; - QmlTimeline currentTimeline() const; - QRectF selectionBounds() const; - - void selectKeyframes(const SelectionMode &mode, const QList<TimelineKeyframeItem *> &items); - void clearSelection(); - void handleKeyframeDeletion(); void deleteAllKeyframesForTarget(const ModelNode &targetNode); void insertAllKeyframesForTarget(const ModelNode &targetNode); @@ -143,8 +179,7 @@ public: void activateLayout(); -signals: - void statusBarMessageChanged(const QString &message); + AbstractView *abstractView() const override; protected: bool event(QEvent *event) override; @@ -163,7 +198,6 @@ private: void invalidateSections(); ModelNode timelineModelNode() const; - void emitScrollOffsetChanged(); void emitStatusBarPlayheadFrameChanged(int frame); QList<QGraphicsItem *> itemsAt(const QPointF &pos); @@ -178,12 +212,8 @@ private: TimelineToolDelegate m_tools; - QList<TimelineKeyframeItem *> m_selectedKeyframes; - // sorted, unique cache of keyframes positions, used for snapping QVector<qreal> m_keyframePositionsCache; - - int m_scrollOffset = 0; }; } // namespace QmlDesigner |