diff options
Diffstat (limited to 'src/Reactor.hpp')
-rw-r--r-- | src/Reactor.hpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/Reactor.hpp b/src/Reactor.hpp new file mode 100644 index 0000000..a5bc9e9 --- /dev/null +++ b/src/Reactor.hpp @@ -0,0 +1,75 @@ +// Copyright 2007-2021 David Robillard <d@drobilla.net> +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef PATCHAGE_REACTOR_HPP +#define PATCHAGE_REACTOR_HPP + +#include "Action.hpp" + +#include <string> + +namespace patchage { + +enum class SignalDirection; + +struct ClientID; +struct PortID; + +class Canvas; +class CanvasModule; +class CanvasPort; +class Configuration; +class Drivers; +class ILog; + +/// Reacts to actions from the user +class Reactor +{ +public: + explicit Reactor(Configuration& conf, + Drivers& drivers, + Canvas& canvas, + ILog& log); + + Reactor(const Reactor&) = delete; + Reactor& operator=(const Reactor&) = delete; + + Reactor(Reactor&&) = delete; + Reactor& operator=(Reactor&&) = delete; + + ~Reactor() = default; + + void operator()(const action::ChangeSetting& action); + void operator()(const action::ConnectPorts& action); + void operator()(const action::DecreaseFontSize& action); + void operator()(const action::DisconnectClient& action); + void operator()(const action::DisconnectPort& action); + void operator()(const action::DisconnectPorts& action); + void operator()(const action::IncreaseFontSize& action); + void operator()(const action::MoveModule& action); + void operator()(const action::Refresh& action); + void operator()(const action::ResetFontSize& action); + void operator()(const action::SplitModule& action); + void operator()(const action::UnsplitModule& action); + void operator()(const action::ZoomFull& action); + void operator()(const action::ZoomIn& action); + void operator()(const action::ZoomNormal& action); + void operator()(const action::ZoomOut& action); + + void operator()(const Action& action); + +private: + std::string module_name(const ClientID& client); + + CanvasModule* find_module(const ClientID& client, SignalDirection type); + CanvasPort* find_port(const PortID& port); + + Configuration& _conf; + Drivers& _drivers; + Canvas& _canvas; + ILog& _log; +}; + +} // namespace patchage + +#endif // PATCHAGE_REACTOR_HPP |