diff options
Diffstat (limited to 'src/Driver.hpp')
-rw-r--r-- | src/Driver.hpp | 77 |
1 files changed, 40 insertions, 37 deletions
diff --git a/src/Driver.hpp b/src/Driver.hpp index 3837382..4cb890b 100644 --- a/src/Driver.hpp +++ b/src/Driver.hpp @@ -1,55 +1,58 @@ -/* This file is part of Patchage. - * Copyright 2007-2014 David Robillard <http://drobilla.net> - * - * Patchage is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) - * any later version. - * - * Patchage is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. - * - * You should have received a copy of the GNU General Public License - * along with Patchage. If not, see <http://www.gnu.org/licenses/>. - */ +// Copyright 2007-2020 David Robillard <d@drobilla.net> +// SPDX-License-Identifier: GPL-3.0-or-later #ifndef PATCHAGE_DRIVER_HPP #define PATCHAGE_DRIVER_HPP -#include <boost/shared_ptr.hpp> -#include <sigc++/sigc++.h> +#include "Event.hpp" -#include "PatchageEvent.hpp" +#include <functional> +#include <utility> -class PatchagePort; -class PatchageCanvas; +namespace patchage { -/** Trival driver base class */ -class Driver { +struct PortID; + +/// Base class for drivers that handle system clients and ports +class Driver +{ public: - virtual ~Driver() {} + using EventSink = std::function<void(const Event&)>; + + explicit Driver(EventSink emit_event) + : _emit_event{std::move(emit_event)} + {} + + Driver(const Driver&) = delete; + Driver& operator=(const Driver&) = delete; - virtual void process_events(Patchage* app) = 0; + Driver(Driver&&) = delete; + Driver& operator=(Driver&&) = delete; - virtual void attach(bool launch_daemon) = 0; - virtual void detach() = 0; - virtual bool is_attached() const = 0; + virtual ~Driver() = default; - virtual void refresh() = 0; - virtual void destroy_all() {} + /// Connect to the underlying system API + virtual void attach(bool launch_daemon) = 0; - virtual PatchagePort* create_port_view(Patchage* patchage, - const PortID& id) = 0; + /// Disconnect from the underlying system API + virtual void detach() = 0; - virtual bool connect(PatchagePort* src_port, - PatchagePort* dst_port) = 0; + /// Return true iff the driver is active and connected to the system + virtual bool is_attached() const = 0; - virtual bool disconnect(PatchagePort* src_port, - PatchagePort* dst_port) = 0; + /// Send events to `sink` that describe the complete current system state + virtual void refresh(const EventSink& sink) = 0; - sigc::signal<void> signal_attached; - sigc::signal<void> signal_detached; + /// Make a connection between ports + virtual bool connect(const PortID& tail_id, const PortID& head_id) = 0; + + /// Remove a connection between ports + virtual bool disconnect(const PortID& tail_id, const PortID& head_id) = 0; + +protected: + EventSink _emit_event; ///< Sink for emitting "live" events }; +} // namespace patchage + #endif // PATCHAGE_DRIVER_HPP |