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 void handlesChanged();
142
143 void moveHandle(TimeSignatureHandle& handle, double originalPos, double delta);
144
145 void removeHandle(TimeSignatureHandle& handle);
146 QRectF boundingRect() const final override;
147 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
148 override;
149 void requestNewHandle(QPointF pos);
150 void setStartMarker(QPointF pos);
151 void removeStartMarker();
152 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
153
154 double m_width{100.};
155 ZoomRatio m_ratio{1.};
156
157 const FullViewIntervalPresenter& m_itv;
158 const IntervalModel* m_model{};
159 TimeVal m_timeDelta;
160 Process::MagnetismAdjuster& m_magnetic;
161
162 StartMarker* m_start{};
163 std::vector<TimeSignatureHandle*> m_handles;
164 TimeSignatureMap m_origHandles{};
165
166 TimeVal m_origTime{};
167 ossia::time_signature m_origSig{};
168};
169
172{
174
175 TimeSignatureItem timebar;
176
177 LightBars lightBars;
178 LighterBars lighterBars;
179 std::vector<TimeVal> magneticTimings;
180};
181}
Definition MagnetismAdjuster.hpp:24
Definition TimeSignatureItem.hpp:108
Definition FullViewIntervalPresenter.hpp:30
Definition IntervalModel.hpp:50
Definition Timebar.hpp:14
Definition Timebar.hpp:59
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:1324
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13
Definition TimeSignatureMap.hpp:26
Definition TimeSignatureItem.hpp:172
Definition TimeValue.hpp:21