From 8c911234e691bb53f5ffc9726df599362c537739 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 19 Oct 2016 15:12:49 -0400 Subject: basics of managing a list of port names for MIDI-input-follows-selection --- libs/ardour/ardour/port_manager.h | 10 ++++++++++ libs/ardour/port_manager.cc | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/port_manager.h b/libs/ardour/ardour/port_manager.h index 03484c598b..6433b1bd6d 100644 --- a/libs/ardour/ardour/port_manager.h +++ b/libs/ardour/ardour/port_manager.h @@ -128,6 +128,13 @@ class LIBARDOUR_API PortManager bool port_remove_in_progress() const { return _port_remove_in_progress; } + typedef std::vector MidiSelectionPorts; + + void get_midi_selection_ports (MidiSelectionPorts&) const; + void add_to_midi_selection_ports (std::string const&); + void remove_from_midi_selection_ports (std::string const&); + void clear_midi_selection_ports (); + /** Emitted if the backend notifies us of a graph order event */ PBD::Signal0 GraphReordered; @@ -170,6 +177,9 @@ class LIBARDOUR_API PortManager * Realtime safe. */ void cycle_end (pframes_t nframes); + + mutable Glib::Threads::Mutex midi_selection_ports_mutex; + MidiSelectionPorts _midi_selection_ports; }; diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index 7a13756dab..d24c929930 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -851,3 +851,36 @@ PortManager::port_is_control_only (std::string const& name) return regexec (&compiled_pattern, name.c_str(), 0, 0, 0) == 0; } + +void +PortManager::get_midi_selection_ports (MidiSelectionPorts& copy) const +{ + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + copy = _midi_selection_ports; +} + +void +PortManager::add_to_midi_selection_ports (string const & port) +{ + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + if (find (_midi_selection_ports.begin(), _midi_selection_ports.end(), port) == _midi_selection_ports.end()) { + _midi_selection_ports.push_back (port); + } +} + +void +PortManager::remove_from_midi_selection_ports (string const & port) +{ + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + MidiSelectionPorts::iterator x = find (_midi_selection_ports.begin(), _midi_selection_ports.end(), port); + if (x != _midi_selection_ports.end()) { + _midi_selection_ports.erase (x); + } +} + +void +PortManager::clear_midi_selection_ports () +{ + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + _midi_selection_ports.clear (); +} -- cgit v1.2.3