Loading...
Searching...
No Matches
StateExecution.hpp
1#pragma once
2#include <Process/Execution/ProcessComponent.hpp>
3#include <Process/ExecutionComponent.hpp>
4#include <Process/Process.hpp>
5
6#include <Scenario/Document/Components/IntervalComponent.hpp>
7#include <Scenario/Document/State/StateModel.hpp>
8
9#include <score/model/ComponentHierarchy.hpp>
10
11#include <ossia/dataflow/nodes/state.hpp>
12
13namespace ossia
14{
15class graph_node;
16class time_event;
17}
18namespace Scenario
19{
20class StateModel;
21}
22
23namespace Execution
24{
25class SCORE_PLUGIN_SCENARIO_EXPORT StateComponentBase : public Execution::Component
26{
27 COMMON_COMPONENT_METADATA("b3905e79-2bd0-48bd-8654-8666455ceedd")
28public:
29 static constexpr bool is_unique = true;
30
36 const Scenario::StateModel& element, std::shared_ptr<ossia::time_event> ev,
37 const Execution::Context& ctx, QObject* parent);
38
40 void onDelete() const;
41
43 make(ProcessComponentFactory& factory, Process::ProcessModel& process);
44 ProcessComponent* make(Process::ProcessModel& process) { return nullptr; }
45 std::function<void()> removing(const Process::ProcessModel& e, ProcessComponent& c);
46
47 template <typename... Args>
48 void added(Args&&...)
49 {
50 }
51 template <typename Component_T, typename Element, typename Fun>
52 void removed(const Element& elt, const Component_T& comp, Fun f)
53 {
54 if(f)
55 f();
56 }
57 template <typename Models>
58 const auto& models() const
59 {
60 static_assert(
61 std::is_same<Models, Process::ProcessModel>::value,
62 "State component must be passed Process::ProcessModel as child.");
63
64 return m_model->stateProcesses;
65 }
66
67 const auto& processes() const { return m_processes; }
68 const auto& state() const
69 {
70 SCORE_ASSERT(m_model);
71 return *m_model;
72 }
73 const std::shared_ptr<ossia::nodes::state_writer>& node() const { return m_node; }
74
75protected:
76 QPointer<const Scenario::StateModel> m_model;
77 std::shared_ptr<ossia::time_event> m_ev;
78 std::shared_ptr<ossia::nodes::state_writer> m_node;
79 score::hash_map<Id<Process::ProcessModel>, std::shared_ptr<ProcessComponent>>
80 m_processes;
81};
82
83class SCORE_PLUGIN_SCENARIO_EXPORT StateComponent final
84 : public score::PolymorphicComponentHierarchy<StateComponentBase, false>
85{
86public:
87 template <typename... Args>
88 StateComponent(Args&&... args)
89 : PolymorphicComponentHierarchyManager{
90 score::lazy_init_t{}, std::forward<Args>(args)...}
91 {
92 init();
93 }
94
95 StateComponent(const StateComponent&) = delete;
97 StateComponent& operator=(const StateComponent&) = delete;
98 StateComponent& operator=(StateComponent&&) = delete;
100
101 void init();
102 void cleanup(const std::shared_ptr<StateComponent>&);
103};
104}
Definition Process/Execution/ProcessComponent.hpp:114
Definition Process/Execution/ProcessComponent.hpp:166
Definition Process/Execution/ProcessComponent.hpp:48
Definition StateExecution.hpp:26
Definition StateExecution.hpp:85
The Process class.
Definition score-lib-process/Process/Process.hpp:82
Definition StateModel.hpp:62
A component that has a reference to a specific context object.
Definition lib/score/model/Component.hpp:58
Manages polymorphic hierarchies of components.
Definition ComponentHierarchy.hpp:165
Components used for the execution of a score.
Definition PortTap.cpp:24
Main plug-in of score.
Definition ConnectionsList.hpp:22
Definition ExecutionContext.hpp:208
Definition lib/score/model/Component.hpp:16