X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmidiport_manager.cc;h=7f5dee4c6402818d8ca3b0b80754df72f56fc974;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=6de043658690187d0af697e02e29c9fdb8f8951b;hpb=316973d7c7bc99bfef6367d42009883d0de2abbd;p=ardour.git diff --git a/libs/ardour/midiport_manager.cc b/libs/ardour/midiport_manager.cc index 6de0436586..7f5dee4c64 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 @@ -22,7 +22,7 @@ #include "ardour/midiport_manager.h" #include "ardour/rc_configuration.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace std; @@ -40,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); @@ -67,26 +73,15 @@ MidiPortManager::create_ports () if (_midi_in) { return; } - + _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_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); - - /* 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(); - _mmc_input_port = boost::dynamic_pointer_cast(_mmc_in).get(); - _mmc_output_port = boost::dynamic_pointer_cast(_mmc_out).get(); + _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) */ @@ -116,7 +111,7 @@ MidiPortManager::create_ports () void MidiPortManager::set_midi_port_states (const XMLNodeList&nodes) { - XMLProperty* prop; + XMLProperty const * prop; typedef map > PortMap; PortMap ports; const int version = 0; @@ -125,11 +120,13 @@ MidiPortManager::set_midi_port_states (const XMLNodeList&nodes) 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 (XMLNodeList::const_iterator n = nodes.begin(); n != nodes.end(); ++n) { if ((prop = (*n)->property (X_("name"))) == 0) { continue; @@ -139,7 +136,7 @@ MidiPortManager::set_midi_port_states (const XMLNodeList&nodes) if (p == ports.end()) { continue; } - + p->second->set_state (**n, version); } } @@ -155,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());