#ifndef PORTMANAGER_H #define PORTMANAGER_H #include #include #include "port.h" struct Alias { std::string m_match; std::string m_replace; Alias(std::string match, std::string replace); bool Match(std::string name); std::string Replace(std::string name); }; struct Connection { std::string m_match1; std::string m_match2; int m_disconnect:1; int m_continue:1; int m_condition:1; bool Match(std::string port1, std::string port2); }; typedef std::vector AliasList; typedef std::vector ConnectionList; class PortManager { public: ClientList m_clients; PortList m_ports; AliasList m_aliases; public: void Refresh(); void RefreshConnections(); void Add(jack_port_t *port); void Delete(jack_port_t *port); void Connect(jack_port_t *port_a, jack_port_t *port_b); void Disconnect(jack_port_t *port_a, jack_port_t *port_b); void Rename(jack_port_t *port); bool PollPortRenames(); Client *FindOrMakeClient(std::string name, bool is_input, bool is_midi); PortGroup *FindOrMakeGroup(Client *client, std::string name); Port *FindPort(jack_port_t *port); void Sort(); void ToggleConnect(Port *a, Port *b); void ToggleConnect(Port *a, PortGroup *b); void ToggleConnect(PortGroup *a, Port *b); void ToggleConnect(PortGroup *a, PortGroup *b); void ToggleConnect(Base *a, Base *b) { switch (a->get_type()) { case 1: switch (b->get_type()) { case 1: ToggleConnect((PortGroup *)a, (PortGroup *)b); break; case 2: ToggleConnect((PortGroup *)a, (Port *)b); break; } break; case 2: switch (b->get_type()) { case 1: ToggleConnect((Port *)a, (PortGroup *)b); break; case 2: ToggleConnect((Port *)a, (Port *)b); break; } break; } } std::string GetAlias(std::string port_name); void AliasBay(jack_port_t *port, int num_aliases, char *aliases[2]); void AliasClear(); void AliasAdd(std::string source, std::string target); AliasList &AliasGetList() { return m_aliases; } }; extern PortManager pm; #endif // PORTMANAGER_H