11#include " ArrangementPanelInterface.h"
22#include " ArrangementPanelInterface_p.h"
33
4+ #include < cmath>
5+
6+ #include < QQmlComponent>
7+ #include < QQuickItem>
8+
9+ #include < CoreApi/runtimeinterface.h>
10+
11+ #include < ScopicFlowCore/ScrollBehaviorViewModel.h>
12+ #include < ScopicFlowCore/TimeLayoutViewModel.h>
13+ #include < ScopicFlowCore/TimeViewModel.h>
14+ #include < ScopicFlowCore/TimelineInteractionController.h>
15+
416#include < coreplugin/ProjectWindowInterface.h>
17+ #include < coreplugin/ProjectTimeline.h>
18+
19+ #include < visualeditor/ProjectViewModelContext.h>
20+ #include < visualeditor/internal/EditorPreference.h>
521
622namespace VisualEditor {
723
24+ void ArrangementPanelInterfacePrivate::bindTimeViewModel () const {
25+ auto projectTimeline = windowHandle->projectTimeline ();
26+ timeViewModel->setTimeline (projectTimeline->musicTimeline ());
27+ timeViewModel->setEnd (projectTimeline->rangeHint ());
28+ QObject::connect (projectTimeline, &Core::ProjectTimeline::rangeHintChanged, timeViewModel, [=, this ] {
29+ timeViewModel->setEnd (projectTimeline->rangeHint ());
30+ });
31+ QObject::connect (timeViewModel, &sflow::TimeViewModel::endChanged, projectTimeline, [=, this ] {
32+ projectTimeline->setRangeHint (static_cast <int >(std::ceil (timeViewModel->end ())));
33+ });
34+ }
35+ void ArrangementPanelInterfacePrivate::bindTimeLayoutViewModel () const {
36+ }
37+ void ArrangementPanelInterfacePrivate::bindTimelineInteractionController () const {
38+ }
39+
40+ static Qt::KeyboardModifier getModifier (Internal::EditorPreference::ScrollModifier modifier) {
41+ switch (modifier) {
42+ case Internal::EditorPreference::SM_Control:
43+ return Qt::ControlModifier;
44+ case Internal::EditorPreference::SM_Alt:
45+ return Qt::AltModifier;
46+ case Internal::EditorPreference::SM_Shift:
47+ return Qt::ShiftModifier;
48+ }
49+ Q_UNREACHABLE ();
50+ }
51+
52+ void ArrangementPanelInterfacePrivate::bindScrollBehaviorViewModel () const {
53+ scrollBehaviorViewModel->setAlternateAxisModifier (getModifier (Internal::EditorPreference::alternateAxisModifier ()));
54+ scrollBehaviorViewModel->setZoomModifier (getModifier (Internal::EditorPreference::zoomModifier ()));
55+ scrollBehaviorViewModel->setPageModifier (getModifier (Internal::EditorPreference::pageModifier ()));
56+ scrollBehaviorViewModel->setUsePageModifierAsAlternateAxisZoom (Internal::EditorPreference::usePageModifierAsAlternateAxisZoom ());
57+ scrollBehaviorViewModel->setAutoScroll (Internal::EditorPreference::middleButtonAutoScroll ());
58+ QObject::connect (Internal::EditorPreference::instance (), &Internal::EditorPreference::alternateAxisModifierChanged, scrollBehaviorViewModel, [=, this ] {
59+ scrollBehaviorViewModel->setAlternateAxisModifier (getModifier (Internal::EditorPreference::alternateAxisModifier ()));
60+ });
61+ QObject::connect (Internal::EditorPreference::instance (), &Internal::EditorPreference::zoomModifierChanged, scrollBehaviorViewModel, [=, this ] {
62+ scrollBehaviorViewModel->setZoomModifier (getModifier (Internal::EditorPreference::zoomModifier ()));
63+ });
64+ QObject::connect (Internal::EditorPreference::instance (), &Internal::EditorPreference::pageModifierChanged, scrollBehaviorViewModel, [=, this ] {
65+ scrollBehaviorViewModel->setPageModifier (getModifier (Internal::EditorPreference::pageModifier ()));
66+ });
67+ QObject::connect (Internal::EditorPreference::instance (), &Internal::EditorPreference::usePageModifierAsAlternateAxisZoomChanged, scrollBehaviorViewModel, [=, this ] {
68+ scrollBehaviorViewModel->setUsePageModifierAsAlternateAxisZoom (Internal::EditorPreference::usePageModifierAsAlternateAxisZoom ());
69+ });
70+ QObject::connect (Internal::EditorPreference::instance (), &Internal::EditorPreference::middleButtonAutoScrollChanged, scrollBehaviorViewModel, [=, this ] {
71+ scrollBehaviorViewModel->setAutoScroll (Internal::EditorPreference::middleButtonAutoScroll ());
72+ });
73+ }
74+
875 ArrangementPanelInterface::ArrangementPanelInterface (Core::ProjectWindowInterface *windowHandle) : QObject(windowHandle), d_ptr(new ArrangementPanelInterfacePrivate) {
976 Q_D (ArrangementPanelInterface);
1077 Q_ASSERT (windowHandle->getObjects (staticMetaObject.className ()).isEmpty ());
1178 windowHandle->addObject (staticMetaObject.className (), this );
1279 d->q_ptr = this ;
1380 d->windowHandle = windowHandle;
81+
82+ d->timeViewModel = new sflow::TimeViewModel (this );
83+ d->timeLayoutViewModel = new sflow::TimeLayoutViewModel (this );
84+ d->timelineInteractionController = new sflow::TimelineInteractionController (this );
85+ d->scrollBehaviorViewModel = new sflow::ScrollBehaviorViewModel (this );
86+
87+ QQmlComponent component (Core::RuntimeInterface::qmlEngine (), " DiffScope.VisualEditor" , " ArrangementView" );
88+ if (component.isError ()) {
89+ qFatal () << component.errorString ();
90+ }
91+ auto o = component.createWithInitialProperties ({
92+ {" arrangementPanelInterface" , QVariant::fromValue (this )},
93+ {" projectViewModelContext" , QVariant::fromValue (ProjectViewModelContext::of (d->windowHandle ))},
94+ });
95+ if (component.isError ()) {
96+ qFatal () << component.errorString ();
97+ }
98+ o->setParent (this );
99+ d->arrangementView = qobject_cast<QQuickItem *>(o);
100+ Q_ASSERT (d->arrangementView );
101+
102+ d->bindTimeViewModel ();
103+ d->bindTimeLayoutViewModel ();
104+ d->bindTimelineInteractionController ();
105+ d->bindScrollBehaviorViewModel ();
14106 }
15107
16108 ArrangementPanelInterface::~ArrangementPanelInterface () = default ;
@@ -19,6 +111,33 @@ namespace VisualEditor {
19111 return qobject_cast<ArrangementPanelInterface *>(windowHandle->getFirstObject (staticMetaObject.className ()));
20112 }
21113
114+ Core::ProjectWindowInterface *ArrangementPanelInterface::windowHandle () const {
115+ Q_D (const ArrangementPanelInterface);
116+ return d->windowHandle ;
117+ }
118+
119+ sflow::TimeViewModel *ArrangementPanelInterface::timeViewModel () const {
120+ Q_D (const ArrangementPanelInterface);
121+ return d->timeViewModel ;
122+ }
123+ sflow::TimeLayoutViewModel *ArrangementPanelInterface::timeLayoutViewModel () const {
124+ Q_D (const ArrangementPanelInterface);
125+ return d->timeLayoutViewModel ;
126+ }
127+ sflow::ScrollBehaviorViewModel *ArrangementPanelInterface::scrollBehaviorViewModel () const {
128+ Q_D (const ArrangementPanelInterface);
129+ return d->scrollBehaviorViewModel ;
130+ }
131+ sflow::TimelineInteractionController *ArrangementPanelInterface::timelineInteractionController () const {
132+ Q_D (const ArrangementPanelInterface);
133+ return d->timelineInteractionController ;
134+ }
135+
136+ QQuickItem *ArrangementPanelInterface::arrangementView () const {
137+ Q_D (const ArrangementPanelInterface);
138+ return d->arrangementView ;
139+ }
140+
22141}
23142
24143#include " moc_ArrangementPanelInterface.cpp"
0 commit comments