summaryrefslogtreecommitdiff
path: root/libs/midi++2/manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/midi++2/manager.cc')
-rw-r--r--libs/midi++2/manager.cc159
1 files changed, 18 insertions, 141 deletions
diff --git a/libs/midi++2/manager.cc b/libs/midi++2/manager.cc
index 5c464fa060..c8094d4d4f 100644
--- a/libs/midi++2/manager.cc
+++ b/libs/midi++2/manager.cc
@@ -32,17 +32,10 @@ using namespace std;
using namespace MIDI;
using namespace PBD;
-/* XXX check for strdup leaks */
-
Manager *Manager::theManager = 0;
Manager::Manager ()
{
- inputPort = 0;
- outputPort = 0;
- inputChannelNumber = 0;
- outputChannelNumber = 0;
- api_data = 0;
}
Manager::~Manager ()
@@ -57,144 +50,13 @@ Manager::~Manager ()
}
Port *
-Manager::add_port (const XMLNode& node)
-{
- Port::Descriptor desc (node);
- Port *port;
- PortList::iterator p;
-
- for (p = _ports.begin(); p != _ports.end(); ++p) {
-
- if (desc.tag == (*p)->name()) {
- break;
- }
-
- }
-
- if (p != _ports.end()) {
- return 0;
- }
-
- port = new Port (node, (jack_client_t *) api_data);
-
- if (port == 0) {
- return 0;
- }
-
- if (!port->ok()) {
- delete port;
- return 0;
- }
-
- _ports.push_back (port);
-
- /* first port added becomes the default input
- port.
- */
-
- if (inputPort == 0) {
- inputPort = port;
- }
-
- if (outputPort == 0) {
- outputPort = port;
- }
-
- PortsChanged (); /* EMIT SIGNAL */
-
- return port;
-}
-
-int
-Manager::remove_port (Port* port)
+Manager::add_port (Port* p)
{
- if (inputPort == port) {
- inputPort = 0;
- }
-
- if (outputPort == port) {
- outputPort = 0;
- }
-
- _ports.remove (port);
- delete port;
+ _ports.push_back (p);
PortsChanged (); /* EMIT SIGNAL */
- return 0;
-}
-
-int
-Manager::set_input_port (string tag)
-{
- for (PortList::iterator p = _ports.begin(); p != _ports.end(); ++p) {
- if ((*p)->name() == tag) {
- inputPort = (*p);
- return 0;
- }
- }
-
- return -1;
-}
-
-int
-Manager::set_output_port (string tag)
-{
- PortList::iterator p;
-
- for (p = _ports.begin(); p != _ports.end(); ++p) {
- if ((*p)->name() == tag) {
- inputPort = (*p);
- break;
- }
- }
-
- if (p == _ports.end()) {
- return -1;
- }
-
- // XXX send a signal to say we're about to change output ports
-
- if (outputPort) {
- for (channel_t chan = 0; chan < 16; chan++) {
- outputPort->channel (chan)->all_notes_off (0);
- }
- }
-
- outputPort = (*p);
-
- // XXX send a signal to say we've changed output ports
-
- return 0;
-}
-
-Port *
-Manager::port (string name)
-{
- for (PortList::iterator p = _ports.begin(); p != _ports.end(); ++p) {
- if (name == (*p)->name()) {
- return (*p);
- }
- }
-
- return 0;
-}
-
-int
-Manager::foreach_port (int (*func)(const Port &, size_t, void *),
- void *arg)
-{
- int n = 0;
-
- for (PortList::const_iterator p = _ports.begin(); p != _ports.end(); ++p, ++n) {
- int retval;
-
- if ((retval = func (**p, n, arg)) != 0) {
- return retval;
- }
- }
-
- return 0;
+ return p;
}
void
@@ -230,3 +92,18 @@ Manager::reconnect ()
(*p)->reconnect ();
}
}
+
+Port*
+Manager::port (string const & n)
+{
+ PortList::const_iterator p = _ports.begin();
+ while (p != _ports.end() && (*p)->name() != n) {
+ ++p;
+ }
+
+ if (p == _ports.end()) {
+ return 0;
+ }
+
+ return *p;
+}