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