Loading...
Searching...
No Matches
GenericProcessFactory.hpp
1#pragma once
2#include <Process/ProcessFactory.hpp>
3
5#include <score/tools/SafeCast.hpp>
6
7namespace Process
8{
10{
11};
12
13template <typename Model_T>
15{
16public:
17 virtual ~ProcessFactory_T() = default;
18
19 UuidKey<Process::ProcessModel> concreteKey() const noexcept override
20 {
22 }
23 QString prettyName() const noexcept override
24 {
26 }
27 QString category() const noexcept override
28 {
30 }
31 Descriptor descriptor(QString) const noexcept override
32 {
34 }
35 ProcessFlags flags() const noexcept override
36 {
38 }
39
40 Model_T* make(
41 const TimeVal& duration, const QString& data, const Id<Process::ProcessModel>& id,
42 const score::DocumentContext& ctx, QObject* parent) final override;
43
44 Model_T* load(
45 const VisitorVariant& vis, const score::DocumentContext& ctx,
46 QObject* parent) final override;
47};
48
49template <typename Model_T>
51 const TimeVal& duration, const QString& data, const Id<Process::ProcessModel>& id,
52 const score::DocumentContext& ctx, QObject* parent)
53{
54 if constexpr(std::is_constructible_v<
55 Model_T, TimeVal, QString, Id<Process::ProcessModel>, QObject*>)
56 {
57 if(!data.isEmpty())
58 {
59 return new Model_T{duration, data, id, parent};
60 }
61 else
62 {
63 if constexpr(std::is_constructible_v<
65 const score::DocumentContext&, QObject*>)
66 {
67 return new Model_T{duration, id, ctx, parent};
68 }
69 else if constexpr(std::is_constructible_v<
71 const score::DocumentContext&, QObject*>)
72 {
73 return new Model_T{id, ctx, parent};
74 }
75 else if constexpr(std::is_constructible_v<
76 Model_T, TimeVal, Id<Process::ProcessModel>, QObject*>)
77 {
78 return new Model_T{duration, id, parent};
79 }
80 else
81 {
82 return new Model_T{duration, data, id, parent};
83 }
84 }
85 }
86 else if constexpr(std::is_constructible_v<
88 const score::DocumentContext&, QObject*>)
89 return new Model_T{duration, id, ctx, parent};
90 else
91 return new Model_T{duration, id, parent};
92}
93
94template <typename Model_T>
95Model_T* ProcessFactory_T<Model_T>::load(
96 const VisitorVariant& vis, const score::DocumentContext& ctx, QObject* parent)
97{
98 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
99 if constexpr(std::is_constructible_v<
100 Model_T, decltype(deserializer), const score::DocumentContext&,
101 QObject*>)
102 return new Model_T{deserializer, ctx, parent};
103 else
104 return new Model_T{deserializer, parent};
105 });
106}
107
108template <
109 typename Model_T, typename LayerPresenter_T, typename LayerView_T,
110 typename HeaderDelegate_T = default_t>
112{
113public:
114 virtual ~LayerFactory_T() = default;
115
116private:
117 UuidKey<Process::ProcessModel> concreteKey() const noexcept override
118 {
120 }
121
122 std::optional<double> recommendedHeight() const noexcept override
123 {
124 if constexpr(bool(LayerPresenter_T::recommendedHeight))
125 {
126 return LayerPresenter_T::recommendedHeight;
127 }
128 return LayerFactory::recommendedHeight();
129 }
130
131 LayerView_T* makeLayerView(
132 const Process::ProcessModel& viewmodel, const Process::Context& context,
133 QGraphicsItem* parent) const final override
134 {
135 if constexpr(std::is_constructible_v<
136 LayerView_T, const Model_T&, const Process::Context&,
137 QGraphicsItem*>)
138 return new LayerView_T{safe_cast<const Model_T&>(viewmodel), context, parent};
139 else if constexpr(std::is_constructible_v<
140 LayerView_T, const Model_T&, QGraphicsItem*>)
141 return new LayerView_T{safe_cast<const Model_T&>(viewmodel), parent};
142 else
143 return new LayerView_T{parent};
144 }
145
146 LayerPresenter_T* makeLayerPresenter(
148 const Process::Context& context, QObject* parent) const final override
149 {
150 return new LayerPresenter_T{
151 safe_cast<const Model_T&>(lm), safe_cast<LayerView_T*>(v), context, parent};
152 }
153
154 bool matches(const UuidKey<Process::ProcessModel>& p) const override
155 {
157 }
158
159 HeaderDelegate* makeHeaderDelegate(
160 const ProcessModel& model, const Process::Context& ctx,
161 QGraphicsItem* parent) const override
162 {
163 if constexpr(std::is_same_v<HeaderDelegate_T, default_t>)
164 return LayerFactory::makeHeaderDelegate(model, ctx, parent);
165 else
166 return new HeaderDelegate_T{model, ctx};
167 }
168};
169
170template <typename Model_T>
172 : // final :
174{
175public:
176 virtual ~LayerFactory_T() = default;
177
178private:
179 UuidKey<Process::ProcessModel> concreteKey() const noexcept override
180 {
182 }
183
184 bool matches(const UuidKey<Process::ProcessModel>& p) const override
185 {
187 }
188};
189
190template <typename Model_T>
193}
Definition HeaderDelegate.hpp:16
Definition GenericProcessFactory.hpp:112
Definition score-lib-process/Process/ProcessFactory.hpp:59
Definition LayerView.hpp:21
Definition GenericProcessFactory.hpp:15
The ProcessFactory class.
Definition score-lib-process/Process/ProcessFactory.hpp:35
The Process class.
Definition score-lib-process/Process/Process.hpp:61
Definition UuidKey.hpp:344
The id_base_t class.
Definition Identifier.hpp:59
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
ProcessFlags
Various settings for processes.
Definition ProcessFlags.hpp:17
Static metadata implementation.
Definition lib/score/tools/Metadata.hpp:36
Definition ProcessContext.hpp:12
Definition score-lib-process/Process/ProcessMetadata.hpp:37
Definition GenericProcessFactory.hpp:10
Definition TimeValue.hpp:21
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition ObjectMatches.hpp:6
Definition DocumentContext.hpp:18