Loading...
Searching...
No Matches
PortFactory.hpp
1#pragma once
2#include <Process/Dataflow/Port.hpp>
3
4#include <score/graphics/TextItem.hpp>
5#include <score/plugins/Interface.hpp>
6#include <score/plugins/InterfaceList.hpp>
8class QGraphicsItem;
9namespace Inspector
10{
11class Layout;
12}
13namespace Dataflow
14{
15class PortItem;
16}
17namespace Process
18{
19struct Context;
21{
22 QGraphicsItem* container{};
23 Dataflow::PortItem* port_item{};
24 QGraphicsItem* control{};
25 score::SimpleTextItem* label{};
26 // QRectF itemRect;
27};
28
29class SCORE_LIB_PROCESS_EXPORT PortFactory : public score::InterfaceBase
30{
31 SCORE_INTERFACE(Process::Port, "4d461658-5c27-4a12-ba97-3d9392561ece")
32public:
33 ~PortFactory() override;
34
35 virtual Process::Port* load(const VisitorVariant&, QObject* parent) = 0;
36
37 // Just the port
38 virtual Dataflow::PortItem* makePortItem(
39 Process::Inlet& port, const Process::Context& ctx, QGraphicsItem* parent,
40 QObject* context);
41 virtual Dataflow::PortItem* makePortItem(
42 Process::Outlet& port, const Process::Context& ctx, QGraphicsItem* parent,
43 QObject* context);
44
45 // Just the control
46 virtual QGraphicsItem* makeControlItem(
48 QGraphicsItem* parent, QObject* context);
49 virtual QGraphicsItem* makeControlItem(
51 QGraphicsItem* parent, QObject* context);
52
53 // Port + control + text
54 ControlLayout makeFullItem(
55 Process::ControlInlet& port, const Process::Context& ctx, QGraphicsItem* parent,
56 QObject* context);
57 ControlLayout makeFullItem(
58 Process::ControlOutlet& port, const Process::Context& ctx, QGraphicsItem* parent,
59 QObject* context);
60
61 // Port + text
62 ControlLayout makeLabelItem(
63 Process::Inlet& port, const Process::Context& ctx, QGraphicsItem* parent,
64 QObject* context);
65 ControlLayout makeLabelItem(
66 Process::Outlet& port, const Process::Context& ctx, QGraphicsItem* parent,
67 QObject* context);
68
69 // Widget stuff
70 virtual void setupInletInspector(
71 const Process::Inlet& port, const score::DocumentContext& ctx, QWidget* parent,
72 Inspector::Layout& lay, QObject* context);
73 virtual void setupOutletInspector(
74 const Process::Outlet& port, const score::DocumentContext& ctx, QWidget* parent,
75 Inspector::Layout& lay, QObject* context);
76
77 virtual PortItemLayout defaultLayout() const noexcept;
78};
79
80class SCORE_LIB_PROCESS_EXPORT PortFactoryList final
81 : public score::InterfaceList<PortFactory>
82{
83public:
86 Process::Port* loadMissing(const VisitorVariant& vis, QObject* parent) const;
87};
88
89template <typename Model_T>
91{
92public:
93 ~PortFactory_T() override = default;
94
95private:
96 UuidKey<Process::Port> concreteKey() const noexcept override
97 {
99 }
100
101 Model_T* load(const VisitorVariant& vis, QObject* parent) override
102 {
103 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
104 return new Model_T{deserializer, parent};
105 });
106 }
107};
108
109SCORE_LIB_PROCESS_EXPORT
110void readPorts(
111 DataStreamReader& wr, const Process::Inlets& ins, const Process::Outlets& outs);
112
113SCORE_LIB_PROCESS_EXPORT
114void readPorts(
115 JSONReader& obj, const Process::Inlets& ins, const Process::Outlets& outs);
116
117SCORE_LIB_PROCESS_EXPORT
118void writePorts(
120 Process::Outlets& outs, QObject* parent);
121
122SCORE_LIB_PROCESS_EXPORT
123void writePorts(
124 const JSONWriter& obj, const Process::PortFactoryList& pl, Process::Inlets& ins,
125 Process::Outlets& outs, QObject* parent);
126}
Definition DataStreamVisitor.hpp:27
Definition DataStreamVisitor.hpp:202
Definition score-lib-process/Process/Dataflow/PortItem.hpp:41
Definition lib/score/widgets/Layout.hpp:29
Definition JSONVisitor.hpp:52
Definition JSONVisitor.hpp:423
Definition Port.hpp:205
Definition Port.hpp:426
Definition Port.hpp:179
Definition Port.hpp:274
Definition PortFactory.hpp:91
Definition PortFactory.hpp:30
Definition PortFactory.hpp:82
Definition Port.hpp:103
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
Static metadata implementation.
Definition lib/score/tools/Metadata.hpp:36
Definition ProcessContext.hpp:12
Definition PortFactory.hpp:21
Definition PortForward.hpp:23
Definition PortForward.hpp:27
Definition Port.hpp:90
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition DocumentContext.hpp:18