diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-10-19 17:17:30 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-10-19 17:49:35 -0400 |
commit | f96b6982344dd390b3ee4882e96d1a7b83374b0f (patch) | |
tree | cb9c7413b2dbb4917b5cd82cc96b5661fc70c756 /libs/ardour/session_midi.cc | |
parent | 0a8ab08e5f02b47e82343554b20e317e1b21731d (diff) |
infrastructure for MIDI-input-follows-selection
Diffstat (limited to 'libs/ardour/session_midi.cc')
-rw-r--r-- | libs/ardour/session_midi.cc | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index 5ed2b05e9a..671e919c6d 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -737,6 +737,7 @@ Session::midi_track_presentation_info_changed (PropertyChange const& what_change boost::shared_ptr<MidiTrack> new_midi_target (mt.lock ()); if (new_midi_target->presentation_info().selected()) { + cerr << "Rewiring " << new_midi_target->name() << endl; rewire_selected_midi (new_midi_target); } } @@ -755,22 +756,54 @@ Session::rewire_selected_midi (boost::shared_ptr<MidiTrack> new_midi_target) } PortManager::MidiSelectionPorts msp; + AudioEngine::instance()->get_midi_selection_ports (msp); + + if (!msp.empty()) { + if (old_midi_target) { + for (PortManager::MidiSelectionPorts::const_iterator p = msp.begin(); p != msp.end(); ++p) { + old_midi_target->input()->disconnect (old_midi_target->input()->nth (0), (*p), this); + } + } + + for (PortManager::MidiSelectionPorts::const_iterator p = msp.begin(); p != msp.end(); ++p) { + new_midi_target->input()->connect (new_midi_target->input()->nth(0), (*p), this); + } + } + current_midi_target = new_midi_target; +} + +void +Session::rewire_midi_selection_ports () +{ + cerr << "RMSP\n"; + + if (!Config->get_midi_input_follows_selection()) { + cerr << "nope\n"; + return; + } + + boost::shared_ptr<MidiTrack> target = current_midi_target.lock(); + + if (!target) { + cerr << "no target\n"; + return; + } + + PortManager::MidiSelectionPorts msp; AudioEngine::instance()->get_midi_selection_ports (msp); if (msp.empty()) { + cerr << "no MSP\n"; return; } - if (old_midi_target) { - for (PortManager::MidiSelectionPorts::const_iterator p = msp.begin(); p != msp.end(); ++p) { - old_midi_target->input()->disconnect (old_midi_target->input()->nth (0), (*p), this); - } - } + cerr << "2. Rewiring " << target->name() << endl; + + target->input()->disconnect (this); for (PortManager::MidiSelectionPorts::const_iterator p = msp.begin(); p != msp.end(); ++p) { - new_midi_target->input()->connect (new_midi_target->input()->nth(0), (*p), this); + cerr << "\tconnect to " << *p << endl; + target->input()->connect (target->input()->nth (0), (*p), this); } - - current_midi_target = new_midi_target; } |