Loading...
Searching...
No Matches
EffectFactory.hpp
1#pragma once
2#include <Process/LayerView.hpp>
3#include <Process/Process.hpp>
4#include <Process/ProcessFactory.hpp>
5
6#include <Effect/EffectLayer.hpp>
7
8#include <score/graphics/RectItem.hpp>
9
10namespace Process
11{
12template <typename Model_T>
14{
15public:
16 virtual ~EffectProcessFactory_T() = default;
17
18 UuidKey<Process::ProcessModel> concreteKey() const noexcept override
19 {
21 }
22 QString prettyName() const noexcept override
23 {
25 }
26 QString category() const noexcept override
27 {
29 }
30
31 Descriptor descriptor(QString) const noexcept override;
32 Descriptor descriptor(const Process::ProcessModel&) const noexcept override;
33
34 ProcessFlags flags() const noexcept override
35 {
37 }
38
39 QString customConstructionData() const noexcept override;
40
41 Model_T* make(
42 const TimeVal& duration, const QString& data, const Id<Process::ProcessModel>& id,
43 const score::DocumentContext& ctx, QObject* parent) override
44 {
45 return new Model_T{duration, data, id, parent};
46 }
47
48 Model_T* load(
49 const VisitorVariant& vis, const score::DocumentContext& ctx,
50 QObject* parent) final override
51 {
52 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
53 return new Model_T{deserializer, parent};
54 });
55 }
56};
57
58template <typename Model_T>
60{
61 static_assert(std::is_same<Model_T, void>::value, "can't be used like this");
62 return {};
63}
64
65class SCORE_LIB_PROCESS_EXPORT EffectLayerFactory_Base : public Process::LayerFactory
66{
67public:
70
71 LayerView* makeLayerView(
72 const Process::ProcessModel&, const Process::Context& context,
73 QGraphicsItem* parent) const final override;
74
75 LayerPresenter* makeLayerPresenter(
77 const Process::Context& context, QObject* parent) const final override;
78
79 score::ResizeableItem* makeItem(
80 const Process::ProcessModel& proc, const Process::Context& ctx,
81 QGraphicsItem* parent) const override;
82};
83
84template <typename Model_T, typename ExtView_T = void>
86{
87public:
88 virtual ~EffectLayerFactory_T() = default;
89
90private:
91 UuidKey<Process::ProcessModel> concreteKey() const noexcept override
92 {
94 }
95
96 bool hasExternalUI(
97 const Process::ProcessModel& proc,
98 const score::DocumentContext& ctx) const noexcept override
99 {
100 return ((Model_T&)proc).hasExternalUI();
101 }
102
103 QWidget* makeExternalUI(
105 QWidget* parent) const final override
106 {
107 (void)parent;
108 try
109 {
110 if constexpr(!std::is_same_v<ExtView_T, void>)
111 return new ExtView_T{safe_cast<Model_T&>(proc), ctx, parent};
112 }
113 catch(...)
114 {
115 }
116 return nullptr;
117 }
118
119 bool matches(const UuidKey<Process::ProcessModel>& p) const override
120 {
122 }
123};
124}
Definition EffectFactory.hpp:66
Definition EffectFactory.hpp:86
Definition EffectFactory.hpp:14
Definition score-lib-process/Process/ProcessFactory.hpp:59
Definition LayerPresenter.hpp:34
Definition LayerView.hpp:21
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:345
The id_base_t class.
Definition Identifier.hpp:59
Definition RectItem.hpp:12
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 TimeValue.hpp:21
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition ObjectMatches.hpp:6
Definition DocumentContext.hpp:18