PortFactory.hpp
1 #pragma once
2 #include <Process/Dataflow/Port.hpp>
3 
4 #include <score/plugins/Interface.hpp>
5 #include <score/plugins/InterfaceList.hpp>
7 class QGraphicsItem;
8 namespace Inspector
9 {
10 class Layout;
11 }
12 namespace Dataflow
13 {
14 class PortItem;
15 }
16 namespace Process
17 {
18 struct Context;
19 
20 class SCORE_LIB_PROCESS_EXPORT PortFactory : public score::InterfaceBase
21 {
22  SCORE_INTERFACE(Process::Port, "4d461658-5c27-4a12-ba97-3d9392561ece")
23 public:
24  ~PortFactory() override;
25 
26  virtual Process::Port* load(const VisitorVariant&, QObject* parent) = 0;
27 
28  // Just the port
29  virtual Dataflow::PortItem* makePortItem(
30  Process::Inlet& port, const Process::Context& ctx, QGraphicsItem* parent,
31  QObject* context);
32  virtual Dataflow::PortItem* makePortItem(
33  Process::Outlet& port, const Process::Context& ctx, QGraphicsItem* parent,
34  QObject* context);
35 
36  // Just the control
37  virtual QGraphicsItem* makeControlItem(
39  QGraphicsItem* parent, QObject* context);
40  virtual QGraphicsItem* makeControlItem(
42  QGraphicsItem* parent, QObject* context);
43 
44  // Port + control + text
45  QGraphicsItem* makeFullItem(
46  Process::ControlInlet& port, const Process::Context& ctx, QGraphicsItem* parent,
47  QObject* context);
48  QGraphicsItem* makeFullItem(
49  Process::ControlOutlet& port, const Process::Context& ctx, QGraphicsItem* parent,
50  QObject* context);
51 
52  // Widget stuff
53  virtual void setupInletInspector(
54  const Process::Inlet& port, const score::DocumentContext& ctx, QWidget* parent,
55  Inspector::Layout& lay, QObject* context);
56  virtual void setupOutletInspector(
57  const Process::Outlet& port, const score::DocumentContext& ctx, QWidget* parent,
58  Inspector::Layout& lay, QObject* context);
59 
60  virtual PortItemLayout defaultLayout() const noexcept;
61 };
62 
63 class SCORE_LIB_PROCESS_EXPORT PortFactoryList final
64  : public score::InterfaceList<PortFactory>
65 {
66 public:
67  using object_type = Process::Port;
68  ~PortFactoryList();
69  Process::Port* loadMissing(const VisitorVariant& vis, QObject* parent) const;
70 };
71 
72 template <typename Model_T>
73 class PortFactory_T final : public Process::PortFactory
74 {
75 public:
76  ~PortFactory_T() override = default;
77 
78 private:
79  UuidKey<Process::Port> concreteKey() const noexcept override
80  {
82  }
83 
84  Model_T* load(const VisitorVariant& vis, QObject* parent) override
85  {
86  return score::deserialize_dyn(vis, [&](auto&& deserializer) {
87  return new Model_T{deserializer, parent};
88  });
89  }
90 };
91 
92 SCORE_LIB_PROCESS_EXPORT
93 void readPorts(
94  DataStreamReader& wr, const Process::Inlets& ins, const Process::Outlets& outs);
95 
96 SCORE_LIB_PROCESS_EXPORT
97 void readPorts(
98  JSONReader& obj, const Process::Inlets& ins, const Process::Outlets& outs);
99 
100 SCORE_LIB_PROCESS_EXPORT
101 void writePorts(
103  Process::Outlets& outs, QObject* parent);
104 
105 SCORE_LIB_PROCESS_EXPORT
106 void writePorts(
107  const JSONWriter& obj, const Process::PortFactoryList& pl, Process::Inlets& ins,
108  Process::Outlets& outs, QObject* parent);
109 }
Definition: DataStreamVisitor.hpp:27
Definition: DataStreamVisitor.hpp:202
Definition: score-lib-process/Process/Dataflow/PortItem.hpp:39
Definition: lib/score/widgets/Layout.hpp:29
Definition: JSONVisitor.hpp:52
Definition: JSONVisitor.hpp:423
Definition: score-lib-process/Process/Dataflow/Port.hpp:202
Definition: score-lib-process/Process/Dataflow/Port.hpp:415
Definition: score-lib-process/Process/Dataflow/Port.hpp:176
Definition: score-lib-process/Process/Dataflow/Port.hpp:264
Definition: PortFactory.hpp:74
Definition: PortFactory.hpp:21
Definition: PortFactory.hpp:65
Definition: score-lib-process/Process/Dataflow/Port.hpp:102
Definition: UuidKey.hpp:343
Base class for plug-in interfaces.
Definition: Interface.hpp:52
InterfaceList Default implementation of InterfaceListBase.
Definition: InterfaceList.hpp:80
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:1324
Static metadata implementation.
Definition: lib/score/tools/Metadata.hpp:36
Definition: ProcessContext.hpp:12
Definition: PortForward.hpp:23
Definition: PortForward.hpp:27
Definition: score-lib-process/Process/Dataflow/Port.hpp:90
The VisitorVariant struct.
Definition: VisitorInterface.hpp:26
Definition: DocumentContext.hpp:18