add Session::reconnect_midi_scene_ports()
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 8 May 2015 19:03:06 +0000 (15:03 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 29 Jun 2015 18:18:10 +0000 (14:18 -0400)
libs/ardour/ardour/session.h
libs/ardour/session.cc

index 2a90230c73d5d8250b992f1850a3e2b033959ce9..b48b326a6077681db487d70664b19aa82dc948ec 100644 (file)
@@ -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);
index 94153de1cfacb5954db83669fbb7f9451e538d6a..f6d04b1be9355551e79c384bba13d88bca955f68 100644 (file)
@@ -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".