3 #include <Process/Focus/FocusDispatcher.hpp>
4 #include <Process/LayerPresenter.hpp>
5 #include <Process/LayerView.hpp>
6 #include <Process/Style/ScenarioStyle.hpp>
8 #include <Control/Widgets.hpp>
9 #include <Effect/EffectLayer.hpp>
10 #include <Effect/EffectLayout.hpp>
11 #include <Engine/Node/Process.hpp>
13 #include <score/application/GUIApplicationContext.hpp>
14 #include <score/graphics/RectItem.hpp>
15 #include <score/graphics/TextItem.hpp>
17 #include <tuplet/tuple.hpp>
19 #include <type_traits>
23 template <
typename T,
typename =
void>
28 struct HasCustomUI<T, std::void_t<decltype(&T::item)>> : std::true_type
31 template <
typename T,
typename =
void>
40 template <
typename Info>
46 QGraphicsItem& parent;
50 template <std::
size_t N>
51 auto& getControl() noexcept
54 using namespace tuplet;
56 constexpr
int i = ossia::safe_nodes::info_functions<Info>::control_start + N;
57 constexpr
const auto& ctrl = get<N>(Info::Metadata::controls);
59 return static_cast<port_type&
>(*inlets[i]);
62 template <std::
size_t N>
63 auto& getControlOut() noexcept
66 using namespace tuplet;
68 constexpr
int i = ossia::safe_nodes::info_functions<Info>::control_out_start + N;
69 constexpr
const auto& ctrl = get<N>(Info::Metadata::control_outs);
71 return static_cast<port_type&
>(*outlets[i]);
74 template <std::size_t... CI, std::size_t... CO>
75 void make(std::index_sequence<CI...>, std::index_sequence<CO...>) noexcept
78 getControl<CI>()..., getControlOut<CO>()..., process, parent, context, doc);
93 std::make_index_sequence<
94 ossia::safe_nodes::info_functions<Info>::control_count>{},
95 std::make_index_sequence<
96 ossia::safe_nodes::info_functions<Info>::control_out_count>{});
100 template <
typename Info>
107 virtual ~ControlLayerFactory() =
default;
110 std::optional<double> recommendedHeight() const noexcept
override
112 if constexpr(Info::Metadata::recommended_height > 0)
114 return Info::Metadata::recommended_height;
116 return LayerFactory::recommendedHeight();
131 QGraphicsItem* parent)
const final override
133 if constexpr(HasCustomLayer<Info>::value)
134 return new typename Info::Layer{proc, context, parent};
143 if constexpr(HasCustomLayer<Info>::value)
145 auto view =
static_cast<typename Info::Layer*
>(v);
148 else if constexpr(HasCustomUI<Info>::value)
150 auto view = safe_cast<Process::EffectLayerView*>(v);
160 QGraphicsItem* parent)
const final override
162 if constexpr(HasCustomLayer<Info>::value)
167 else if constexpr(HasCustomUI<Info>::value)
171 *rootItem, *rootItem, ctx};
173 rootItem->fitChildrenRect();
176 rootItem, &score::ResizeableItem::childrenSizeChanged, rootItem,
177 &score::EmptyRectItem::fitChildrenRect);
Definition: EffectLayer.hpp:27
Definition: EffectLayer.hpp:16
Definition: score-lib-process/Process/ProcessFactory.hpp:58
Definition: LayerPresenter.hpp:34
Definition: LayerView.hpp:21
The Process class.
Definition: score-lib-process/Process/Process.hpp:61
The id_base_t class.
Definition: Identifier.hpp:57
Definition: RectItem.hpp:64
Definition: RectItem.hpp:12
Definition: score-plugin-engine/Engine/Node/Layer.hpp:42
Definition: score-plugin-engine/Engine/Node/Layer.hpp:33
Definition: score-plugin-engine/Engine/Node/Layer.hpp:25
Definition: ProcessContext.hpp:12
Definition: PortForward.hpp:23
Definition: PortForward.hpp:27
Definition: ObjectMatches.hpp:6