Loading...
Searching...
No Matches
PortFactory.hpp
1#pragma once
2#include <Process/Dataflow/Port.hpp>
3
4#include <score/graphics/WidgetPresentation.hpp>
5#include <score/graphics/TextItem.hpp>
6#include <score/plugins/Interface.hpp>
7#include <score/plugins/InterfaceList.hpp>
9
10#include <optional>
11class QGraphicsItem;
12namespace Inspector
13{
14class Layout;
15}
16namespace Dataflow
17{
18class PortItem;
19}
20namespace Process
21{
22struct Context;
25{
27 enum class Widget
28 {
29 Default,
30 Knob,
31 Combo
32 };
33
35 std::optional<QString> label;
36 bool labelVisible{true};
37 score::ControlSize size{score::ControlSize::Normal};
38 bool valueOnHover{false};
39 Widget widget{Widget::Default};
40
41 bool isDefault() const noexcept
42 {
43 return !label && labelVisible && size == score::ControlSize::Normal
44 && !valueOnHover && widget == Widget::Default;
45 }
46};
47
49{
50 QGraphicsItem* container{};
51 Dataflow::PortItem* port_item{};
52 QGraphicsItem* control{};
53 score::SimpleTextItem* label{};
54 // QRectF itemRect;
55};
56
57class SCORE_LIB_PROCESS_EXPORT PortFactory : public score::InterfaceBase
58{
59 SCORE_INTERFACE(Process::Port, "4d461658-5c27-4a12-ba97-3d9392561ece")
60public:
61 ~PortFactory() override;
62
63 virtual Process::Port* load(const VisitorVariant&, QObject* parent) = 0;
64
65 // Just the port
66 virtual Dataflow::PortItem* makePortItem(
67 Process::Inlet& port, const Process::Context& ctx, QGraphicsItem* parent,
68 QObject* context);
69 virtual Dataflow::PortItem* makePortItem(
70 Process::Outlet& port, const Process::Context& ctx, QGraphicsItem* parent,
71 QObject* context);
72
73 // Just the control
74 virtual QGraphicsItem* makeControlItem(
76 QGraphicsItem* parent, QObject* context);
77 virtual QGraphicsItem* makeControlItem(
79 QGraphicsItem* parent, QObject* context);
80
81 // Port + control + text
82 ControlLayout makeFullItem(
83 Process::ControlInlet& port, const Process::Context& ctx, QGraphicsItem* parent,
84 QObject* context, const ControlPresentation& presentation = {});
85 ControlLayout makeFullItem(
86 Process::ControlOutlet& port, const Process::Context& ctx, QGraphicsItem* parent,
87 QObject* context, const ControlPresentation& presentation = {});
88
89 // Port + text
90 ControlLayout makeLabelItem(
91 Process::Inlet& port, const Process::Context& ctx, QGraphicsItem* parent,
92 QObject* context);
93 ControlLayout makeLabelItem(
94 Process::Outlet& port, const Process::Context& ctx, QGraphicsItem* parent,
95 QObject* context);
96
97 // Widget stuff
98 virtual void setupInletInspector(
99 const Process::Inlet& port, const score::DocumentContext& ctx, QWidget* parent,
100 Inspector::Layout& lay, QObject* context);
101 virtual void setupOutletInspector(
102 const Process::Outlet& port, const score::DocumentContext& ctx, QWidget* parent,
103 Inspector::Layout& lay, QObject* context);
104
105 virtual PortItemLayout defaultLayout() const noexcept;
106};
107
108class SCORE_LIB_PROCESS_EXPORT PortFactoryList final
109 : public score::InterfaceList<PortFactory>
110{
111public:
114 Process::Port* loadMissing(const VisitorVariant& vis, QObject* parent) const;
115};
116
117template <typename Model_T>
119{
120public:
121 ~PortFactory_T() override = default;
122
123private:
124 UuidKey<Process::Port> concreteKey() const noexcept override
125 {
127 }
128
129 Model_T* load(const VisitorVariant& vis, QObject* parent) override
130 {
131 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
132 return new Model_T{deserializer, parent};
133 });
134 }
135};
136
137SCORE_LIB_PROCESS_EXPORT
138void readPorts(
139 DataStreamReader& wr, const Process::Inlets& ins, const Process::Outlets& outs);
140
141SCORE_LIB_PROCESS_EXPORT
142void readPorts(
143 JSONReader& obj, const Process::Inlets& ins, const Process::Outlets& outs);
144
145SCORE_LIB_PROCESS_EXPORT
146void writePorts(
148 Process::Outlets& outs, QObject* parent);
149
150SCORE_LIB_PROCESS_EXPORT
151void writePorts(
152 const JSONWriter& obj, const Process::PortFactoryList& pl, Process::Inlets& ins,
153 Process::Outlets& outs, QObject* parent);
154}
Definition DataStreamVisitor.hpp:27
Definition DataStreamVisitor.hpp:202
Definition score-lib-process/Process/Dataflow/PortItem.hpp:46
Definition lib/score/widgets/Layout.hpp:53
Definition JSONVisitor.hpp:52
Definition JSONVisitor.hpp:423
Definition Port.hpp:242
Definition Port.hpp:476
Definition Port.hpp:216
Definition Port.hpp:324
Definition PortFactory.hpp:119
Definition PortFactory.hpp:58
Definition PortFactory.hpp:110
Definition Port.hpp:106
Definition UuidKey.hpp:345
Base class for plug-in interfaces.
Definition Interface.hpp:52
InterfaceList Default implementation of InterfaceListBase.
Definition InterfaceList.hpp:97
Definition TextItem.hpp:28
Classes used for making and extending the inspector (default right panel).
Definition lib/score/widgets/Layout.hpp:27
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
ControlSize
Control widget size, relative to its default.
Definition WidgetPresentation.hpp:11
Static metadata implementation.
Definition lib/score/tools/Metadata.hpp:36
Definition ProcessContext.hpp:12
Definition PortFactory.hpp:49
Overrides of a control's default presentation in a layout.
Definition PortFactory.hpp:25
Widget
Widget override, where the port supports it.
Definition PortFactory.hpp:28
std::optional< QString > label
Display only: the port name is unchanged.
Definition PortFactory.hpp:35
Definition PortForward.hpp:23
Definition PortForward.hpp:27
Definition Port.hpp:93
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition DocumentContext.hpp:18