11#include " PlaybackViewModelContextData_p.h"
22
33#include < QLoggingCategory>
4+ #include < QQuickItem>
5+ #include < QState>
6+ #include < QStateMachine>
47
58#include < ScopicFlowCore/PlaybackViewModel.h>
9+ #include < ScopicFlowCore/TimelineInteractionController.h>
610
711#include < coreplugin/ProjectTimeline.h>
812#include < coreplugin/ProjectWindowInterface.h>
@@ -13,10 +17,51 @@ namespace VisualEditor {
1317
1418 Q_STATIC_LOGGING_CATEGORY (lcPlaybackViewModelContextData, " diffscope.visualeditor.playbackviewmodelcontextdata" )
1519
20+ void PlaybackViewModelContextData::initStateMachine () {
21+ stateMachine = new QStateMachine (QState::ExclusiveStates, this );
22+ idleState = new QState;
23+ rubberBandDraggingState = new QState;
24+ positionIndicatorMovingState = new QState;
25+ stateMachine->addState (idleState);
26+ stateMachine->addState (rubberBandDraggingState);
27+ stateMachine->addState (positionIndicatorMovingState);
28+ stateMachine->setInitialState (idleState);
29+ stateMachine->start ();
30+
31+ idleState->addTransition (this , &PlaybackViewModelContextData::rubberBandDragWillStart, rubberBandDraggingState);
32+ rubberBandDraggingState->addTransition (this , &PlaybackViewModelContextData::rubberBandDragWillFinish, idleState);
33+
34+ idleState->addTransition (this , &PlaybackViewModelContextData::positionIndicatorMoveWillStart, positionIndicatorMovingState);
35+ positionIndicatorMovingState->addTransition (this , &PlaybackViewModelContextData::positionIndicatorMoveWillFinish, idleState);
36+
37+ connect (idleState, &QState::entered, this , [=, this ] {
38+ qCInfo (lcPlaybackViewModelContextData) << " Idle state entered" ;
39+ });
40+ connect (idleState, &QState::exited, this , [=, this ] {
41+ qCInfo (lcPlaybackViewModelContextData) << " Idle state exited" ;
42+ });
43+ connect (rubberBandDraggingState, &QState::entered, this , [=, this ] {
44+ qCInfo (lcPlaybackViewModelContextData) << " Rubber band dragging state entered" ;
45+ });
46+ connect (rubberBandDraggingState, &QState::exited, this , [=, this ] {
47+ qCInfo (lcPlaybackViewModelContextData) << " Rubber band dragging state exited" ;
48+ });
49+ connect (positionIndicatorMovingState, &QState::entered, this , [=, this ] {
50+ qCInfo (lcPlaybackViewModelContextData) << " Position indicator moving state entered" ;
51+ onPositionIndicatorMovingStateEntered ();
52+ });
53+ connect (positionIndicatorMovingState, &QState::exited, this , [=, this ] {
54+ qCInfo (lcPlaybackViewModelContextData) << " Position indicator moving state exited" ;
55+ onPositionIndicatorMovingStateExited ();
56+ });
57+ }
58+
1659 void PlaybackViewModelContextData::init () {
1760 Q_Q (ProjectViewModelContext);
1861 windowHandle = q->windowHandle ();
1962 playbackViewModel = new sflow::PlaybackViewModel (q);
63+
64+ initStateMachine ();
2065 }
2166
2267 void PlaybackViewModelContextData::bindPlaybackViewModel () {
@@ -49,4 +94,32 @@ namespace VisualEditor {
4994 playbackViewModel->setSecondaryPosition (projectTimeline->lastPosition ());
5095 }
5196
97+ sflow::TimelineInteractionController *PlaybackViewModelContextData::createController (QObject *parent) {
98+ auto controller = new sflow::TimelineInteractionController (parent);
99+ controller->setInteraction (sflow::TimelineInteractionController::MovePositionIndicator | sflow::TimelineInteractionController::ZoomByRubberBand);
100+
101+ connect (controller, &sflow::TimelineInteractionController::rubberBandDraggingStarted, this , [=](QQuickItem *) {
102+ Q_EMIT rubberBandDragWillStart ();
103+ });
104+ connect (controller, &sflow::TimelineInteractionController::rubberBandDraggingFinished, this , [=](QQuickItem *, sflow::TimelineInteractionController::InteractionFlag) {
105+ Q_EMIT rubberBandDragWillFinish ();
106+ });
107+ connect (controller, &sflow::TimelineInteractionController::positionIndicatorMovingStarted, this , [=](QQuickItem *) {
108+ Q_EMIT positionIndicatorMoveWillStart ();
109+ });
110+ connect (controller, &sflow::TimelineInteractionController::positionIndicatorMovingFinished, this , [=](QQuickItem *) {
111+ Q_EMIT positionIndicatorMoveWillFinish ();
112+ });
113+
114+ return controller;
115+ }
116+
117+ void PlaybackViewModelContextData::onPositionIndicatorMovingStateEntered () {
118+ // TODO
119+ }
120+
121+ void PlaybackViewModelContextData::onPositionIndicatorMovingStateExited () {
122+ // TODO
123+ }
124+
52125}
0 commit comments