summaryrefslogtreecommitdiffstats
path: root/src/Driver.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Driver.hpp')
-rw-r--r--src/Driver.hpp77
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