score-plugin-engine/Engine/Node/Inspector.hpp
1 #pragma once
2 #include <Process/Dataflow/PortListWidget.hpp>
3 #include <Process/Inspector/ProcessInspectorWidgetDelegate.hpp>
4 #include <Process/Inspector/ProcessInspectorWidgetDelegateFactory.hpp>
5 
6 #include <Control/Widgets.hpp>
7 #include <Engine/Node/Process.hpp>
8 #include <Inspector/InspectorLayout.hpp>
9 #include <Inspector/InspectorWidgetBase.hpp>
10 #include <Inspector/InspectorWidgetFactoryInterface.hpp>
11 
12 namespace Control
13 {
14 template <typename Vis, typename Info>
15 void visit_ports(Vis&& visitor, const ControlProcess<Info>& proc)
16 {
17  {
18  std::size_t i = 0;
19 
20  for(auto& port : Info::Metadata::audio_ins)
21  {
22  visitor(i, port);
23  i++;
24  }
25 
26  for(auto& port : Info::Metadata::midi_ins)
27  {
28  visitor(i, port);
29  i++;
30  }
31 
32  for(auto& port : Info::Metadata::value_ins)
33  {
34  visitor(i, port);
35  i++;
36  }
37  }
38 
39  {
40  std::size_t i = 0;
41 
42  for(auto& port : Info::Metadata::audio_outs)
43  {
44  visitor(i, port);
45  i++;
46  }
47 
48  for(auto& port : Info::Metadata::midi_outs)
49  {
50  visitor(i, port);
51  i++;
52  }
53 
54  for(auto& port : Info::Metadata::value_outs)
55  {
56  visitor(i, port);
57  i++;
58  }
59  }
60  {
61  if constexpr(ossia::safe_nodes::info_functions<Info>::control_count > 0)
62  {
63  auto start = ossia::safe_nodes::info_functions<Info>::control_start;
64  std::size_t i = 0;
65  ossia::for_each_in_tuple(Info::Metadata::controls, [&](const auto& ctrl) {
66  visitor(start + i, ctrl);
67  i++;
68  });
69  }
70  }
71 }
72 
73 template <typename Proc>
75 {
76  const Proc& object;
77  const score::DocumentContext& doc;
78  Inspector::Layout& vlay;
79  QWidget* self{};
80 
81  void operator()(std::size_t i, const ossia::safe_nodes::audio_in& in)
82  {
83  auto& inlet = *object.inlets()[i];
84  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
85  }
86  void operator()(std::size_t i, const ossia::safe_nodes::value_in& in)
87  {
88  auto& inlet = *object.inlets()[i];
89  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
90  }
91  void operator()(std::size_t i, const ossia::safe_nodes::midi_in& in)
92  {
93  auto& inlet = *object.inlets()[i];
94  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
95  }
96  void operator()(std::size_t i, const ossia::safe_nodes::address_in& in)
97  {
98  auto& inlet = *object.inlets()[i];
99  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
100  }
101  template <typename Control_T>
102  void operator()(std::size_t i, const Control_T& ctrl)
103  {
104  auto& inlet = *static_cast<Process::ControlInlet*>(object.inlets()[i]);
105  Process::PortWidgetSetup::setupControl(
106  inlet, ctrl.make_widget(ctrl, inlet, doc, self, self), doc, vlay, self);
107  }
108 
109  void operator()(std::size_t i, const ossia::safe_nodes::audio_out& out)
110  {
111  auto& inlet = *object.outlets()[i];
112  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
113  }
114  void operator()(std::size_t i, const ossia::safe_nodes::value_out& out)
115  {
116  auto& inlet = *object.outlets()[i];
117  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
118  }
119  void operator()(std::size_t i, const ossia::safe_nodes::midi_out& out)
120  {
121  auto& inlet = *object.outlets()[i];
122  Process::PortWidgetSetup::setupAlone(inlet, doc, vlay, self);
123  }
124 };
125 
126 }
Definition: lib/score/widgets/Layout.hpp:29
Definition: score-lib-process/Process/Dataflow/Port.hpp:202
Definition: score-plugin-engine/Engine/Node/Inspector.hpp:75
Definition: DocumentContext.hpp:18