ValueTypes.Qt5.hpp
1 #pragma once
2 #include <QObject>
3 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
4 #include <JS/Qml/Metatypes.hpp>
5 
6 #include <ossia/dataflow/graph_node.hpp>
7 #include <ossia/dataflow/token_request.hpp>
8 
9 #include <ossia-qt/time.hpp>
10 
11 #include <QMatrix4x4>
12 #include <QVector2D>
13 #include <QVector3D>
14 #include <QVector4D>
15 
16 #include <verdigris>
17 
18 namespace JS
19 {
20 void registerQmlValueTypeProvider();
21 
22 class Vec2fValueType
23 {
24  QVector2D v;
25  W_GADGET(Vec2fValueType)
26 public:
27  QString toString() const;
28  W_INVOKABLE(toString)
29 
30  qreal x() const;
31  qreal y() const;
32  void setX(qreal);
33  void setY(qreal);
34 
35  qreal dotProduct(const QVector2D& vec) const;
36  W_INVOKABLE(dotProduct)
37 
38  QVector2D times(const QVector2D& vec) const;
39  W_INVOKABLE(times, (const QVector2D&))
40  QVector2D times(qreal scalar) const;
41  W_INVOKABLE(times, (qreal))
42 
43  QVector2D plus(const QVector2D& vec) const;
44  W_INVOKABLE(plus)
45  QVector2D minus(const QVector2D& vec) const;
46  W_INVOKABLE(minus)
47  QVector2D normalized() const;
48  W_INVOKABLE(normalized)
49  qreal length() const;
50  W_INVOKABLE(length)
51 
52  QVector3D toVector3d() const;
53  W_INVOKABLE(toVector3d)
54  QVector4D toVector4d() const;
55  W_INVOKABLE(toVector4d)
56 
57  bool fuzzyEquals(const QVector2D& vec, qreal epsilon) const;
58  W_INVOKABLE(fuzzyEquals, (const QVector2D&, qreal))
59  bool fuzzyEquals(const QVector2D& vec) const;
60  W_INVOKABLE(fuzzyEquals, (const QVector2D&))
61 
62  W_PROPERTY(qreal, x READ x WRITE setX FINAL)
63  W_PROPERTY(qreal, y READ y WRITE setY FINAL)
64 };
65 
66 class Vec3fValueType
67 {
68  QVector3D v;
69  W_GADGET(Vec3fValueType)
70 public:
71  QString toString() const;
72  W_INVOKABLE(toString)
73 
74  qreal x() const;
75  qreal y() const;
76  qreal z() const;
77  void setX(qreal);
78  void setY(qreal);
79  void setZ(qreal);
80 
81  QVector3D crossProduct(const QVector3D& vec) const;
82  W_INVOKABLE(crossProduct)
83  qreal dotProduct(const QVector3D& vec) const;
84  W_INVOKABLE(dotProduct)
85 
86  QVector3D times(const QVector3D& vec) const;
87  W_INVOKABLE(times, (const QVector3D&))
88  QVector3D times(const QMatrix4x4& m) const;
89  W_INVOKABLE(times, (const QMatrix4x4&))
90  QVector3D times(qreal scalar) const;
91  W_INVOKABLE(times, (qreal))
92 
93  QVector3D plus(const QVector3D& vec) const;
94  W_INVOKABLE(plus)
95  QVector3D minus(const QVector3D& vec) const;
96  W_INVOKABLE(minus)
97  QVector3D normalized() const;
98  W_INVOKABLE(normalized)
99  qreal length() const;
100  W_INVOKABLE(length)
101 
102  QVector2D toVector2d() const;
103  W_INVOKABLE(toVector2d)
104  QVector4D toVector4d() const;
105  W_INVOKABLE(toVector4d)
106 
107  bool fuzzyEquals(const QVector3D& vec, qreal epsilon) const;
108  W_INVOKABLE(fuzzyEquals, (const QVector3D&, qreal))
109  bool fuzzyEquals(const QVector3D& vec) const;
110  W_INVOKABLE(fuzzyEquals, (const QVector3D&))
111 
112  W_PROPERTY(qreal, x READ x WRITE setX FINAL)
113  W_PROPERTY(qreal, y READ y WRITE setY FINAL)
114  W_PROPERTY(qreal, z READ z WRITE setZ FINAL)
115 };
116 
117 class Vec4fValueType
118 {
119  QVector4D v;
120  W_GADGET(Vec4fValueType)
121 public:
122  QString toString() const;
123  W_INVOKABLE(toString)
124 
125  qreal x() const;
126  qreal y() const;
127  qreal z() const;
128  qreal w() const;
129  void setX(qreal);
130  void setY(qreal);
131  void setZ(qreal);
132  void setW(qreal);
133 
134  qreal dotProduct(const QVector4D& vec) const;
135  W_INVOKABLE(dotProduct)
136 
137  QVector4D times(const QVector4D& vec) const;
138  W_INVOKABLE(times, (const QVector4D&))
139  QVector4D times(const QMatrix4x4& m) const;
140  W_INVOKABLE(times, (const QMatrix4x4&))
141  QVector4D times(qreal scalar) const;
142  W_INVOKABLE(times, (qreal))
143 
144  QVector4D plus(const QVector4D& vec) const;
145  W_INVOKABLE(plus)
146  QVector4D minus(const QVector4D& vec) const;
147  W_INVOKABLE(minus)
148  QVector4D normalized() const;
149  W_INVOKABLE(normalized)
150  qreal length() const;
151  W_INVOKABLE(length)
152 
153  QVector2D toVector2d() const;
154  W_INVOKABLE(toVector2d)
155  QVector3D toVector3d() const;
156  W_INVOKABLE(toVector3d)
157 
158  bool fuzzyEquals(const QVector4D& vec, qreal epsilon) const;
159  W_INVOKABLE(fuzzyEquals, (const QVector4D&, qreal))
160  bool fuzzyEquals(const QVector4D& vec) const;
161  W_INVOKABLE(fuzzyEquals, (const QVector4D&))
162 
163  W_PROPERTY(qreal, x READ x WRITE setX FINAL)
164  W_PROPERTY(qreal, y READ y WRITE setY FINAL)
165  W_PROPERTY(qreal, z READ z WRITE setZ FINAL)
166  W_PROPERTY(qreal, w READ w WRITE setW FINAL)
167 };
168 
169 class TokenRequestValueType
170 {
171  W_GADGET(TokenRequestValueType)
172 public:
173  ossia::token_request req;
174 
175  double previous_date() const noexcept;
176  double date() const noexcept;
177  double parent_duration() const noexcept;
178  double offset() const noexcept;
179  double speed() const noexcept;
180  double tempo() const noexcept;
181 
182  double musical_start_last_signature() const noexcept;
183  double musical_start_last_bar() const noexcept;
184  double musical_start_position() const noexcept;
185  double musical_end_last_bar() const noexcept;
186  double musical_end_position() const noexcept;
187 
188  double signature_upper() const noexcept;
189  double signature_lower() const noexcept;
190 
191  double model_read_duration() const noexcept;
192  W_INVOKABLE(model_read_duration)
193  double physical_start(double ratio) const noexcept;
194  W_INVOKABLE(physical_start)
195  double physical_read_duration(double ratio) const noexcept;
196  W_INVOKABLE(physical_read_duration)
197  double physical_write_duration(double ratio) const noexcept;
198  W_INVOKABLE(physical_write_duration)
199  bool in_range(double time) const noexcept;
200  W_INVOKABLE(in_range)
201  double to_physical_time_in_tick(double time, double ratio) const noexcept;
202  W_INVOKABLE(to_physical_time_in_tick)
203  double from_physical_time_in_tick(double time, double ratio) const noexcept;
204  W_INVOKABLE(from_physical_time_in_tick)
205 
206  double position() const noexcept;
207  W_INVOKABLE(position)
208  bool forward() const noexcept;
209  W_INVOKABLE(forward)
210  bool backward() const noexcept;
211  W_INVOKABLE(backward)
212  bool paused() const noexcept;
213  W_INVOKABLE(paused)
214 
215  double get_quantification_date(double ratio) const noexcept;
216  W_INVOKABLE(get_quantification_date)
217 
218  double get_physical_quantification_date(double rate, double ratio) const noexcept;
219  W_INVOKABLE(get_physical_quantification_date)
220 
221  void set_end_time(double time) noexcept;
222  W_INVOKABLE(set_end_time)
223  void set_start_time(double time) noexcept;
224  W_INVOKABLE(set_start_time)
225 
226  bool unexpected_bar_change() const noexcept;
227  W_INVOKABLE(unexpected_bar_change)
228 
229  W_PROPERTY(double, previous_date READ previous_date FINAL)
230  W_PROPERTY(double, date READ date FINAL)
231  W_PROPERTY(double, parent_duration READ parent_duration FINAL)
232  W_PROPERTY(double, offset READ offset FINAL)
233  W_PROPERTY(double, speed READ speed FINAL)
234  W_PROPERTY(double, tempo READ tempo FINAL)
235 
236  W_PROPERTY(
237  double, musical_start_last_signature READ musical_start_last_signature FINAL)
238  W_PROPERTY(double, musical_start_last_bar READ musical_start_last_bar FINAL)
239  W_PROPERTY(double, musical_start_position READ musical_start_position FINAL)
240  W_PROPERTY(double, musical_end_last_bar READ musical_end_last_bar FINAL)
241  W_PROPERTY(double, musical_end_position READ musical_end_position FINAL)
242 
243  W_PROPERTY(double, signature_upper READ signature_upper FINAL)
244  W_PROPERTY(double, signature_lower READ signature_lower FINAL)
245 };
246 
247 struct SampleTimings
248 {
249  W_GADGET(SampleTimings)
250 public:
251  ossia::exec_state_facade::sample_timings tm{};
252 
253  int start_sample() const noexcept;
254  int length() const noexcept;
255 
256  W_PROPERTY(int, start_sample READ start_sample FINAL)
257  W_PROPERTY(int, length READ length FINAL)
258 };
259 
260 struct ExecutionStateValueType
261 {
262  W_GADGET(ExecutionStateValueType)
263 public:
264  ossia::exec_state_facade req;
265  int sample_rate() const noexcept;
266  int buffer_size() const noexcept;
267  double model_to_physical() const noexcept;
268  double physical_to_model() const noexcept;
269  double physical_date() const noexcept;
270  double start_date_ns() const noexcept;
271  double current_date_ns() const noexcept;
272 
273  SampleTimings timings(ossia::token_request tk) const noexcept;
274  W_INVOKABLE(timings)
275 
276  W_PROPERTY(int, sample_rate READ sample_rate FINAL)
277  W_PROPERTY(int, buffer_size READ buffer_size FINAL)
278  W_PROPERTY(double, model_to_physical READ model_to_physical FINAL)
279  W_PROPERTY(double, physical_to_model READ physical_to_model FINAL)
280  W_PROPERTY(double, physical_date READ physical_date FINAL)
281  W_PROPERTY(double, start_date_ns READ start_date_ns FINAL)
282  W_PROPERTY(double, current_date_ns READ current_date_ns FINAL)
283 };
284 }
285 
286 Q_DECLARE_METATYPE(JS::TokenRequestValueType)
287 W_REGISTER_ARGTYPE(JS::TokenRequestValueType)
288 Q_DECLARE_METATYPE(JS::SampleTimings)
289 W_REGISTER_ARGTYPE(JS::SampleTimings)
290 #endif