diff options
Diffstat (limited to 'libs/midi++2/midi++/manager.h')
-rw-r--r-- | libs/midi++2/midi++/manager.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/libs/midi++2/midi++/manager.h b/libs/midi++2/midi++/manager.h new file mode 100644 index 0000000000..4889aad8c9 --- /dev/null +++ b/libs/midi++2/midi++/manager.h @@ -0,0 +1,88 @@ +/* + Copyright (C) 1998 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 + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ +*/ + +#ifndef __midi_manager_h__ +#define __midi_manager_h__ + +#include <map> +#include <string> + +#include <midi++/types.h> +#include <midi++/port.h> + +namespace MIDI { + +class Manager { + public: + ~Manager (); + + Port *add_port (PortRequest &); + int remove_port (std::string port); + + Port *port (std::string name); + Port *port (size_t number); + + size_t nports () { return ports_by_device.size(); } + + /* defaults for clients who are not picky */ + + Port *inputPort; + Port *outputPort; + channel_t inputChannelNumber; + channel_t outputChannelNumber; + + int set_input_port (size_t port); + int set_input_port (std::string); + int set_output_port (size_t port); + int set_output_port (std::string); + int set_input_channel (channel_t); + int set_output_channel (channel_t); + + int foreach_port (int (*func)(const Port &, size_t n, void *), + void *arg); + + typedef std::map<std::string, Port *> PortMap; + + const PortMap& get_midi_ports() const { return ports_by_tag; } + + static Manager *instance () { + if (theManager == 0) { + theManager = new Manager; + } + return theManager; + } + + static int parse_port_request (std::string str, Port::Type type); + + private: + /* This is a SINGLETON pattern */ + + Manager (); + + static Manager *theManager; + PortMap ports_by_device; /* canonical */ + PortMap ports_by_tag; /* may contain duplicate Ports */ + + void close_ports (); +}; + +}; /* namespace MIDI */ + +#endif // __midi_manager_h__ |