summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-05-08 15:03:06 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-29 14:18:10 -0400
commit511f609a148f7aceadedb7ee7d982d7dc4e1e592 (patch)
tree98b37026182ff92a171e3bee62509de13cd4849b
parent2f95da983b3f1a36065dbeec25871fad7a4f6410 (diff)
add Session::reconnect_midi_scene_ports()
-rw-r--r--libs/ardour/ardour/session.h2
-rw-r--r--libs/ardour/session.cc34
2 files changed, 36 insertions, 0 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 2a90230c73..b48b326a60 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -980,6 +980,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
MIDI::MachineControl& mmc() { return *_mmc; }
+ void reconnect_midi_scene_ports (bool);
+
protected:
friend class AudioEngine;
void set_block_size (pframes_t nframes);
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 94153de1cf..f6d04b1be9 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -2375,6 +2375,40 @@ Session::reconnect_existing_routes (bool withLock, bool reconnect_master, bool r
*/
}
+void
+Session::reconnect_midi_scene_ports(bool inputs)
+{
+ if (inputs) {
+ scene_in()->disconnect_all ();
+
+ std::vector<EngineStateController::MidiPortState> midi_port_states;
+ EngineStateController::instance()->get_physical_midi_input_states (midi_port_states);
+
+ std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin();
+
+ for (; state_iter != midi_port_states.end(); ++state_iter) {
+ if (state_iter->active && state_iter->available && state_iter->connected) {
+ scene_in()->connect (state_iter->name);
+ }
+ }
+
+ } else {
+ scene_out()->disconnect_all ();
+
+ std::vector<EngineStateController::MidiPortState> midi_port_states;
+ EngineStateController::instance()->get_physical_midi_output_states (midi_port_states);
+
+ std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin();
+
+ for (; state_iter != midi_port_states.end(); ++state_iter) {
+ if (state_iter->active && state_iter->available && state_iter->connected) {
+ scene_out()->connect (state_iter->name);
+ }
+ }
+
+ }
+}
+
/** Caller must not hold process lock
* @param name_template string to use for the start of the name, or "" to use "Audio".