Loading...
Searching...
No Matches
ClockFactory.hpp
1#pragma once
2#include <Process/TimeValue.hpp>
3
4#include <score/plugins/Interface.hpp>
5#include <score/plugins/InterfaceList.hpp>
6
7#include <ossia/editor/scenario/time_value.hpp>
8
9#include <score_plugin_engine_export.h>
10#include <smallfun.hpp>
11namespace score
12{
13struct DocumentContext;
14class Document;
15}
16namespace Execution
17{
18struct Context;
19class BaseScenarioElement;
20
39using time_function = smallfun::function<ossia::time_value(const TimeVal&)>;
40using reverse_time_function = smallfun::function<TimeVal(const ossia::time_value&)>;
41class SCORE_PLUGIN_ENGINE_EXPORT Clock
42{
43public:
44 Clock(const Execution::Context& ctx);
45 virtual ~Clock();
46
47 const Context& context;
48 std::shared_ptr<BaseScenarioElement> scenario;
49
50 void play(const TimeVal& t);
51 void pause();
52 void resume();
53 void stop();
54 virtual bool paused() const;
55
57 virtual bool setStepping(bool stepping);
58 virtual bool stepping() const noexcept;
59
62 virtual bool stepTo(double seconds);
63
65 static Clock* running(const score::Document& doc) noexcept;
66
68 static int64_t playCount() noexcept;
69
71 static void requestStepping(const score::Document& doc, bool stepping);
72 static bool steppingRequested(const score::Document& doc) noexcept;
73
74protected:
75 virtual void play_impl(const TimeVal& t) = 0;
76 virtual void pause_impl() = 0;
77 virtual void resume_impl() = 0;
78 virtual void stop_impl() = 0;
79};
80
81class SCORE_PLUGIN_ENGINE_EXPORT ClockFactory : public score::InterfaceBase
82{
83 SCORE_INTERFACE(ClockFactory, "fb2b3624-ee6f-4e9a-901a-a096bb5fec0a")
84public:
85 virtual ~ClockFactory();
86
87 virtual QString prettyName() const = 0;
88 virtual std::unique_ptr<Clock> make(const Execution::Context& ctx) = 0;
89
90 virtual time_function makeTimeFunction(const score::DocumentContext& ctx) const = 0;
91 virtual reverse_time_function
92 makeReverseTimeFunction(const score::DocumentContext& ctx) const = 0;
93};
94
95class SCORE_PLUGIN_ENGINE_EXPORT ClockFactoryList final
96 : public score::InterfaceList<ClockFactory>
97{
98public:
99 using object_type = Clock;
100};
101}
102
103Q_DECLARE_METATYPE(Execution::ClockFactory::ConcreteKey)
104W_REGISTER_ARGTYPE(Execution::ClockFactory::ConcreteKey)
Definition ClockFactory.hpp:82
Definition ClockFactory.hpp:97
Definition ClockFactory.hpp:42
The Document class is the central part of the software.
Definition Document.hpp:51
Base class for plug-in interfaces.
Definition Interface.hpp:52
InterfaceList Default implementation of InterfaceListBase.
Definition InterfaceList.hpp:97
Components used for the execution of a score.
Definition ProcessComponent.cpp:14
smallfun::function< ossia::time_value(const TimeVal &)> time_function
Sets-up and manages the main execution clock.
Definition ExecutionContext.hpp:66
Base toolkit upon which the software is built.
Definition Application.cpp:83
Definition ExecutionContext.hpp:201
Definition TimeValue.hpp:21
Definition DocumentContext.hpp:18