Loading...
Searching...
No Matches
Process/ScenarioExecution.hpp
1#pragma once
2#include <Process/Execution/ProcessComponent.hpp>
3
4#include <Scenario/Document/Components/ScenarioComponent.hpp>
5#include <Scenario/Document/Event/EventExecution.hpp>
6#include <Scenario/Document/Graph.hpp>
7#include <Scenario/Document/Interval/IntervalExecution.hpp>
8#include <Scenario/Document/Interval/IntervalModel.hpp>
9#include <Scenario/Document/State/StateExecution.hpp>
10#include <Scenario/Document/TimeSync/TimeSyncExecution.hpp>
11#include <Scenario/Tools/dataStructures.hpp>
12
13#include <score/model/IdentifiedObjectMap.hpp>
14#include <score/model/Identifier.hpp>
15#include <score/tools/std/Optional.hpp>
16
17#include <ossia/editor/scenario/time_event.hpp>
18
19#include <memory>
20#include <verdigris>
21
22namespace Execution
23{
24class ScenarioComponentBase;
25}
26Q_DECLARE_METATYPE(std::shared_ptr<Execution::EventComponent>)
27W_REGISTER_ARGTYPE(std::shared_ptr<Execution::EventComponent>)
28Q_DECLARE_METATYPE(std::weak_ptr<Execution::ScenarioComponentBase>)
29W_REGISTER_ARGTYPE(std::weak_ptr<Execution::ScenarioComponentBase>)
30Q_DECLARE_METATYPE(ossia::time_event::status)
31W_REGISTER_ARGTYPE(ossia::time_event::status)
32namespace Device
33{
34class DeviceList;
35}
36namespace Process
37{
38class ProcessModel;
39}
40class QObject;
41namespace ossia
42{
43class time_process;
44struct time_value;
45} // namespace OSSIA
46
47namespace Execution
48{
49class EventComponent;
50class StateComponent;
51class TimeSyncComponent;
52}
53
54namespace Scenario
55{
56class ProcessModel;
57class EventModel;
58class StateModel;
59class TimeSyncModel;
60class CSPCoherencyCheckerInterface;
61} // namespace Scenario
62
63namespace ossia
64{
65class scenario;
66}
67
68namespace Execution
69{
70class IntervalComponent;
71class SCORE_PLUGIN_SCENARIO_EXPORT ScenarioComponentBase
72 : public ProcessComponent_T<Scenario::ProcessModel, ossia::scenario>
73{
74 W_OBJECT(ScenarioComponentBase)
75 COMPONENT_METADATA("4e4b1c1a-1a2a-4ae6-a1a1-38d0900e74e8")
76
77public:
79 Scenario::ProcessModel& proc, const Context& ctx, QObject* parent);
80 ~ScenarioComponentBase() override;
81
82 const auto& states() const { return m_ossia_states; }
83 const score::hash_map<Id<Scenario::IntervalModel>, std::shared_ptr<IntervalComponent>>&
84 intervals() const
85 {
86 return m_ossia_intervals;
87 }
88 const auto& events() const { return m_ossia_timeevents; }
89 const auto& timeSyncs() const { return m_ossia_timesyncs; }
90
91 void playInterval(const Scenario::IntervalModel& itv);
94 void playIntervalFrom(const Scenario::IntervalModel& itv, TimeVal t);
95 void stopInterval(const Scenario::IntervalModel& itv);
96
97 void stop() override;
98
99 template <typename Component_T, typename Element>
100 Component_T* make(Element& elt);
101
102 template <typename Component_T, typename Element, typename Fun>
103 void removed(const Element& elt, const Component_T& comp, Fun f)
104 {
105 if(f)
106 f();
107 }
108
109 std::function<void()> removing(const Scenario::IntervalModel& e, IntervalComponent& c);
110
111 std::function<void()> removing(const Scenario::TimeSyncModel& e, TimeSyncComponent& c);
112
113 std::function<void()> removing(const Scenario::EventModel& e, EventComponent& c);
114
115 std::function<void()> removing(const Scenario::StateModel& e, StateComponent& c);
116
117public:
118 void sig_eventCallback(
119 std::weak_ptr<ScenarioComponentBase> self, std::shared_ptr<EventComponent> arg_1,
120 ossia::time_event::status st)
121 E_SIGNAL(SCORE_PLUGIN_SCENARIO_EXPORT, sig_eventCallback, self, arg_1, st)
122
123protected:
124 void startIntervalExecution(const Id<Scenario::IntervalModel>&);
125 void stopIntervalExecution(const Id<Scenario::IntervalModel>&);
126 void disableIntervalExecution(const Id<Scenario::IntervalModel>& id);
127
128 void eventCallback(
129 std::weak_ptr<ScenarioComponentBase> self, std::shared_ptr<EventComponent> ev,
130 ossia::time_event::status newStatus);
131
132 score::hash_map<Id<Scenario::IntervalModel>, std::shared_ptr<IntervalComponent>>
133 m_ossia_intervals;
134 score::hash_map<Id<Scenario::StateModel>, std::shared_ptr<StateComponent>>
135 m_ossia_states;
136 score::hash_map<Id<Scenario::TimeSyncModel>, std::shared_ptr<TimeSyncComponent>>
137 m_ossia_timesyncs;
138 score::hash_map<Id<Scenario::EventModel>, std::shared_ptr<EventComponent>>
139 m_ossia_timeevents;
140
141 score::hash_map<Id<Scenario::IntervalModel>, Scenario::IntervalModel*>
142 m_executingIntervals;
143
144 const Context& m_ctx;
145
147 QVector<Id<Scenario::TimeSyncModel>> m_pastTn{};
148 Scenario::ElementsProperties m_properties{};
149
151};
152
156
157struct SCORE_PLUGIN_SCENARIO_EXPORT ScenarioComponent final
159{
160 ScenarioComponent(Scenario::ProcessModel& proc, const Context& ctx, QObject* parent);
161
162 void lazy_init() override;
163
164 void cleanup() override;
165};
166
168}
Definition EventExecution.hpp:18
Definition IntervalExecution.hpp:135
Definition Process/Execution/ProcessComponent.hpp:131
Definition Process/ScenarioExecution.hpp:73
Definition StateExecution.hpp:85
Definition TimeSyncExecution.hpp:20
Definition Scenario/Document/Components/ScenarioComponent.hpp:198
Definition CSPCoherencyCheckerInterface.hpp:9
Definition EventModel.hpp:36
Definition IntervalModel.hpp:50
The core hierarchical and temporal process of score.
Definition ScenarioModel.hpp:37
Definition StateModel.hpp:62
Definition TimeSyncModel.hpp:34
The id_base_t class.
Definition Identifier.hpp:59
Manipulation of Devices from Qt.
Definition AddressSettings.cpp:14
Components used for the execution of a score.
Definition PortTap.cpp:24
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13
Definition ExecutionContext.hpp:208
Definition Process/Execution/ProcessComponent.hpp:101
Definition Process/ScenarioExecution.hpp:159
Definition dataStructures.hpp:65
Definition score-plugin-scenario/Scenario/Document/Graph.hpp:63
Definition TimeValue.hpp:21