2 #include <Process/Dataflow/ControlWidgetDomains.hpp>
3 #include <Process/Dataflow/ControlWidgets.hpp>
4 #include <Process/Dataflow/WidgetInlets.hpp>
6 #include <score/plugins/DeserializeKnownSubType.hpp>
9 #include <ossia/dataflow/safe_nodes/port.hpp>
10 #include <ossia/detail/timed_vec.hpp>
11 #include <ossia/network/dataspace/dataspace.hpp>
13 #include <score_lib_process_export.h>
19 static const constexpr
bool must_validate =
false;
20 using type = ossia::value;
23 : ossia::safe_nodes::control_out{name}
33 return deserialize_known_interface<Process::ControlOutlet>(
id, parent);
37 return deserialize_known_interface<Process::ControlOutlet>(
id, parent);
40 const ossia::value& fromValue(
const ossia::value& v)
const {
return v; }
41 const ossia::value& toValue(
const ossia::value& v)
const {
return v; }
44 struct InControl final : ossia::safe_nodes::control_in
46 static const constexpr
bool must_validate =
false;
47 using type = ossia::value;
50 : ossia::safe_nodes::control_in{name}
60 return deserialize_known_interface<Process::ControlInlet>(
id, parent);
64 return deserialize_known_interface<Process::ControlInlet>(
id, parent);
67 void setup_exec(
auto& v)
const { }
68 const ossia::value& fromValue(
const ossia::value& v)
const {
return v; }
69 const ossia::value& toValue(
const ossia::value& v)
const {
return v; }
75 : ossia::safe_nodes::control_in
78 static const constexpr
bool must_validate =
false;
84 constexpr
FloatControl(
const char* name,
float v1,
float v2,
float v3)
85 : ossia::safe_nodes::control_in{name}
92 auto getMin()
const {
return min; }
93 auto getMax()
const {
return max; }
97 return new Model_T{min, max, init, QString::fromUtf8(name.data(), name.size()),
102 return deserialize_known_interface<Model_T>(
id, parent);
106 return deserialize_known_interface<Model_T>(
id, parent);
109 void setup_exec(
auto& v)
const
111 v->type = ossia::val_type::FLOAT;
112 v->domain = ossia::domain_base<float>(this->min, this->max);
115 float fromValue(
const ossia::value& v)
const {
return ossia::convert<float>(v); }
116 ossia::value toValue(
float v)
const {
return v; }
119 template <
typename T>
121 : ossia::safe_nodes::control_out
124 static const constexpr
bool must_validate =
false;
130 constexpr
FloatDisplay(
const char* name,
float v1,
float v2,
float v3)
131 : ossia::safe_nodes::control_out{name}
138 auto getMin()
const {
return min; }
139 auto getMax()
const {
return max; }
143 return new Process::Bargraph{
144 min, max, init, QString::fromUtf8(name.data(), name.size()), id, parent};
148 return deserialize_known_interface<Process::Bargraph>(
id, parent);
152 return deserialize_known_interface<Process::Bargraph>(
id, parent);
155 void setup_exec(
auto& v)
const
157 v->type = ossia::val_type::FLOAT;
158 v->domain = ossia::domain_base<float>(this->min, this->max);
161 float fromValue(
const ossia::value& v)
const {
return ossia::convert<float>(v); }
162 ossia::value toValue(
float v)
const {
return v; }
176 : ossia::safe_nodes::control_in
184 static const constexpr
bool must_validate =
false;
185 constexpr
IntSlider(
const char* name,
int v1,
int v2,
int v3)
186 : ossia::safe_nodes::control_in{name}
193 int fromValue(
const ossia::value& v)
const {
return ossia::convert<int>(v); }
194 ossia::value toValue(
int v)
const {
return v; }
196 auto getMin()
const {
return min; }
197 auto getMax()
const {
return max; }
201 return new Process::IntSlider{
202 min, max, init, QString::fromUtf8(name.data(), name.size()), id, parent};
206 return deserialize_known_interface<Process::IntSlider>(
id, parent);
210 return deserialize_known_interface<Process::IntSlider>(
id, parent);
213 void setup_exec(
auto& v)
const
215 v->type = ossia::val_type::INT;
216 v->domain = ossia::domain_base<int32_t>(this->min, this->max);
221 : ossia::safe_nodes::control_in
224 static const constexpr
bool must_validate =
false;
230 int fromValue(
const ossia::value& v)
const {
return ossia::convert<int>(v); }
231 ossia::value toValue(
int v)
const {
return v; }
233 constexpr
IntSpinBox(
const char* name,
int v1,
int v2,
int v3)
234 : ossia::safe_nodes::control_in{name}
241 auto getMin()
const {
return min; }
242 auto getMax()
const {
return max; }
246 return new Process::IntSpinBox{
247 min, max, init, QString::fromUtf8(name.data(), name.size()), id, parent};
251 return deserialize_known_interface<Process::IntSpinBox>(
id, parent);
255 return deserialize_known_interface<Process::IntSpinBox>(
id, parent);
257 void setup_exec(
auto& v)
const
259 v->type = ossia::val_type::INT;
260 v->domain = ossia::domain_base<int32_t>(this->min, this->max);
265 : ossia::safe_nodes::control_in
268 static const constexpr
bool must_validate =
false;
270 constexpr
Button(
const char* name)
271 : ossia::safe_nodes::control_in{name}
278 return new Process::Button{QString::fromUtf8(name.data(), name.size()), id, parent};
282 return deserialize_known_interface<Process::Button>(
id, parent);
286 return deserialize_known_interface<Process::Button>(
id, parent);
289 bool fromValue(
const ossia::value& v)
const {
return ossia::convert<bool>(v); }
290 ossia::value toValue(
bool v)
const {
return v; }
292 void setup_exec(
auto& v)
const
294 v->type = ossia::val_type::BOOL;
295 v->domain = ossia::domain_base<bool>();
300 : ossia::safe_nodes::control_in
303 static const constexpr
bool must_validate =
false;
305 : ossia::safe_nodes::control_in{name}
309 using type = ossia::impulse;
312 return new Process::ImpulseButton{
313 QString::fromUtf8(name.data(), name.size()), id, parent};
317 return deserialize_known_interface<Process::ImpulseButton>(
id, parent);
321 return deserialize_known_interface<Process::ImpulseButton>(
id, parent);
324 ossia::impulse fromValue(
const ossia::value& v)
const {
return {}; }
325 ossia::value toValue(
const ossia::value& v)
const {
return ossia::impulse{}; }
327 void setup_exec(
auto& v)
const
329 v->type = ossia::val_type::BOOL;
330 v->domain = ossia::domain_base<ossia::impulse>();
335 : ossia::safe_nodes::control_in
338 static const constexpr
bool must_validate =
false;
339 constexpr
Toggle(
const char* name,
bool v1)
340 : ossia::safe_nodes::control_in{name}
349 return new Process::Toggle{
350 init, QString::fromUtf8(name.data(), name.size()), id, parent};
354 return deserialize_known_interface<Process::Toggle>(
id, parent);
358 return deserialize_known_interface<Process::Toggle>(
id, parent);
361 bool fromValue(
const ossia::value& v)
const {
return ossia::convert<bool>(v); }
362 ossia::value toValue(
bool v)
const {
return v; }
364 void setup_exec(
auto& v)
const
366 v->type = ossia::val_type::BOOL;
367 v->domain = ossia::domain_base<bool>();
372 : ossia::safe_nodes::control_in
375 static const constexpr
bool must_validate =
false;
377 constexpr
ChooserToggle(
const char* name, std::array<const char*, 2> alt,
bool v1)
378 : ossia::safe_nodes::control_in{name}
384 std::array<const char*, 2> alternatives;
387 bool fromValue(
const ossia::value& v)
const {
return ossia::convert<bool>(v); }
388 ossia::value toValue(
bool v)
const {
return v; }
392 return new Process::ChooserToggle{
393 {alternatives[0], alternatives[1]},
395 QString::fromUtf8(name.data(), name.size()),
401 return deserialize_known_interface<Process::ChooserToggle>(
id, parent);
405 return deserialize_known_interface<Process::ChooserToggle>(
id, parent);
407 void setup_exec(
auto& v)
const
409 v->type = ossia::val_type::BOOL;
410 v->domain = ossia::domain_base<bool>();
415 : ossia::safe_nodes::control_in
418 static const constexpr
bool must_validate =
false;
419 constexpr
LineEdit(
const char* name,
const char* init)
420 : ossia::safe_nodes::control_in{name}
425 std::string fromValue(
const ossia::value& v)
const
427 return ossia::convert<std::string>(v);
429 ossia::value toValue(std::string v)
const {
return ossia::value{std::move(v)}; }
431 using type = std::string;
432 const std::string_view init{};
435 return new Process::LineEdit{
436 init.data(), QString::fromUtf8(name.data(), name.size()), id, parent};
440 return deserialize_known_interface<Process::LineEdit>(
id, parent);
444 return deserialize_known_interface<Process::LineEdit>(
id, parent);
446 void setup_exec(
auto& v)
const { v->type = ossia::val_type::STRING; }
450 : ossia::safe_nodes::control_in
453 static const constexpr
bool must_validate =
false;
454 constexpr
Soundfile(std::string_view name)
455 : ossia::safe_nodes::control_in{name.data()}
459 std::string fromValue(
const ossia::value& v)
const
461 return ossia::convert<std::string>(v);
463 ossia::value toValue(std::string v)
const {
return ossia::value{std::move(v)}; }
465 using type = std::string;
468 return new Process::LineEdit{
469 "", QString::fromUtf8(name.data(), name.size()), id, parent};
473 return deserialize_known_interface<Process::LineEdit>(
id, parent);
477 return deserialize_known_interface<Process::LineEdit>(
id, parent);
479 void setup_exec(
auto& v)
const { v->type = ossia::val_type::STRING; }
482 template <
typename T, std::
size_t N>
484 : ossia::safe_nodes::control_in
487 static const constexpr
bool must_validate =
false;
489 const std::size_t init{};
490 const std::array<std::pair<const char*, T>, N> values;
492 static constexpr
auto count() {
return N; }
495 const char* name, std::size_t in, std::array<std::pair<const char*, T>, N> arr)
496 : ossia::safe_nodes::control_in{name}
502 const auto& getValues()
const {
return values; }
506 std::vector<std::pair<QString, ossia::value>> vec;
507 for(
auto& v : values)
508 vec.emplace_back(v.first, v.second);
510 return new Process::ComboBox(
511 vec, values[init].second, QString::fromUtf8(name.data(), name.size()),
id,
516 return deserialize_known_interface<Process::ComboBox>(
id, parent);
520 return deserialize_known_interface<Process::ComboBox>(
id, parent);
523 T fromValue(
const ossia::value& v)
const {
return ossia::convert<T>(v); }
524 ossia::value toValue(T v)
const {
return ossia::value{std::move(v)}; }
526 void setup_exec(
auto& v)
const { v->type = ossia::val_type::STRING; }
529 template <std::
size_t N>
531 : ossia::safe_nodes::control_in
534 using type = std::string;
535 const std::size_t init{};
536 const std::array<const char*, N> values;
537 using Pixmaps_T = std::array<const char*, 2 * N>;
540 const auto& getValues()
const {
return values; }
543 const char* name, std::size_t i,
const std::array<const char*, N>& v)
544 : ossia::safe_nodes::control_in{name}
552 const char* name, std::size_t i,
const std::array<const char*, N>& v,
553 const Pixmaps_T& pixmaps)
554 : ossia::safe_nodes::control_in{name}
561 ossia::value toValue(std::string v)
const {
return ossia::value{std::move(v)}; }
563 ossia::value toValue(
int v)
const
565 if(ossia::valid_index(v, values))
566 return ossia::value{std::string(values[v])};
568 return ossia::value{};
573 return new Process::Enum{
574 std::vector<std::string>(values.begin(), values.end()),
575 pixmaps[0] ==
nullptr ? std::vector<QString>{}
576 : std::vector<QString>{pixmaps.begin(), pixmaps.end()},
578 QString::fromUtf8(name.data(), name.size()),
584 return deserialize_known_interface<Process::Enum>(
id, parent);
588 return deserialize_known_interface<Process::Enum>(
id, parent);
591 void setup_exec(
auto& v)
const { }
594 template <std::
size_t N>
597 constexpr
Enum(
const char* name, std::size_t i,
const std::array<const char*, N>& v)
603 const char* name, std::size_t i,
const std::array<const char*, N>& v,
604 const typename EnumBase<N>::Pixmaps_T& pixmaps)
609 static const constexpr
bool must_validate =
true;
612 const ossia::timed_vec<std::string>& source, ossia::timed_vec<std::string>& sink)
617 template <
typename Sink>
618 void convert(
const ossia::timed_vec<std::string>& source, ossia::timed_vec<Sink>& sink)
621 sink.container.reserve(source.size());
622 for(
auto& [timestamp, value] : source)
624 if(
auto it = ossia::find(this->values, value); it != this->values.end())
626 sink[timestamp] =
static_cast<Sink
>(it - this->values.begin());
630 bool fromValue(
const ossia::value& v, std::string& str)
const
634 case ossia::val_type::INT: {
635 int t = *v.target<
int>();
636 if(ossia::valid_index(t, this->values))
638 str = this->values[t];
643 case ossia::val_type::STRING: {
644 auto t = v.target<std::string>();
645 if(
auto it = ossia::find(this->values, *t); it != this->values.end())
658 template <
typename T>
659 bool fromValue(
const ossia::value& v, T& integer_like)
const
663 case ossia::val_type::INT: {
664 int t = *v.target<
int>();
665 if(ossia::valid_index(t, this->values))
672 case ossia::val_type::STRING: {
673 auto t = v.target<std::string>();
674 if(
auto it = ossia::find(this->values, *t); it != this->values.end())
676 integer_like = it - this->values.begin();
688 auto fromValue(
const ossia::value& v)
const
690 auto t = v.target<std::string>();
693 if(
auto it = ossia::find(this->values, *t); it != this->values.end())
695 return std::optional<std::string>{*t};
698 return std::optional<std::string>{};
702 template <std::
size_t N>
706 const char* name, std::size_t i,
const std::array<const char*, N>& v)
712 const char* name, std::size_t i,
const std::array<const char*, N>& v,
713 const typename EnumBase<N>::Pixmaps_T& pixmaps)
718 static const constexpr
bool must_validate =
false;
719 auto fromValue(
const ossia::value& v)
const
721 auto t = v.target<std::string>();
724 return std::string{};
728 template <
typename T1,
typename T2>
729 constexpr
auto make_enum(
const T1& t1, std::size_t s,
const T2& t2)
733 template <
typename T1,
typename T2,
typename Pixmaps_T>
735 make_enum(
const T1& t1, std::size_t s,
const T2& t2,
const Pixmaps_T& pixmaps)
739 template <
typename T1,
typename T2>
740 constexpr
auto make_unvalidated_enum(
const T1& t1, std::size_t s,
const T2& t2)
746 : ossia::safe_nodes::control_in
749 static const constexpr
bool must_validate =
false;
751 const char* name, ossia::vec2f min, ossia::vec2f max, ossia::vec2f init = {})
752 : ossia::safe_nodes::control_in{name}
758 constexpr
XYSlider(
const char* name,
float min,
float max,
float init = {})
759 : ossia::safe_nodes::control_in{name}
766 using type = ossia::vec2f;
767 const ossia::vec2f min, max, init{};
770 return new Process::XYSlider{
771 min, max, init, QString::fromUtf8(name.data(), name.size()), id, parent};
775 return deserialize_known_interface<Process::XYSlider>(
id, parent);
779 return deserialize_known_interface<Process::XYSlider>(
id, parent);
782 ossia::vec2f fromValue(
const ossia::value& v)
const
784 return ossia::convert<ossia::vec2f>(v);
786 ossia::value toValue(ossia::vec2f v)
const {
return v; }
788 void setup_exec(
auto& v)
const
790 v->domain = ossia::vecf_domain<2>(min, max);
791 v->type = ossia::val_type::VEC2F;
795 : ossia::safe_nodes::control_in
798 static const constexpr
bool must_validate =
false;
799 constexpr
HSVSlider(
const char* name, ossia::vec4f init = {})
800 : ossia::safe_nodes::control_in{name}
805 using type = ossia::vec4f;
806 const ossia::vec4f init{};
809 return new Process::HSVSlider{
810 init, QString::fromUtf8(name.data(), name.size()), id, parent};
814 return deserialize_known_interface<Process::HSVSlider>(
id, parent);
818 return deserialize_known_interface<Process::HSVSlider>(
id, parent);
821 ossia::vec4f fromValue(
const ossia::value& v)
const
823 return ossia::convert<ossia::vec4f>(v);
825 ossia::value toValue(ossia::vec4f v)
const {
return v; }
827 void setup_exec(
auto& v)
const { v->type = ossia::rgba_u{}; }
Definition: DataStreamVisitor.hpp:202
Definition: JSONVisitor.hpp:423
Definition: score-lib-process/Process/Dataflow/Port.hpp:202
Definition: score-lib-process/Process/Dataflow/Port.hpp:415
The id_base_t class.
Definition: Identifier.hpp:57
Definition: QGraphicsLogKnob.hpp:16
Definition: QGraphicsLogSlider.hpp:17
Definition: score-lib-process/Control/Widgets.hpp:374
Definition: score-lib-process/Control/Widgets.hpp:486
Definition: score-lib-process/Control/Widgets.hpp:533
Definition: score-lib-process/Control/Widgets.hpp:596
Definition: score-lib-process/Control/Widgets.hpp:77
Definition: score-lib-process/Control/Widgets.hpp:123
Definition: score-lib-process/Control/Widgets.hpp:797
Definition: score-lib-process/Control/Widgets.hpp:45
Definition: score-lib-process/Control/Widgets.hpp:178
Definition: score-lib-process/Control/Widgets.hpp:223
Definition: score-lib-process/Control/Widgets.hpp:417
Definition: score-lib-process/Control/Widgets.hpp:18
Definition: score-lib-process/Control/Widgets.hpp:452
Definition: score-lib-process/Control/Widgets.hpp:337
Definition: score-lib-process/Control/Widgets.hpp:704
Definition: score-lib-process/Control/Widgets.hpp:748