Loading...
Searching...
No Matches
WidgetInlets.hpp
1#pragma once
2#include <Process/Dataflow/Port.hpp>
3
5
6#include <ossia/network/domain/domain.hpp>
7
8#include <optional>
9
10class QFileSystemWatcher;
11
12namespace Process
13{
14struct FloatSlider;
15struct FloatKnob;
16struct LogFloatSlider;
17struct IntSlider;
18struct IntRangeSlider;
19struct FloatRangeSlider;
20struct IntRangeSpinBox;
21struct FloatRangeSpinBox;
22struct IntSpinBox;
23struct FloatSpinBox;
24struct TimeChooser;
25struct GridChooser;
26struct Toggle;
27struct ChooserToggle;
28struct ComboBox;
29struct LineEdit;
30struct ProgramEdit;
31struct FileChooser;
32struct FolderChooser;
33struct AudioFileChooser;
34struct VideoFileChooser;
35struct Enum;
36struct Button;
37struct ImpulseButton;
38struct HSVSlider;
39struct XYSlider;
40struct XYZSlider;
41struct XYSpinboxes;
42struct XYZSpinboxes;
43struct MultiSlider;
44struct MultiSliderXY;
45struct PathGeneratorXY;
46struct Bargraph;
47} // namespace Process
48
49
50
51UUID_METADATA(
52 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FloatSlider,
53 "af2b4fc3-aecb-4c15-a5aa-1c573a239925")
54UUID_METADATA(
55 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FloatKnob,
56 "82427d27-084a-4ab6-9c4e-db83929a1200")
57UUID_METADATA(
58 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::LogFloatSlider,
59 "5554eb67-bcc8-45ab-8ec2-37a3f191aa64")
60
61UUID_METADATA(
62 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::IntSlider,
63 "348b80a4-45dc-4f70-8f5f-6546c85089a2")
64
65UUID_METADATA(
66 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::IntRangeSlider,
67 "0c1902bc-e282-11ec-8fea-0242ac120002")
68UUID_METADATA(
69 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FloatRangeSlider,
70 "73ae3e85-0c91-497e-b612-b1391f87ac72")
71
72UUID_METADATA(
73 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::IntRangeSpinBox,
74 "54dc640b-4385-4a5a-b9da-e44fe63701d9")
75UUID_METADATA(
76 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FloatRangeSpinBox,
77 "25be1f08-a3fb-4ce3-a34e-4d8f54f15874")
78
79UUID_METADATA(
80 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::IntSpinBox,
81 "238399a0-7e81-47e3-896f-08e8856e2973")
82UUID_METADATA(
83 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FloatSpinBox,
84 "10d62b0d-5bc9-4ac9-9540-9e8ac0c24947")
85
86UUID_METADATA(
87 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::Toggle,
88 "fb27e4cb-ea7f-41e2-ad92-2354498c1b6b")
89
90UUID_METADATA(
91 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::ChooserToggle,
92 "27d488b6-784b-4bfc-8e7f-e28ef030c248")
93UUID_METADATA(
94 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::TimeChooser,
95 "b631d9b7-cbe3-4d9c-b470-f139e348aecb")
96UUID_METADATA(
97 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::GridChooser,
98 "4d2fd8a6-012f-4b04-bb02-7a48c37a30bb")
99
100UUID_METADATA(
101 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::LineEdit,
102 "9ae797ea-d94c-4792-acec-9ec1932bae5d")
103UUID_METADATA(
104 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FileChooser,
105 "40833147-4c42-4b8b-bb80-0b1d15dae129")
106UUID_METADATA(
107 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::FolderChooser,
108 "a866e07f-f380-4f69-8bce-e52682db2025")
109UUID_METADATA(
110 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::AudioFileChooser,
111 "c347b510-927a-4924-9da1-c76871623567")
112UUID_METADATA(
113 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::VideoFileChooser,
114 "7d5a68ae-501f-4038-bb24-4a7ffc049923")
115UUID_METADATA(
116 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::ProgramEdit,
117 "de15c0da-429b-49d3-bb07-7c41f5f205c8")
118
119UUID_METADATA(
120 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::Enum,
121 "8b1d76c4-3838-4ac0-9b9c-c12bc5db8e8a")
122
123UUID_METADATA(
124 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::ComboBox,
125 "485680cc-b8b9-4a01-acc7-3e8334bdc016")
126
127UUID_METADATA(
128 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::Button,
129 "feb87e84-e0d2-428f-96ff-a123ac964f59")
130
131UUID_METADATA(
132 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::ImpulseButton,
133 "7cd210d3-ebd1-4f71-9de6-cccfb639cbc3")
134
135UUID_METADATA(
136 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::HSVSlider,
137 "8f38638e-9f9f-48b0-ae36-1cba86ef5703")
138UUID_METADATA(
139 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::XYSlider,
140 "8093743c-584f-4bb9-97d4-6c7602f87116")
141UUID_METADATA(
142 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::XYZSlider,
143 "bae00244-cd93-4893-a4ad-71489adb3fa1")
144UUID_METADATA(
145 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::XYSpinboxes,
146 "0adbbdda-fda4-451e-91cc-1da731bde9d5")
147UUID_METADATA(
148 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::XYZSpinboxes,
149 "377e8205-b442-4d54-8832-3761def522b2")
150UUID_METADATA(
151 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::MultiSlider,
152 "25de6d71-1554-4fe1-bf3f-9cbf12bdadeb")
153UUID_METADATA(
154 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::MultiSliderXY,
155 "ce12611f-f3b0-4f99-b3c0-3f0b25a38aa1")
156UUID_METADATA(
157 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::PathGeneratorXY,
158 "b60d0059-733b-4b57-a1c1-65fa140d3b8a")
159UUID_METADATA(
160 SCORE_LIB_PROCESS_EXPORT, Process::Port, Process::Bargraph,
161 "f6d740ce-acc0-44c0-932a-0a03345af84f")
162
163namespace Process
164{
165struct SCORE_LIB_PROCESS_EXPORT FloatSlider : public Process::ControlInlet
166{
167 W_OBJECT(FloatSlider)
168public:
169 MODEL_METADATA_IMPL(FloatSlider)
170 FloatSlider(
171 float min, float max, float init, const QString& name, Id<Process::Port> id,
172 QObject* parent);
173 ~FloatSlider();
174
175 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
176 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
177 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
178 using Process::ControlInlet::ControlInlet;
179};
180
181struct SCORE_LIB_PROCESS_EXPORT FloatKnob : public Process::ControlInlet
182{
183 W_OBJECT(FloatKnob)
184public:
185 MODEL_METADATA_IMPL(FloatKnob)
186 FloatKnob(
187 float min, float max, float init, const QString& name, Id<Process::Port> id,
188 QObject* parent);
189 ~FloatKnob();
190
191 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
192 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
193 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
194
195 using Process::ControlInlet::ControlInlet;
196};
197
198struct SCORE_LIB_PROCESS_EXPORT LogFloatSlider : public Process::ControlInlet
199{
200 W_OBJECT(LogFloatSlider)
201public:
202 MODEL_METADATA_IMPL(LogFloatSlider)
203 LogFloatSlider(
204 float min, float max, float init, const QString& name, Id<Process::Port> id,
205 QObject* parent);
206 ~LogFloatSlider();
207
208 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
209 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
210 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
211
212 using Process::ControlInlet::ControlInlet;
213};
214
215struct SCORE_LIB_PROCESS_EXPORT IntSlider : public Process::ControlInlet
216{
217 W_OBJECT(IntSlider)
218public:
219 MODEL_METADATA_IMPL(IntSlider)
220 IntSlider(
221 int min, int max, int init, const QString& name, Id<Process::Port> id,
222 QObject* parent);
223 ~IntSlider();
224
225 auto getMin() const noexcept { return domain().get().convert_min<int>(); }
226 auto getMax() const noexcept { return domain().get().convert_max<int>(); }
227 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
228
229 using Process::ControlInlet::ControlInlet;
230};
231
232struct SCORE_LIB_PROCESS_EXPORT IntRangeSlider : public Process::ControlInlet
233{
234 W_OBJECT(IntRangeSlider)
235public:
236 MODEL_METADATA_IMPL(IntRangeSlider)
237 IntRangeSlider(
238 int min, int max, ossia::vec2f init, const QString& name, Id<Process::Port> id,
239 QObject* parent);
240 ~IntRangeSlider();
241
242 auto getMin() const noexcept { return domain().get().convert_min<int>(); }
243 auto getMax() const noexcept { return domain().get().convert_max<int>(); }
244 auto getInit() const noexcept { return ossia::convert<ossia::vec2f>(this->init()); }
245 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
246
247 using Process::ControlInlet::ControlInlet;
248};
249
250struct SCORE_LIB_PROCESS_EXPORT FloatRangeSlider : public Process::ControlInlet
251{
252 W_OBJECT(FloatRangeSlider)
253public:
254 MODEL_METADATA_IMPL(FloatRangeSlider)
255 FloatRangeSlider(
256 float min, float max, ossia::vec2f init, const QString& name, Id<Process::Port> id,
257 QObject* parent);
258 ~FloatRangeSlider();
259
260 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
261 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
262 auto getInit() const noexcept { return ossia::convert<ossia::vec2f>(this->init()); }
263 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
264
265 using Process::ControlInlet::ControlInlet;
266};
267
268struct SCORE_LIB_PROCESS_EXPORT IntRangeSpinBox : public Process::ControlInlet
269{
270 W_OBJECT(IntRangeSpinBox)
271public:
272 MODEL_METADATA_IMPL(IntRangeSpinBox)
273 IntRangeSpinBox(
274 int min, int max, ossia::vec2f init, const QString& name, Id<Process::Port> id,
275 QObject* parent);
276 ~IntRangeSpinBox();
277
278 auto getMin() const noexcept { return domain().get().convert_min<int>(); }
279 auto getMax() const noexcept { return domain().get().convert_max<int>(); }
280 auto getInit() const noexcept { return ossia::convert<ossia::vec2f>(this->init()); }
281 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
282
283 using Process::ControlInlet::ControlInlet;
284};
285
286struct SCORE_LIB_PROCESS_EXPORT FloatRangeSpinBox : public Process::ControlInlet
287{
288 W_OBJECT(FloatRangeSpinBox)
289public:
290 MODEL_METADATA_IMPL(FloatRangeSpinBox)
291 FloatRangeSpinBox(
292 float min, float max, ossia::vec2f init, const QString& name, Id<Process::Port> id,
293 QObject* parent);
294 ~FloatRangeSpinBox();
295
296 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
297 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
298 auto getInit() const noexcept { return ossia::convert<ossia::vec2f>(this->init()); }
299 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
300
301 using Process::ControlInlet::ControlInlet;
302};
303
304struct SCORE_LIB_PROCESS_EXPORT IntSpinBox : public Process::ControlInlet
305{
306 W_OBJECT(IntSpinBox)
307public:
308 MODEL_METADATA_IMPL(IntSpinBox)
309 IntSpinBox(
310 int min, int max, int init, const QString& name, Id<Process::Port> id,
311 QObject* parent);
312 ~IntSpinBox();
313
314 auto getMin() const noexcept { return domain().get().convert_min<int>(); }
315 auto getMax() const noexcept { return domain().get().convert_max<int>(); }
316 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
317
318 using Process::ControlInlet::ControlInlet;
319};
320
321struct SCORE_LIB_PROCESS_EXPORT FloatSpinBox : public Process::ControlInlet
322{
323 W_OBJECT(FloatSpinBox)
324public:
325 MODEL_METADATA_IMPL(FloatSpinBox)
326 FloatSpinBox(
327 float min, float max, float init, const QString& name, Id<Process::Port> id,
328 QObject* parent);
329 ~FloatSpinBox();
330
331 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
332 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
333 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
334
335 using Process::ControlInlet::ControlInlet;
336};
337struct SCORE_LIB_PROCESS_EXPORT TimeChooser : public Process::ControlInlet
338{
339 W_OBJECT(TimeChooser)
340public:
341 MODEL_METADATA_IMPL(TimeChooser)
342 TimeChooser(
343 float min, float max, float init, const QString& name, Id<Process::Port> id,
344 QObject* parent);
345 ~TimeChooser();
346
347 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
348 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
349 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
350
354 void setValue(const ossia::value& value) override;
355
359 bool preferSynced(double tempo = 120.);
360
365 enum Mode : int
366 {
367 Free = 0,
368 Synced = 1,
369 SyncedBarRestart = 2,
370 SyncedPulse = 3
371 };
372
374 bool offersBarSync{};
376 bool barSyncDefault{true};
377
378 using Process::ControlInlet::ControlInlet;
379};
380
385struct SCORE_LIB_PROCESS_EXPORT GridChooser : public Process::ControlInlet
386{
387 W_OBJECT(GridChooser)
388public:
389 MODEL_METADATA_IMPL(GridChooser)
390 GridChooser(
391 ossia::vec2f init, uint32_t units, int maxBars, double maxSeconds,
392 QString periodName, const QString& name, Id<Process::Port> id, QObject* parent);
393 ~GridChooser();
394
397 uint32_t units{1u | 2u | 4u};
398 int maxBars{16};
399 double maxSeconds{8.};
401 QString periodName{QStringLiteral("loop")};
402
404 void setValue(const ossia::value& value) override;
405 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
406
407 using Process::ControlInlet::ControlInlet;
408 GridChooser(DataStream::Deserializer& vis, QObject* parent);
409 GridChooser(JSONObject::Deserializer& vis, QObject* parent);
410 GridChooser(DataStream::Deserializer&& vis, QObject* parent);
411 GridChooser(JSONObject::Deserializer&& vis, QObject* parent);
412};
413
414struct SCORE_LIB_PROCESS_EXPORT Toggle : public Process::ControlInlet
415{
416 W_OBJECT(Toggle)
417public:
418 MODEL_METADATA_IMPL(Toggle)
419 Toggle(bool init, const QString& name, Id<Process::Port> id, QObject* parent);
420 ~Toggle();
421
422 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
423
424 using Process::ControlInlet::ControlInlet;
425};
426
427struct SCORE_LIB_PROCESS_EXPORT ChooserToggle : public Process::ControlInlet
428{
429 W_OBJECT(ChooserToggle)
430public:
431 MODEL_METADATA_IMPL(ChooserToggle)
432 ChooserToggle(
433 QStringList alternatives, bool init, const QString& name, Id<Process::Port> id,
434 QObject* parent);
435 ~ChooserToggle();
436
437 QStringList alternatives() const noexcept;
438 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
439
440 using Process::ControlInlet::ControlInlet;
441};
442
443struct SCORE_LIB_PROCESS_EXPORT LineEdit : public Process::ControlInlet
444{
445 W_OBJECT(LineEdit)
446public:
447 MODEL_METADATA_IMPL(LineEdit)
448 LineEdit(QString init, const QString& name, Id<Process::Port> id, QObject* parent);
449 ~LineEdit();
450
451 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
452
453 using Process::ControlInlet::ControlInlet;
454};
455
456struct SCORE_LIB_PROCESS_EXPORT FileChooserBase : public Process::ControlInlet
457{
458 W_OBJECT(FileChooserBase)
459public:
460 FileChooserBase(
461 QString init, QString filters, const QString& name, Id<Process::Port> id,
462 QObject* parent);
463 ~FileChooserBase();
464 using Process::ControlInlet::ControlInlet;
465
466 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
467 const QString& filters() const noexcept { return m_filters; };
468 void setFilters(QString nf) { m_filters = std::move(nf); }
469
470 void enableFileWatch();
471 void destroying() W_SIGNAL(destroying);
472
473private:
474 QString m_filters;
475};
476
477struct SCORE_LIB_PROCESS_EXPORT FileChooser : public FileChooserBase
478{
479 MODEL_METADATA_IMPL(FileChooser)
480 W_OBJECT(FileChooser)
481public:
482 FileChooser(
483 QString init, QString filters, const QString& name, Id<Process::Port> id,
484 QObject* parent);
485 ~FileChooser();
486 using Process::FileChooserBase::FileChooserBase;
487
488 // Without these the inherited ControlInlet deserializing constructor runs
489 // instead, and `*this` is a ControlInlet& in its body -- so the
490 // FileChooser overload of writeTo is never reached and the "Filters" the
491 // serializer DOES write is never read back. Same pattern as Process::Enum.
492 FileChooser(DataStream::Deserializer& vis, QObject* parent);
493 FileChooser(JSONObject::Deserializer& vis, QObject* parent);
494 FileChooser(DataStream::Deserializer&& vis, QObject* parent);
495 FileChooser(JSONObject::Deserializer&& vis, QObject* parent);
496};
497
498struct SCORE_LIB_PROCESS_EXPORT FolderChooser : public Process::ControlInlet
499{
500 MODEL_METADATA_IMPL(FolderChooser)
501 W_OBJECT(FolderChooser)
502public:
503 FolderChooser(
504 QString init, const QString& name, Id<Process::Port> id,
505 QObject* parent);
506 ~FolderChooser();
507 using Process::ControlInlet::ControlInlet;
508
509 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
510};
511
512struct SCORE_LIB_PROCESS_EXPORT AudioFileChooser : public FileChooserBase
513{
514 MODEL_METADATA_IMPL(AudioFileChooser)
515 W_OBJECT(AudioFileChooser)
516public:
517 AudioFileChooser(
518 QString init, QString filters, const QString& name, Id<Process::Port> id,
519 QObject* parent);
520 ~AudioFileChooser();
521 using Process::FileChooserBase::FileChooserBase;
522
523 // See the note on FileChooser.
524 AudioFileChooser(DataStream::Deserializer& vis, QObject* parent);
525 AudioFileChooser(JSONObject::Deserializer& vis, QObject* parent);
526 AudioFileChooser(DataStream::Deserializer&& vis, QObject* parent);
527 AudioFileChooser(JSONObject::Deserializer&& vis, QObject* parent);
528};
529
530struct SCORE_LIB_PROCESS_EXPORT VideoFileChooser : public FileChooserBase
531{
532 MODEL_METADATA_IMPL(VideoFileChooser)
533 W_OBJECT(VideoFileChooser)
534public:
535 VideoFileChooser(
536 QString init, QString filters, const QString& name, Id<Process::Port> id,
537 QObject* parent);
538 ~VideoFileChooser();
539 using Process::FileChooserBase::FileChooserBase;
540
541 // See the note on FileChooser.
542 VideoFileChooser(DataStream::Deserializer& vis, QObject* parent);
543 VideoFileChooser(JSONObject::Deserializer& vis, QObject* parent);
544 VideoFileChooser(DataStream::Deserializer&& vis, QObject* parent);
545 VideoFileChooser(JSONObject::Deserializer&& vis, QObject* parent);
546};
547
548struct SCORE_LIB_PROCESS_EXPORT ProgramEdit : public Process::ControlInlet
549{
550 W_OBJECT(ProgramEdit)
551public:
552 MODEL_METADATA_IMPL(ProgramEdit)
553 ProgramEdit(QString init, const QString& name, Id<Process::Port> id, QObject* parent);
554 ~ProgramEdit();
555
556 std::string language;
557
558 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
559
560 using Process::ControlInlet::ControlInlet;
561};
562
568SCORE_LIB_PROCESS_EXPORT
569std::optional<int> readEntryIndex(const ossia::value& v, int n) noexcept;
570
571struct SCORE_LIB_PROCESS_EXPORT ComboBox : public Process::ControlInlet
572{
573 W_OBJECT(ComboBox)
574public:
575 MODEL_METADATA_IMPL(ComboBox)
576 std::vector<std::pair<QString, ossia::value>> alternatives;
577 ComboBox(
578 std::vector<std::pair<QString, ossia::value>> values, ossia::value init,
579 const QString& name, Id<Process::Port> id, QObject* parent);
580 ~ComboBox();
581
582 void setAlternatives(std::vector<std::pair<QString, ossia::value>> values);
583 // E_SIGNAL, not W_SIGNAL: the widgets and the avnd executor connect to this
584 // from other plug-ins, and a non-exported signal silently never fires across
585 // a shared-library boundary.
586 void alternativesChanged()
587 E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, alternativesChanged)
588
589 // Folder-backed combobox (halp::folder_combobox): items are the files of the
590 // sibling port named folderPortName, filtered by fileExtensions ("*.wav"…).
591 // Empty folderPortName = plain combobox. Populated at edit/load time, and
592 // refreshed by a filesystem watcher while the document is open so that files
593 // written by other processes (an upstream analysis, a recorder…) show up
594 // without reloading.
595 QString folderPortName;
596 QStringList fileExtensions;
597 void repopulateFromFolder(const QString& folderPath);
598
599private:
600 QFileSystemWatcher* m_folderWatcher{};
601 QString m_watchedFolder;
602
603public:
604
605 const auto& getValues() const noexcept { return alternatives; }
606 auto count() const noexcept { return alternatives.size(); }
607
610 int indexOfValue(const ossia::value& v) const noexcept;
611
614 void setValue(const ossia::value& value) override;
615
617 ossia::value valueAtIndex(int i) const noexcept;
618
619 ComboBox(DataStream::Deserializer& vis, QObject* parent);
620 ComboBox(JSONObject::Deserializer& vis, QObject* parent);
621 ComboBox(DataStream::Deserializer&& vis, QObject* parent);
622 ComboBox(JSONObject::Deserializer&& vis, QObject* parent);
623
624 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
625};
626
627struct SCORE_LIB_PROCESS_EXPORT Enum : public Process::ControlInlet
628{
629 W_OBJECT(Enum)
630public:
631 MODEL_METADATA_IMPL(Enum)
632 std::vector<QString> values;
633 std::vector<QString> pixmaps;
634 Enum(
635 const std::vector<std::string>& dom, std::vector<QString> pixmaps,
636 std::string init, const QString& name, Id<Process::Port> id, QObject* parent);
637
638 Enum(
639 const QStringList& values, std::vector<QString> pixmaps, std::string init,
640 const QString& name, Id<Process::Port> id, QObject* parent);
641 ~Enum();
642
643 const std::vector<QString>& getValues() const { return values; }
644
649 int indexOfValue(const ossia::value& v) const noexcept;
650
652 ossia::value valueAtIndex(int i) const noexcept;
653
654 Enum(DataStream::Deserializer& vis, QObject* parent);
655 Enum(JSONObject::Deserializer& vis, QObject* parent);
656 Enum(DataStream::Deserializer&& vis, QObject* parent);
657 Enum(JSONObject::Deserializer&& vis, QObject* parent);
658
659 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
660};
661
662struct SCORE_LIB_PROCESS_EXPORT Button : public Process::ControlInlet
663{
664 W_OBJECT(Button)
665public:
666 MODEL_METADATA_IMPL(Button)
667 Button(const QString& name, Id<Process::Port> id, QObject* parent);
668 ~Button();
669
670 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
671
672 using Process::ControlInlet::ControlInlet;
673};
674
675struct SCORE_LIB_PROCESS_EXPORT ImpulseButton : public Process::ControlInlet
676{
677 MODEL_METADATA_IMPL(ImpulseButton)
678 W_OBJECT(ImpulseButton)
679public:
680 ImpulseButton(const QString& name, Id<Process::Port> id, QObject* parent);
681 ~ImpulseButton();
682
683 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
684
685 using Process::ControlInlet::ControlInlet;
686};
687
688struct SCORE_LIB_PROCESS_EXPORT HSVSlider : public Process::ControlInlet
689{
690 W_OBJECT(HSVSlider)
691public:
692 MODEL_METADATA_IMPL(HSVSlider)
693 HSVSlider(
694 ossia::vec4f init, const QString& name, Id<Process::Port> id, QObject* parent);
695 ~HSVSlider();
696
698 const State::Unit& unit() const noexcept override;
699 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
700 auto getMin() const noexcept { return ossia::vec4f{0., 0., 0., 0.}; }
701 auto getMax() const noexcept { return ossia::vec4f{1., 1., 1., 1.}; }
702 using Process::ControlInlet::ControlInlet;
703};
704
705struct SCORE_LIB_PROCESS_EXPORT XYSlider : public Process::ControlInlet
706{
707 W_OBJECT(XYSlider)
708public:
709 MODEL_METADATA_IMPL(XYSlider)
710 XYSlider(
711 ossia::vec2f init, const QString& name, Id<Process::Port> id, QObject* parent);
712 XYSlider(
713 ossia::vec2f min, ossia::vec2f max, ossia::vec2f init, const QString& name,
714 Id<Process::Port> id, QObject* parent);
715 ~XYSlider();
716
717 auto getMin() const noexcept { return domain().get().convert_min<ossia::vec2f>(); }
718 auto getMax() const noexcept { return domain().get().convert_max<ossia::vec2f>(); }
719 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
720
721 using Process::ControlInlet::ControlInlet;
722};
723
724struct SCORE_LIB_PROCESS_EXPORT XYZSlider : public Process::ControlInlet
725{
726 W_OBJECT(XYZSlider)
727public:
728 MODEL_METADATA_IMPL(XYZSlider)
729 XYZSlider(
730 ossia::vec3f init, const QString& name, Id<Process::Port> id, QObject* parent);
731 XYZSlider(
732 ossia::vec3f min, ossia::vec3f max, ossia::vec3f init, const QString& name,
733 Id<Process::Port> id, QObject* parent);
734 ~XYZSlider();
735
736 auto getMin() const noexcept { return domain().get().convert_min<ossia::vec3f>(); }
737 auto getMax() const noexcept { return domain().get().convert_max<ossia::vec3f>(); }
738 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
739
740 using Process::ControlInlet::ControlInlet;
741};
742
743struct SCORE_LIB_PROCESS_EXPORT XYSpinboxes : public Process::ControlInlet
744{
745 W_OBJECT(XYSpinboxes)
746public:
747 MODEL_METADATA_IMPL(XYSpinboxes)
748 XYSpinboxes(
749 ossia::vec2f init, const QString& name, Id<Process::Port> id, QObject* parent);
750 XYSpinboxes(
751 ossia::vec2f min, ossia::vec2f max, ossia::vec2f init, bool integral,
752 const QString& name, Id<Process::Port> id, QObject* parent);
753
754 XYSpinboxes(DataStream::Deserializer& vis, QObject* parent);
755 XYSpinboxes(JSONObject::Deserializer& vis, QObject* parent);
756 XYSpinboxes(DataStream::Deserializer&& vis, QObject* parent);
757 XYSpinboxes(JSONObject::Deserializer&& vis, QObject* parent);
758 ~XYSpinboxes();
759
760 auto getMin() const noexcept { return domain().get().convert_min<ossia::vec2f>(); }
761 auto getMax() const noexcept { return domain().get().convert_max<ossia::vec2f>(); }
762 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
763
764 using Process::ControlInlet::ControlInlet;
765
766 bool integral{};
767};
768
769struct SCORE_LIB_PROCESS_EXPORT XYZSpinboxes : public Process::ControlInlet
770{
771 W_OBJECT(XYZSpinboxes)
772public:
773 MODEL_METADATA_IMPL(XYZSpinboxes)
774 XYZSpinboxes(
775 ossia::vec3f init, const QString& name, Id<Process::Port> id, QObject* parent);
776 XYZSpinboxes(
777 ossia::vec3f min, ossia::vec3f max, ossia::vec3f init, bool integral,
778 const QString& name, Id<Process::Port> id, QObject* parent);
779 ~XYZSpinboxes();
780
781 auto getMin() const noexcept { return domain().get().convert_min<ossia::vec3f>(); }
782 auto getMax() const noexcept { return domain().get().convert_max<ossia::vec3f>(); }
783 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
784
785 using Process::ControlInlet::ControlInlet;
786 bool integral{};
787};
788
789struct SCORE_LIB_PROCESS_EXPORT MultiSlider : public Process::ControlInlet
790{
791 W_OBJECT(MultiSlider)
792public:
793 MODEL_METADATA_IMPL(MultiSlider)
794 MultiSlider(
795 ossia::value init, const QString& name, Id<Process::Port> id, QObject* parent);
796 ~MultiSlider();
797
798 ossia::value getMin() const noexcept;
799 ossia::value getMax() const noexcept;
800 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
801
802 using Process::ControlInlet::ControlInlet;
803};
804
805
806struct SCORE_LIB_PROCESS_EXPORT MultiSliderXY : public Process::ControlInlet
807{
808 W_OBJECT(MultiSliderXY)
809public:
810 MODEL_METADATA_IMPL(MultiSliderXY)
811 MultiSliderXY(
812 ossia::value init, const QString& name, Id<Process::Port> id, QObject* parent);
813 ~MultiSliderXY();
814
815 ossia::value getMin() const noexcept;
816 ossia::value getMax() const noexcept;
817 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
818
819 using Process::ControlInlet::ControlInlet;
820};
821
822struct SCORE_LIB_PROCESS_EXPORT PathGeneratorXY : public Process::ControlInlet
823{
824 W_OBJECT(PathGeneratorXY)
825public:
826 MODEL_METADATA_IMPL(PathGeneratorXY)
827 PathGeneratorXY(
828 ossia::value init, const QString& name, Id<Process::Port> id, QObject* parent);
829 ~PathGeneratorXY();
830
831 ossia::value getMin() const noexcept;
832 ossia::value getMax() const noexcept;
833 void setupExecution(ossia::inlet& inl, QObject* exec_context) const noexcept override;
834
835 using Process::ControlInlet::ControlInlet;
836};
837
838// Outlets
839
840struct SCORE_LIB_PROCESS_EXPORT Bargraph : public Process::ControlOutlet
841{
842 W_OBJECT(Bargraph)
843public:
844 MODEL_METADATA_IMPL(Bargraph)
845 Bargraph(
846 float min, float max, float init, const QString& name, Id<Process::Port> id,
847 QObject* parent);
848 ~Bargraph();
849
850 auto getMin() const noexcept { return domain().get().convert_min<float>(); }
851 auto getMax() const noexcept { return domain().get().convert_max<float>(); }
852
853 using Process::ControlOutlet::ControlOutlet;
854};
855
856} // namespace Process
Definition DataStreamVisitor.hpp:202
Definition JSONVisitor.hpp:423
Definition Port.hpp:247
Definition Port.hpp:106
virtual const State::Unit & unit() const noexcept
Definition Port.cpp:200
The id_base_t class.
Definition Identifier.hpp:59
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
constexpr bool integral(ElementType t) noexcept
Whether the values are integers, to print them as such.
Definition BufferDecode.hpp:148
Definition Unit.hpp:18