71 template <oscr::ossia_value_port T>
72 void operator()(
const T& in,
auto idx)
78 template <oscr::ossia_audio_port T>
79 void operator()(
const T& in,
auto idx)
85 template <oscr::ossia_m
idi_port T>
86 void operator()(
const T& in,
auto idx)
93 template <avnd::audio_port T>
94 void operator()(
const T& in,
auto idx)
100 template <avnd::m
idi_port T>
101 void operator()(
const T& in,
auto idx)
108 static QString toFilters(
const QSet<QString>& exts)
111 for(
const auto& s : exts)
118 res.resize(res.size() - 1);
122 template <
typename P>
123 static QString getFilters(P& p)
125 if constexpr(
requires { P::filters(); })
127 using filter =
decltype(P::filters());
128 if constexpr(
requires { filter::sound; } ||
requires { filter::audio; })
130 return QString{
"Sound files (%1)"}.arg(
133 else if constexpr(
requires { filter::video; })
136 QSet<QString> files = {
"mkv",
"mov",
"mp4",
"h264",
"avi",
"hap",
"mpg",
"mpeg",
137 "imf",
"mxf",
"mts",
"m2ts",
"mj2",
"webm",
"y4m",
"nut",
"ts"};
138 return QString{
"Videos (%1)"}.arg(toFilters(files));
140 else if constexpr(
requires { filter::image; })
143 return QString{
"Images (*.png *.jpg *.jpeg *.gif *.bmp *.tiff)"};
145 else if constexpr(
requires { filter::midi; })
147 return "MIDI (*.mid)";
149 else if constexpr(avnd::string_ish<filter>)
151 static constexpr auto text_filters = P::filters();
152 return fromStringView(P::filters());
159 else if constexpr(
requires { P::extensions(); })
161 static constexpr auto text_filters = P::extensions();
162 return fromStringView(text_filters);
170 template <avnd::soundfile_port T>
171 void operator()(
const T& in,
auto idx)
173 static constexpr auto name = avnd::get_name<T>();
174 Process::FileChooserBase* p{};
175 if constexpr(
requires { T::waveform; })
177 p =
new Process::AudioFileChooser{
178 "", getFilters(in), QString::fromUtf8(name.data(), name.size()),
183 p =
new Process::FileChooser{
184 "", getFilters(in), QString::fromUtf8(name.data(), name.size()),
188 p->displayHandledExplicitly =
true;
191 if constexpr(avnd::tag_file_watch<T>)
193 p->enableFileWatch();
197 template <
typename T>
198 requires avnd::midifile_port<T> || avnd::raw_file_port<T>
199 void operator()(
const T& in,
auto idx)
201 static constexpr auto name = avnd::get_name<T>();
203 auto p =
new Process::FileChooser{
204 "", getFilters(in), QString::fromUtf8(name.data(), name.size()),
206 p->displayHandledExplicitly =
true;
209 if constexpr(avnd::tag_file_watch<T>)
211 p->enableFileWatch();
215 template <avnd::dynamic_ports_port T, std::
size_t N>
216 void operator()(
const T& in, avnd::field_index<N> i)
218 using port_type =
typename decltype(in.ports)::value_type;
223 template <avnd::parameter_port T, std::
size_t N>
224 requires(!oscr::ossia_port<T>)
225 void operator()(
const T& in, avnd::field_index<N>)
227 if constexpr(avnd::has_widget<T> || avnd::curve_port<T>)
229 auto p = oscr::make_control_in<Node, T>(
231 using port_ptr_type = std::decay_t<
decltype(p)>;
232 if constexpr(!std::is_same_v<port_ptr_type, std::nullptr_t>)
235 !std::is_same_v<port_ptr_type, Process::ControlInlet*>
236 && !std::is_same_v<port_ptr_type, Process::ValueInlet*>)
237 p->displayHandledExplicitly =
true;
246 setupNewPort(in, vp);
253 setupNewPort(in, vp);
259 template <avnd::buffer_port T>
260 void operator()(
const T& in,
auto idx)
263 auto p =
new Gfx::TextureInlet(portName<T>(),
Id<Process::Port>(inlet++), &self);
269 template <avnd::texture_port T>
270 void operator()(
const T& in,
auto idx)
273 auto p =
new Gfx::TextureInlet(portName<T>(),
Id<Process::Port>(inlet++), &self);
279 template <avnd::geometry_port T>
280 void operator()(
const T& in,
auto idx)
294 template <scene_port T>
295 requires(!avnd::geometry_port<T>)
296 void operator()(
const T& in,
auto idx)
305 template <std::
size_t Idx, avnd::message T>
306 void operator()(
const avnd::field_reflection<Idx, T>& in,
auto dummy)
313 template <std::
size_t Idx, avnd::unreflectable_message<Node> T>
314 void operator()(
const avnd::field_reflection<Idx, T>& in,
auto dummy)
321 void operator()(
const auto& ctrl,
auto idx)
324 qDebug() << fromStringView(avnd::get_name(ctrl)) <<
"unhandled";
335 template <oscr::ossia_value_port T>
336 void operator()(
const T& out,
auto idx)
339 setupNewPort(out, p);
343 template <oscr::ossia_audio_port T>
344 void operator()(
const T& out,
auto idx)
347 setupNewPort(out, p);
351 template <oscr::ossia_m
idi_port T>
352 void operator()(
const T& out,
auto idx)
355 setupNewPort(out, p);
359 template <avnd::dynamic_ports_port T, std::
size_t N>
360 void operator()(
const T& in, avnd::field_index<N> i)
362 using port_type =
typename decltype(in.ports)::value_type;
367 template <avnd::audio_port T>
368 void operator()(
const T& out,
auto idx)
371 setupNewPort(out, p);
373 p->setPropagate(
true);
377 template <avnd::m
idi_port T>
378 void operator()(
const T& out,
auto idx)
381 setupNewPort(out, p);
385 template <avnd::parameter_port T, std::
size_t N>
386 requires(!oscr::ossia_port<T>)
387 void operator()(
const T& out, avnd::field_index<N>)
389 if constexpr(avnd::has_widget<T>)
391 if(
auto p = oscr::make_control_out<T>(
394 p->displayHandledExplicitly =
true;
395 setupNewPort(out, p);
403 setupNewPort(out, vp);
411 setupNewPort(out, vp);
417 template <avnd::buffer_port T>
418 void operator()(
const T& out,
auto idx)
421 auto p =
new Gfx::TextureOutlet(portName<T>(),
Id<Process::Port>(outlet++), &self);
422 setupNewPort(out, p);
427 template <avnd::texture_port T>
428 void operator()(
const T& out,
auto idx)
431 auto p =
new Gfx::TextureOutlet(portName<T>(),
Id<Process::Port>(outlet++), &self);
432 setupNewPort(out, p);
437 template <avnd::gpu_render_target_output_port T>
438 void operator()(
const T& out,
auto idx)
441 auto p =
new Gfx::TextureOutlet(portName<T>(),
Id<Process::Port>(outlet++), &self);
442 setupNewPort(out, p);
447 template <avnd::geometry_port T>
448 void operator()(
const T& out,
auto idx)
452 setupNewPort(out, p);
460 template <scene_port T>
461 requires(!avnd::geometry_port<T>)
462 void operator()(
const T& out,
auto idx)
466 setupNewPort(out, p);
471 template <avnd::curve_port T>
472 void operator()(
const T& out,
auto idx)
475 setupNewPort(out, p);
479 template <avnd::callback T, std::
size_t N>
480 void operator()(
const T& out, avnd::field_index<N>)
482 if constexpr(avnd::control_port<T>)
484 if(
auto p = oscr::make_control_out<T>(
495 setupNewPort(out, vp);
499 else if constexpr(
requires { T::control; })
504 setupNewPort(out, p);
510 setupNewPort(out, p);
516 void operator()(
const auto& ctrl,
auto idx)
518 qDebug() << fromStringView(avnd::get_name(ctrl)) <<
"unhandled";