Skip to content

Commit b541028

Browse files
committed
Add ProjectViewModelContext
1 parent 074a55a commit b541028

File tree

6 files changed

+113
-1
lines changed

6 files changed

+113
-1
lines changed

src/plugins/coreplugin/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ qm_configure_target(${PROJECT_NAME}
6060
# JetBrainsDockingSystem
6161
# dspxmodel
6262
opendspx::opendspx
63+
ScopicFlowCore
64+
ScopicFlowViews
6365
INCLUDE_PRIVATE
6466
core
6567
windows
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include "projectviewmodelcontext.h"
2+
#include "projectviewmodelcontext_p.h"
3+
4+
#include <QBindable>
5+
6+
#include <ScopicFlowCore/PlaybackViewModel.h>
7+
8+
#include <coreplugin/projecttimeline.h>
9+
10+
namespace Core {
11+
12+
static void bindProjectTimeLineToViewModel(ProjectTimeline *projectTimeline, sflow::PlaybackViewModel *playbackViewModel) {
13+
QObject::connect(projectTimeline, &ProjectTimeline::positionChanged, playbackViewModel, [=] {
14+
playbackViewModel->setPrimaryPosition(projectTimeline->position());
15+
});
16+
QObject::connect(projectTimeline, &ProjectTimeline::lastPositionChanged, playbackViewModel, [=] {
17+
playbackViewModel->setSecondaryPosition(projectTimeline->lastPosition());
18+
});
19+
QObject::connect(playbackViewModel, &sflow::PlaybackViewModel::primaryPositionChanged, projectTimeline, [=] {
20+
projectTimeline->setPosition(playbackViewModel->primaryPosition());
21+
});
22+
QObject::connect(playbackViewModel, &sflow::PlaybackViewModel::secondaryPositionChanged, projectTimeline, [=] {
23+
projectTimeline->setLastPosition(playbackViewModel->secondaryPosition());
24+
});
25+
playbackViewModel->setPrimaryPosition(projectTimeline->position());
26+
playbackViewModel->setSecondaryPosition(projectTimeline->lastPosition());
27+
}
28+
29+
ProjectViewModelContext::ProjectViewModelContext(ProjectTimeline *projectTimeline, QObject *parent) : QObject(parent), d_ptr(new ProjectViewModelContextPrivate) {
30+
Q_D(ProjectViewModelContext);
31+
d->q_ptr = this;
32+
d->playbackViewModel = new sflow::PlaybackViewModel(this);
33+
bindProjectTimeLineToViewModel(projectTimeline, d->playbackViewModel);
34+
}
35+
36+
ProjectViewModelContext::~ProjectViewModelContext() = default;
37+
38+
sflow::PlaybackViewModel *ProjectViewModelContext::playbackViewModel() const {
39+
Q_D(const ProjectViewModelContext);
40+
return d->playbackViewModel;
41+
}
42+
43+
}
44+
45+
#include "moc_projectviewmodelcontext.cpp"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#ifndef DIFFSCOPE_COREPLUGIN_PROJECTVIEWMODELCONTEXT_H
2+
#define DIFFSCOPE_COREPLUGIN_PROJECTVIEWMODELCONTEXT_H
3+
4+
#include <QObject>
5+
6+
#include <coreplugin/coreglobal.h>
7+
8+
namespace sflow {
9+
class PlaybackViewModel;
10+
}
11+
12+
namespace Core {
13+
14+
class ProjectTimeline;
15+
16+
class ProjectViewModelContextPrivate;
17+
18+
class CORE_EXPORT ProjectViewModelContext : public QObject {
19+
Q_OBJECT
20+
Q_DECLARE_PRIVATE(ProjectViewModelContext)
21+
Q_PROPERTY(sflow::PlaybackViewModel *playbackViewModel READ playbackViewModel CONSTANT)
22+
23+
public:
24+
explicit ProjectViewModelContext(ProjectTimeline *projectTimeline, QObject *parent = nullptr);
25+
~ProjectViewModelContext() override;
26+
27+
sflow::PlaybackViewModel *playbackViewModel() const;
28+
29+
private:
30+
QScopedPointer<ProjectViewModelContextPrivate> d_ptr;
31+
};
32+
33+
}
34+
35+
#endif //DIFFSCOPE_COREPLUGIN_PROJECTVIEWMODELCONTEXT_H
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef DIFFSCOPE_COREPLUGIN_PROJECTVIEWMODELCONTEXT_P_H
2+
#define DIFFSCOPE_COREPLUGIN_PROJECTVIEWMODELCONTEXT_P_H
3+
4+
#include <coreplugin/projectviewmodelcontext.h>
5+
6+
namespace Core {
7+
8+
class ProjectViewModelContextPrivate {
9+
Q_DECLARE_PUBLIC(ProjectViewModelContext)
10+
public:
11+
ProjectViewModelContext *q_ptr;
12+
13+
sflow::PlaybackViewModel *playbackViewModel;
14+
};
15+
16+
}
17+
18+
#endif //DIFFSCOPE_COREPLUGIN_PROJECTVIEWMODELCONTEXT_P_H

src/plugins/coreplugin/windows/projectwindowinterface.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <coreplugin/editactionshandlerregistry.h>
3131
#include <coreplugin/projectdocumentcontext.h>
3232
#include <coreplugin/internal/behaviorpreference.h>
33+
#include <coreplugin/projectviewmodelcontext.h>
3334

3435

3536
namespace Core {
@@ -61,12 +62,14 @@ namespace Core {
6162
ProjectTimeline *projectTimeline;
6263
EditActionsHandlerRegistry *mainEditActionsHandlerRegistry;
6364
ProjectDocumentContext *projectDocumentContext;
65+
ProjectViewModelContext *projectViewModelContext;
6466
void init() {
6567
Q_Q(ProjectWindowInterface);
6668
initActionContext();
6769
notificationManager = new Internal::NotificationManager(q);
6870
projectTimeline = new ProjectTimeline(q);
6971
mainEditActionsHandlerRegistry = new EditActionsHandlerRegistry(q);
72+
projectViewModelContext = new ProjectViewModelContext(projectTimeline, q);
7073
}
7174

7275
void initActionContext() {
@@ -163,11 +166,16 @@ namespace Core {
163166
return d->projectDocumentContext;
164167
}
165168

166-
EditActionsHandlerRegistry * ProjectWindowInterface::mainEditActionsHandlerRegistry() const {
169+
EditActionsHandlerRegistry *ProjectWindowInterface::mainEditActionsHandlerRegistry() const {
167170
Q_D(const ProjectWindowInterface);
168171
return d->mainEditActionsHandlerRegistry;
169172
}
170173

174+
ProjectViewModelContext *ProjectWindowInterface::projectViewModelContext() const {
175+
Q_D(const ProjectWindowInterface);
176+
return d->projectViewModelContext;
177+
}
178+
171179
void ProjectWindowInterface::sendNotification(NotificationMessage *message, NotificationBubbleMode mode) {
172180
Q_D(ProjectWindowInterface);
173181
d->notificationManager->addMessage(message, mode);

src/plugins/coreplugin/windows/projectwindowinterface.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ namespace Core {
2525
class NotificationMessage;
2626
class ProjectTimeline;
2727
class EditActionsHandlerRegistry;
28+
class ProjectViewModelContext;
2829

2930
class ProjectDocumentContext;
3031

@@ -37,6 +38,7 @@ namespace Core {
3738
Q_PROPERTY(ProjectTimeline *projectTimeline READ projectTimeline CONSTANT)
3839
Q_PROPERTY(ProjectDocumentContext *projectDocumentContext READ projectDocumentContext CONSTANT)
3940
Q_PROPERTY(EditActionsHandlerRegistry *mainEditActionsHandlerRegistry READ mainEditActionsHandlerRegistry CONSTANT)
41+
Q_PROPERTY(ProjectViewModelContext *projectViewModelContext READ projectViewModelContext CONSTANT)
4042
Q_DECLARE_PRIVATE(ProjectWindowInterface)
4143
public:
4244
static ProjectWindowInterface* instance();
@@ -47,6 +49,8 @@ namespace Core {
4749

4850
EditActionsHandlerRegistry *mainEditActionsHandlerRegistry() const;
4951

52+
ProjectViewModelContext *projectViewModelContext() const;
53+
5054
enum NotificationBubbleMode {
5155
NormalBubble,
5256
DoNotShowBubble,

0 commit comments

Comments
 (0)