Loading...
Searching...
No Matches
ScenarioDocumentView.hpp
1#pragma once
2#include <Scenario/Document/Minimap/Minimap.hpp>
3#include <Scenario/Document/ScenarioDocument/ScenarioScene.hpp>
4#include <Scenario/Document/TimeRuler/TimeRuler.hpp>
5#include <Scenario/Document/TimeRuler/TimeRulerGraphicsView.hpp>
6
7#include <score/graphics/ArrowDialog.hpp>
8#include <score/graphics/GraphicsProxyObject.hpp>
9#include <score/plugins/documentdelegate/DocumentDelegateView.hpp>
10#include <score/widgets/MimeData.hpp>
11
12#include <ossia/detail/flat_set.hpp>
13
14#include <QGraphicsView>
15#include <QMimeData>
16#include <QPoint>
17#include <QPointer>
18
19#include <score_plugin_scenario_export.h>
20
21#include <verdigris>
22
23class QGraphicsView;
24class QObject;
25class QWidget;
26class ProcessGraphicsView;
27class QFocusEvent;
28class QGraphicsScene;
29class QKeyEvent;
30class QPainterPath;
31class QResizeEvent;
32class QSize;
33class QWheelEvent;
34class SceneGraduations;
35
36namespace score
37{
38struct DocumentContext;
39struct GUIApplicationContext;
40
41class BackgroundRenderer;
42}
43
44namespace Scenario
45{
46class Minimap;
47class ScenarioScene;
48class IntervalDurations;
49class IntervalView;
50class TimeRuler;
51class ScenarioDocumentView;
52class SCORE_PLUGIN_SCENARIO_EXPORT ProcessGraphicsView final : public QGraphicsView
53{
54 W_OBJECT(ProcessGraphicsView)
55public:
57 const score::GUIApplicationContext& ctx, QGraphicsScene* scene, QWidget* parent);
58 ~ProcessGraphicsView() override;
59
60 void scrollHorizontal(double dx);
61 QRectF visibleRect() const noexcept;
62
63 QPointer<score::ArrowDialog> currentPopup{};
64
65 IntervalDurations* currentTimebar{};
66 IntervalView* currentView{};
67
68 score::BackgroundRenderer* currentBackground{};
69 bool timebarPlaying{};
70 bool timebarVisible{};
71
72public:
73 void drawForeground(QPainter* painter, const QRectF& rect) override;
74 void sizeChanged(const QSize& arg_1)
75 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, sizeChanged, arg_1)
76 void scrolled(int arg_1) E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, scrolled, arg_1)
77 void focusedOut() E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, focusedOut)
78 void horizontalZoom(QPointF pixDelta, QPointF pos)
79 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, horizontalZoom, pixDelta, pos)
80 void verticalZoom(QPointF pixDelta, QPointF pos)
81 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, verticalZoom, pixDelta, pos)
82
83 void visibleRectChanged(QRectF r)
84 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, visibleRectChanged, r)
85 void dropRequested(QPoint pos, const QMimeData* mime)
86 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, dropRequested, pos, mime)
87 void emptyContextMenuRequested(QPoint pos)
88 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, emptyContextMenuRequested, pos)
89
90 void dropFinished() W_SIGNAL(dropFinished);
91
92private:
93 void resizeEvent(QResizeEvent* ev) override;
94 void scrollContentsBy(int dx, int dy) override;
95 void wheelEvent(QWheelEvent* event) override;
96 void keyPressEvent(QKeyEvent* event) override;
97 void keyReleaseEvent(QKeyEvent* event) override;
98 void focusOutEvent(QFocusEvent* event) override;
99 void leaveEvent(QEvent* event) override;
100 void mousePressEvent(QMouseEvent* event) override;
101 void mouseMoveEvent(QMouseEvent* event) override;
102 void mouseReleaseEvent(QMouseEvent* event) override;
103 void dragEnterEvent(QDragEnterEvent* event) override;
104 void dragMoveEvent(QDragMoveEvent* event) override;
105 void dragLeaveEvent(QDragLeaveEvent* event) override;
106 void dropEvent(QDropEvent* event) override;
107 void contextMenuEvent(QContextMenuEvent* event) override;
108 bool event(QEvent*) override;
109
110 void hoverEnterEvent(QHoverEvent* event);
111 void hoverMoveEvent(QHoverEvent* event);
112 void hoverLeaveEvent(QHoverEvent* event);
113
114 void checkAndRemoveCurrentDialog(QPoint pos);
115 void drawBackground(QPainter* painter, const QRectF& rect) override;
116 const score::GUIApplicationContext& m_app;
117
118 std::chrono::steady_clock::time_point m_lastwheel;
119 ossia::flat_set<Qt::MouseButton> m_press_release_chain{};
120 std::vector<score::BackgroundRenderer*> m_globalRenderers;
121 bool m_opengl{false};
122
123 friend class ScenarioDocumentView;
124};
125
126class SCORE_PLUGIN_SCENARIO_EXPORT ScenarioDocumentView final
128{
129 W_OBJECT(ScenarioDocumentView)
130
131public:
132 ScenarioDocumentView(const score::DocumentContext& ctx, QObject* parent);
133 ~ScenarioDocumentView() override;
134
135 QWidget* getWidget() override;
136
137 BaseGraphicsObject& baseItem() { return m_baseObject; }
138
139 ScenarioScene& scene() { return m_scene; }
140
141 ProcessGraphicsView& view() { return m_view; }
142
143 qreal viewWidth() const;
144
145 QGraphicsView& rulerView() { return m_timeRulerView; }
146
147 TimeRulerBase& timeRuler() { return *m_timeRuler; }
148
149 Minimap& minimap() { return m_minimap; }
150
151 QRectF viewportRect() const;
152 QRectF visibleSceneRect() const;
153
154 void showRulers(bool);
155 void ready() override;
156
157 void zoom(double zx, double zy);
158 void scroll(double dx, double dy);
159
160 void addBackgroundRenderer(score::BackgroundRenderer*);
161 void removeBackgroundRenderer(score::BackgroundRenderer*);
162 void updateBackgroundMode();
163
164 void elementsScaleChanged(double arg_1) W_SIGNAL(elementsScaleChanged, arg_1);
165 void setLargeView() W_SIGNAL(setLargeView);
166 void timeRulerChanged() W_SIGNAL(timeRulerChanged);
167
168private:
169 void timerEvent(QTimerEvent* event) override;
170 QWidget* m_widget{};
171 const score::DocumentContext& m_context;
172 ScenarioScene m_scene;
173 ProcessGraphicsView m_view;
174 BaseGraphicsObject m_baseObject;
175
176 QGraphicsScene m_timeRulerScene;
177 TimeRulerGraphicsView m_timeRulerView;
178 TimeRulerBase* m_timeRuler{};
179 QGraphicsScene m_minimapScene;
180 MinimapGraphicsView m_minimapView;
181 Minimap m_minimap;
182
183 int m_timer{};
184 bool m_transport{};
185};
186}
Definition GraphicsProxyObject.hpp:8
Definition IntervalDurations.hpp:23
Definition IntervalView.hpp:34
Definition TimeRulerGraphicsView.hpp:11
Definition Minimap.hpp:16
Definition ScenarioDocumentView.hpp:53
Definition ScenarioDocumentView.hpp:128
Definition ScenarioScene.hpp:9
Definition TimeRuler.hpp:36
Definition TimeRulerGraphicsView.hpp:6
Definition BackgroundRenderer.hpp:13
Definition DocumentDelegateView.hpp:10
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13
Base toolkit upon which the software is built.
Definition Application.cpp:111
Definition DocumentContext.hpp:18
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15