X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmidiport_manager.cc;h=7f3f05a7db718cbf06410f09159538fb180e73d4;hb=45019517d7d01d4af974bf0c9ab0a11dec233abb;hp=7abd47580b85ca5d2d002d1f3efe27a4bb5e2a23;hpb=07c63fb2d72d7c5ef609bd972fa6a3138560d74a;p=ardour.git diff --git a/libs/ardour/midiport_manager.cc b/libs/ardour/midiport_manager.cc index 7abd47580b..7f3f05a7db 100644 --- a/libs/ardour/midiport_manager.cc +++ b/libs/ardour/midiport_manager.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 1998-99 Paul Barton-Davis + Copyright (C) 1998-99 Paul Barton-Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -32,6 +32,7 @@ using namespace PBD; MidiPortManager::MidiPortManager () { + create_ports (); } MidiPortManager::~MidiPortManager () @@ -39,8 +40,14 @@ MidiPortManager::~MidiPortManager () if (_midi_in) { AudioEngine::instance()->unregister_port (_midi_in); } - if (_midi_in) { - AudioEngine::instance()->unregister_port (_midi_in); + if (_midi_out) { + AudioEngine::instance()->unregister_port (_midi_out); + } + if (_scene_in) { + AudioEngine::instance()->unregister_port (_scene_in); + } + if (_scene_out) { + AudioEngine::instance()->unregister_port (_scene_out); } if (_mtc_input_port) { AudioEngine::instance()->unregister_port (_mtc_input_port); @@ -66,40 +73,29 @@ MidiPortManager::create_ports () if (_midi_in) { return; } - - _midi_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI control in"), true); - _midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI control out"), true); - - _mmc_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MMC in"), true); - _mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MMC out"), true); - - /* XXX nasty type conversion needed because of the mixed inheritance - * required to integrate MIDI::IPMidiPort and ARDOUR::AsyncMIDIPort. - * - * At some point, we'll move IPMidiPort into Ardour and make it - * inherit from ARDOUR::MidiPort not MIDI::Port, and then this - * mess can go away - */ - _midi_input_port = boost::dynamic_pointer_cast(_midi_in).get(); - _midi_output_port = boost::dynamic_pointer_cast(_midi_out).get(); + _midi_in = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MIDI control in"), true); + _midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MIDI control out"), true); - _mmc_input_port = boost::dynamic_pointer_cast(_mmc_in).get(); - _mmc_output_port = boost::dynamic_pointer_cast(_mmc_out).get(); + _mmc_in = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MMC in"), true); + _mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MMC out"), true); + + _scene_in = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("Scene in"), true); + _scene_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("Scene out"), true); /* Now register ports used for sync (MTC and MIDI Clock) */ boost::shared_ptr p; - p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MTC in")); + p = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MTC in")); _mtc_input_port = boost::dynamic_pointer_cast (p); - p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MTC out")); + p = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MTC out")); _mtc_output_port= boost::dynamic_pointer_cast (p); - p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI Clock in")); + p = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MIDI Clock in")); _midi_clock_input_port = boost::dynamic_pointer_cast (p); - p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI Clock out")); + p = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MIDI Clock out")); _midi_clock_output_port= boost::dynamic_pointer_cast (p); /* These ports all need their incoming data handled in @@ -110,31 +106,28 @@ MidiPortManager::create_ports () _mtc_output_port->set_always_parse (true); _midi_clock_input_port->set_always_parse (true); _midi_clock_output_port->set_always_parse (true); - - set_midi_port_states (); } void -MidiPortManager::set_midi_port_states () +MidiPortManager::set_midi_port_states (const XMLNodeList&nodes) { - list nodes; XMLProperty* prop; typedef map > PortMap; PortMap ports; const int version = 0; - nodes = Config->midi_port_states (); - ports.insert (make_pair (_mtc_input_port->name(), _mtc_input_port)); ports.insert (make_pair (_mtc_output_port->name(), _mtc_output_port)); ports.insert (make_pair (_midi_clock_input_port->name(), _midi_clock_input_port)); ports.insert (make_pair (_midi_clock_output_port->name(), _midi_clock_output_port)); - ports.insert (make_pair (_midi_input_port->name(), _midi_in)); - ports.insert (make_pair (_midi_output_port->name(), _midi_out)); - ports.insert (make_pair (_mmc_input_port->name(), _mmc_in)); - ports.insert (make_pair (_mmc_output_port->name(), _mmc_out)); - - for (list::iterator n = nodes.begin(); n != nodes.end(); ++n) { + ports.insert (make_pair (_midi_in->name(), _midi_in)); + ports.insert (make_pair (_midi_out->name(), _midi_out)); + ports.insert (make_pair (_mmc_in->name(), _mmc_in)); + ports.insert (make_pair (_mmc_out->name(), _mmc_out)); + ports.insert (make_pair (_scene_out->name(), _scene_out)); + ports.insert (make_pair (_scene_in->name(), _scene_in)); + + for (XMLNodeList::const_iterator n = nodes.begin(); n != nodes.end(); ++n) { if ((prop = (*n)->property (X_("name"))) == 0) { continue; } @@ -143,7 +136,7 @@ MidiPortManager::set_midi_port_states () if (p == ports.end()) { continue; } - + p->second->set_state (**n, version); } } @@ -159,10 +152,12 @@ MidiPortManager::get_midi_port_states () const ports.insert (make_pair (_mtc_output_port->name(), _mtc_output_port)); ports.insert (make_pair (_midi_clock_input_port->name(), _midi_clock_input_port)); ports.insert (make_pair (_midi_clock_output_port->name(), _midi_clock_output_port)); - ports.insert (make_pair (_midi_input_port->name(), _midi_in)); - ports.insert (make_pair (_midi_output_port->name(), _midi_out)); - ports.insert (make_pair (_mmc_input_port->name(), _mmc_in)); - ports.insert (make_pair (_mmc_output_port->name(), _mmc_out)); + ports.insert (make_pair (_midi_in->name(), _midi_in)); + ports.insert (make_pair (_midi_out->name(), _midi_out)); + ports.insert (make_pair (_mmc_in->name(), _mmc_in)); + ports.insert (make_pair (_mmc_out->name(), _mmc_out)); + ports.insert (make_pair (_scene_out->name(), _scene_out)); + ports.insert (make_pair (_scene_in->name(), _scene_in)); for (PortMap::const_iterator p = ports.begin(); p != ports.end(); ++p) { s.push_back (&p->second->get_state());