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}
41
42namespace Scenario
43{
44class Minimap;
45class ScenarioScene;
46class IntervalDurations;
47class IntervalView;
48class TimeRuler;
49class SCORE_PLUGIN_SCENARIO_EXPORT ProcessGraphicsView final : public QGraphicsView
50{
51 W_OBJECT(ProcessGraphicsView)
52public:
54 const score::GUIApplicationContext& ctx, QGraphicsScene* scene, QWidget* parent);
55 ~ProcessGraphicsView() override;
56
57 void scrollHorizontal(double dx);
58 QRectF visibleRect() const noexcept;
59
60 QPointer<score::ArrowDialog> currentPopup{};
61
62 IntervalDurations* currentTimebar{};
63 IntervalView* currentView{};
64 bool timebarPlaying{};
65 bool timebarVisible{};
66
67public:
68 void drawForeground(QPainter* painter, const QRectF& rect) override;
69 void sizeChanged(const QSize& arg_1)
70 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, sizeChanged, arg_1)
71 void scrolled(int arg_1) E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, scrolled, arg_1)
72 void focusedOut() E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, focusedOut)
73 void horizontalZoom(QPointF pixDelta, QPointF pos)
74 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, horizontalZoom, pixDelta, pos)
75 void verticalZoom(QPointF pixDelta, QPointF pos)
76 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, verticalZoom, pixDelta, pos)
77
78 void visibleRectChanged(QRectF r)
79 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, visibleRectChanged, r)
80 void dropRequested(QPoint pos, const QMimeData* mime)
81 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, dropRequested, pos, mime)
82 void emptyContextMenuRequested(QPoint pos)
83 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, emptyContextMenuRequested, pos)
84
85 void dropFinished() W_SIGNAL(dropFinished);
86
87private:
88 void resizeEvent(QResizeEvent* ev) override;
89 void scrollContentsBy(int dx, int dy) override;
90 void wheelEvent(QWheelEvent* event) override;
91 void keyPressEvent(QKeyEvent* event) override;
92 void keyReleaseEvent(QKeyEvent* event) override;
93 void focusOutEvent(QFocusEvent* event) override;
94 void leaveEvent(QEvent* event) override;
95 void mousePressEvent(QMouseEvent* event) override;
96 void mouseMoveEvent(QMouseEvent* event) override;
97 void mouseReleaseEvent(QMouseEvent* event) override;
98 void dragEnterEvent(QDragEnterEvent* event) override;
99 void dragMoveEvent(QDragMoveEvent* event) override;
100 void dragLeaveEvent(QDragLeaveEvent* event) override;
101 void dropEvent(QDropEvent* event) override;
102 void contextMenuEvent(QContextMenuEvent* event) override;
103 bool event(QEvent*) override;
104
105 void hoverEnterEvent(QHoverEvent* event);
106 void hoverMoveEvent(QHoverEvent* event);
107 void hoverLeaveEvent(QHoverEvent* event);
108
109 void checkAndRemoveCurrentDialog(QPoint pos);
110 // void drawBackground(QPainter* painter, const QRectF& rect) override;
111
112 const score::GUIApplicationContext& m_app;
113
114 std::chrono::steady_clock::time_point m_lastwheel;
115 bool m_opengl{false};
116 ossia::flat_set<Qt::MouseButton> m_press_release_chain{};
117};
118
119class SCORE_PLUGIN_SCENARIO_EXPORT ScenarioDocumentView final
121{
122 W_OBJECT(ScenarioDocumentView)
123
124public:
125 ScenarioDocumentView(const score::DocumentContext& ctx, QObject* parent);
126 ~ScenarioDocumentView() override;
127
128 QWidget* getWidget() override;
129
130 BaseGraphicsObject& baseItem() { return m_baseObject; }
131
132 ScenarioScene& scene() { return m_scene; }
133
134 ProcessGraphicsView& view() { return m_view; }
135
136 qreal viewWidth() const;
137
138 QGraphicsView& rulerView() { return m_timeRulerView; }
139
140 TimeRulerBase& timeRuler() { return *m_timeRuler; }
141
142 Minimap& minimap() { return m_minimap; }
143
144 QRectF viewportRect() const;
145 QRectF visibleSceneRect() const;
146
147 void showRulers(bool);
148 void ready() override;
149
150 void zoom(double zx, double zy);
151 void scroll(double dx, double dy);
152
153public:
154 void elementsScaleChanged(double arg_1) W_SIGNAL(elementsScaleChanged, arg_1);
155 void setLargeView() W_SIGNAL(setLargeView);
156 void timeRulerChanged() W_SIGNAL(timeRulerChanged);
157
158private:
159 void timerEvent(QTimerEvent* event) override;
160 QWidget* m_widget{};
161 const score::DocumentContext& m_context;
162 ScenarioScene m_scene;
163 ProcessGraphicsView m_view;
164 BaseGraphicsObject m_baseObject;
165
166 QGraphicsScene m_timeRulerScene;
167 TimeRulerGraphicsView m_timeRulerView;
168 TimeRulerBase* m_timeRuler{};
169 QGraphicsScene m_minimapScene;
170 MinimapGraphicsView m_minimapView;
171 Minimap m_minimap;
172
173 int m_timer{};
174};
175}
Definition GraphicsProxyObject.hpp:8
Definition IntervalDurations.hpp:23
Definition IntervalView.hpp:34
Definition TimeRulerGraphicsView.hpp:11
Definition Minimap.hpp:16
Definition ScenarioDocumentView.hpp:50
Definition ScenarioDocumentView.hpp:121
Definition ScenarioScene.hpp:9
Definition TimeRuler.hpp:36
Definition TimeRulerGraphicsView.hpp:6
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:97
Definition DocumentContext.hpp:18
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15