summaryrefslogtreecommitdiff
path: root/libs/ardour/session_midi.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-10-19 17:17:30 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-10-19 17:49:35 -0400
commitf96b6982344dd390b3ee4882e96d1a7b83374b0f (patch)
treecb9c7413b2dbb4917b5cd82cc96b5661fc70c756 /libs/ardour/session_midi.cc
parent0a8ab08e5f02b47e82343554b20e317e1b21731d (diff)
infrastructure for MIDI-input-follows-selection
Diffstat (limited to 'libs/ardour/session_midi.cc')
-rw-r--r--libs/ardour/session_midi.cc49
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;
}