summaryrefslogtreecommitdiff
path: root/libs/midi++2/manager.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-07-08 22:55:20 +0000
committerCarl Hetherington <carl@carlh.net>2010-07-08 22:55:20 +0000
commit648a169d8ff9987ba727e9ba50af4f33da6db165 (patch)
treed8e250205004633a9f5c94e15e8f3826fac183b6 /libs/midi++2/manager.cc
parent3549189f87813b8c9f01f2f6484b34cf923a65ad (diff)
Move MIDI control port ownership into the MIDI Manager, since control port state should be Ardour-wide, not per-session. Fix up port connection state management.
git-svn-id: svn://localhost/ardour2/branches/3.0@7394 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/midi++2/manager.cc')
-rw-r--r--libs/midi++2/manager.cc35
1 files changed, 32 insertions, 3 deletions
diff --git a/libs/midi++2/manager.cc b/libs/midi++2/manager.cc
index c8094d4d4f..cab42d8d81 100644
--- a/libs/midi++2/manager.cc
+++ b/libs/midi++2/manager.cc
@@ -27,6 +27,7 @@
#include "midi++/manager.h"
#include "midi++/channel.h"
#include "midi++/port.h"
+#include "midi++/mmc.h"
using namespace std;
using namespace MIDI;
@@ -34,12 +35,23 @@ using namespace PBD;
Manager *Manager::theManager = 0;
-Manager::Manager ()
+Manager::Manager (jack_client_t* jack)
{
+ _mmc = new MachineControl (this, jack);
+
+ _mtc_input_port = add_port (new MIDI::Port ("MTC in", Port::IsInput, jack));
+ _mtc_output_port = add_port (new MIDI::Port ("MTC out", Port::IsOutput, jack));
+ _midi_input_port = add_port (new MIDI::Port ("MIDI control in", Port::IsInput, jack));
+ _midi_output_port = add_port (new MIDI::Port ("MIDI control out", Port::IsOutput, jack));
+ _midi_clock_input_port = add_port (new MIDI::Port ("MIDI clock in", Port::IsInput, jack));
+ _midi_clock_output_port = add_port (new MIDI::Port ("MIDI clock out", Port::IsOutput, jack));
}
Manager::~Manager ()
{
+ delete _mmc;
+
+ /* This will delete our MTC etc. ports */
for (PortList::iterator p = _ports.begin(); p != _ports.end(); ++p) {
delete *p;
}
@@ -77,10 +89,10 @@ Manager::cycle_end()
/** Re-register ports that disappear on JACK shutdown */
void
-Manager::reestablish (void* a)
+Manager::reestablish (jack_client_t* jack)
{
for (PortList::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
- (*p)->reestablish (a);
+ (*p)->reestablish (jack);
}
}
@@ -107,3 +119,20 @@ Manager::port (string const & n)
return *p;
}
+
+void
+Manager::create (jack_client_t* jack)
+{
+ assert (theManager == 0);
+ theManager = new Manager (jack);
+}
+
+void
+Manager::set_port_states (list<XMLNode*> s)
+{
+ for (list<XMLNode*>::iterator i = s.begin(); i != s.end(); ++i) {
+ for (PortList::const_iterator j = _ports.begin(); j != _ports.end(); ++j) {
+ (*j)->set_state (**i);
+ }
+ }
+}