Loading...
Searching...
No Matches
TimeSignatureItem.hpp
1#pragma once
2#include <Scenario/Document/Interval/FullView/Timebar.hpp>
3#include <Scenario/Document/Interval/TimeSignatureMap.hpp>
4
5#include <ossia/editor/scenario/time_signature.hpp>
6
7#include <QGraphicsTextItem>
8#include <QObject>
9
10#include <verdigris>
11
12namespace Process
13{
14class MagnetismAdjuster;
15}
16
17namespace Scenario
18{
19class IntervalModel;
20class FullViewIntervalPresenter;
21class LineTextItem final : public QGraphicsTextItem
22{
23 W_OBJECT(LineTextItem)
24public:
25 LineTextItem(QGraphicsItem* parent) noexcept;
26
27 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
28 override;
29
30 void keyPressEvent(QKeyEvent* ev) override;
31 void keyReleaseEvent(QKeyEvent* ev) override;
32 void focusOutEvent(QFocusEvent* event) override;
33 void done(QString s) W_SIGNAL(done, s)
34};
35
37 : public QObject
38 , public QGraphicsItem
39{
40 W_OBJECT(TimeSignatureHandle)
41public:
42 explicit TimeSignatureHandle(QGraphicsItem* parent);
44
45 QRectF boundingRect() const final override;
46
47 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
48 override;
49
50 void setSignature(TimeVal time, ossia::time_signature sig);
51
52 const TimeVal& time() const;
53 const ossia::time_signature& signature() const;
54
55 void move(double originalPos, double delta) W_SIGNAL(move, originalPos, delta);
56 void press() W_SIGNAL(press);
57 void release() W_SIGNAL(release);
58 void remove() W_SIGNAL(remove);
59 void signatureChange(ossia::time_signature sig) W_SIGNAL(signatureChange, sig);
60
61 bool pressed{};
62
63protected:
64 void updateImpl();
65
66 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mv) override;
67 TimeVal m_time{};
68 ossia::time_signature m_sig{0, 0};
69 QPixmap m_signature;
70 QRectF m_rect;
71
72public:
73 bool m_visible{true};
74};
75
77 : public QObject
78 , public QGraphicsItem
79{
80 W_OBJECT(StartMarker)
81public:
82 explicit StartMarker(QGraphicsItem* parent);
84
85 QRectF boundingRect() const final override;
86
87 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
88 override;
89
90 void move(double originalPos, double delta) W_SIGNAL(move, originalPos, delta);
91 void press() W_SIGNAL(press);
92 void release() W_SIGNAL(release);
93 void remove() W_SIGNAL(remove);
94
95 void mousePressEvent(QGraphicsSceneMouseEvent* mv) override;
96 void mouseMoveEvent(QGraphicsSceneMouseEvent* mv) override;
97 void mouseReleaseEvent(QGraphicsSceneMouseEvent* mv) override;
98
99 bool pressed{};
100
101private:
102 double m_origItemX{};
103 double m_pressX{};
104 TimeVal m_time{};
105};
106
108{
109public:
110 using TimeSignatureHandle::TimeSignatureHandle;
111};
112
114{
115public:
116 using TimeSignatureHandle::TimeSignatureHandle;
117
118private:
119 double m_origItemX{};
120 double m_pressX{};
121
122 void mousePressEvent(QGraphicsSceneMouseEvent* mv) override;
123 void mouseMoveEvent(QGraphicsSceneMouseEvent* mv) override;
124 void mouseReleaseEvent(QGraphicsSceneMouseEvent* mv) override;
125};
126
128 : public QObject
129 , public QGraphicsItem
130{
131public:
132 TimeSignatureItem(const FullViewIntervalPresenter& itv, QGraphicsItem* parent);
133
134 void createHandle(TimeVal time, ossia::time_signature sig);
135 void setZoomRatio(ZoomRatio r);
136 void setWidth(double w);
137 void setModel(const IntervalModel* model, TimeVal delta);
138 void updateStartMarker();
139
140private:
141 int type() const override { return 90076; }
142 void handlesChanged();
143
144 void moveHandle(TimeSignatureHandle& handle, double originalPos, double delta);
145
146 void removeHandle(TimeSignatureHandle& handle);
147 QRectF boundingRect() const final override;
148 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
149 override;
150 void requestNewHandle(QPointF pos);
151 void setStartMarker(QPointF pos);
152 void removeStartMarker();
153 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
154
155 double m_width{100.};
156 ZoomRatio m_ratio{1.};
157
158 const FullViewIntervalPresenter& m_itv;
159 const IntervalModel* m_model{};
160 TimeVal m_timeDelta;
161 Process::MagnetismAdjuster& m_magnetic;
162
163 StartMarker* m_start{};
164 std::vector<TimeSignatureHandle*> m_handles;
165 TimeSignatureMap m_origHandles{};
166
167 TimeVal m_origTime{};
168 ossia::time_signature m_origSig{};
169};
170
173{
175
176 TimeSignatureItem timebar;
177
178 LightBars lightBars;
179 LighterBars lighterBars;
180 std::vector<TimeVal> magneticTimings;
181};
182}
Definition MagnetismAdjuster.hpp:24
Definition TimeSignatureItem.hpp:108
Definition FullViewIntervalPresenter.hpp:30
Definition IntervalModel.hpp:50
Definition Timebar.hpp:14
Definition Timebar.hpp:61
Definition TimeSignatureItem.hpp:22
Definition TimeSignatureItem.hpp:114
Definition TimeSignatureItem.hpp:79
Definition TimeSignatureItem.hpp:39
Definition TimeSignatureItem.hpp:130
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13
Definition TimeSignatureMap.hpp:26
Definition TimeSignatureItem.hpp:173
Definition TimeValue.hpp:21