move MidiPortManager from AudioEngine to Session
[ardour.git] / gtk2_ardour / port_group.cc
index a25c2e0f84c8f94d06fff8891e259d109c50ce38..2a93cf6bee8122801122d2355f8cfd0ffd63c40e 100644 (file)
@@ -21,7 +21,6 @@
 #include <boost/shared_ptr.hpp>
 #include <boost/algorithm/string.hpp>
 
-#include "midi++/manager.h"
 #include "midi++/mmc.h"
 
 #include "ardour/audioengine.h"
 #include "ardour/bundle.h"
 #include "ardour/control_protocol_manager.h"
 #include "ardour/io_processor.h"
+#include "ardour/midi_port.h"
+#include "ardour/midiport_manager.h"
 #include "ardour/session.h"
 #include "ardour/user_bundle.h"
 #include "ardour/port.h"
+
 #include "control_protocol/control_protocol.h"
 
 #include "gui_thread.h"
@@ -452,37 +454,35 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp
 
        /* Ardour's sync ports */
 
-       MIDI::Manager* midi_manager = MIDI::Manager::instance ();
-       if (midi_manager && (type == DataType::MIDI || type == DataType::NIL)) {
+       if ((type == DataType::MIDI || type == DataType::NIL)) {
                boost::shared_ptr<Bundle> sync (new Bundle (_("Sync"), inputs));
-               MIDI::MachineControl* mmc = midi_manager->mmc ();
-               AudioEngine& ae = session->engine ();
+               AudioEngine* ae = AudioEngine::instance();
 
                if (inputs) {
                        sync->add_channel (
-                               _("MTC in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->mtc_input_port()->name())
+                               _("MTC in"), DataType::MIDI, ae->make_port_name_non_relative (session->mtc_input_port()->name())
                                );
                        sync->add_channel (
-                               _("MIDI control in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_input_port()->name())
+                               _("MIDI control in"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_input_port()->name())
                                );
                        sync->add_channel (
-                               _("MIDI clock in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_clock_input_port()->name())
+                               _("MIDI clock in"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_clock_input_port()->name())
                                );
                        sync->add_channel (
-                               _("MMC in"), DataType::MIDI, ae.make_port_name_non_relative (mmc->input_port()->name())
+                               _("MMC in"), DataType::MIDI, ae->make_port_name_non_relative (session->mmc_input_port()->name())
                                );
                } else {
                        sync->add_channel (
-                               _("MTC out"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->mtc_output_port()->name())
+                               _("MTC out"), DataType::MIDI, ae->make_port_name_non_relative (session->mtc_output_port()->name())
                                );
                        sync->add_channel (
-                               _("MIDI control out"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_output_port()->name())
+                               _("MIDI control out"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_output_port()->name())
                                );
                        sync->add_channel (
-                               _("MIDI clock out"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_clock_output_port()->name())
+                               _("MIDI clock out"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_clock_output_port()->name())
                                );
                        sync->add_channel (
-                               _("MMC out"), DataType::MIDI, ae.make_port_name_non_relative (mmc->output_port()->name())
+                               _("MMC out"), DataType::MIDI, ae->make_port_name_non_relative (session->mmc_output_port()->name())
                                );
                }
 
@@ -564,8 +564,22 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp
        }
 
        for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
-               if (!extra_other[*i].empty()) {
-                       boost::shared_ptr<Bundle> b = make_bundle_from_ports (extra_other[*i], *i, inputs);
+               if (extra_other[*i].empty()) continue;
+               std::string cp;
+               std::vector<std::string> nb;
+               for (uint32_t j = 0; j < extra_other[*i].size(); ++j) {
+                       std::string nn = extra_other[*i][j];
+                       std::string pf = nn.substr (0, nn.find_first_of (":") + 1);
+                       if (pf != cp && !nb.empty()) {
+                               boost::shared_ptr<Bundle> b = make_bundle_from_ports (nb, *i, inputs);
+                               other->add_bundle (b);
+                               nb.clear();
+                       }
+                       cp = pf;
+                       nb.push_back(extra_other[*i][j]);
+               }
+               if (!nb.empty()) {
+                       boost::shared_ptr<Bundle> b = make_bundle_from_ports (nb, *i, inputs);
                        other->add_bundle (b);
                }
        }