summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-10-19 15:12:49 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-10-19 17:49:35 -0400
commit8c911234e691bb53f5ffc9726df599362c537739 (patch)
tree9e4a2ed716e8d96c7d9b6abfddee4f94e6fe90fa
parent1cc561bf74c4e3376b5631a530754078e8ff8772 (diff)
basics of managing a list of port names for MIDI-input-follows-selection
-rw-r--r--libs/ardour/ardour/port_manager.h10
-rw-r--r--libs/ardour/port_manager.cc33
2 files changed, 43 insertions, 0 deletions
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<std::string> 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<void> 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 ();
+}