2009-11-25 09:22:48 +00:00
|
|
|
#ifndef PORT_H
|
|
|
|
#define PORT_H
|
|
|
|
|
|
|
|
#include <list>
|
|
|
|
#include <string>
|
|
|
|
#include <gtkmm.h>
|
|
|
|
#include <jack/jack.h>
|
|
|
|
#include "rect.h"
|
|
|
|
|
|
|
|
//
|
|
|
|
// Jack port names look like client_name:port_name
|
|
|
|
// A proposal is to add groups by separating the port_name with a period
|
|
|
|
// resulting in client_name:port_group.port_suffix.
|
|
|
|
// e.g. system:main_out.L
|
|
|
|
// system:main_out.R
|
|
|
|
//
|
|
|
|
|
|
|
|
struct Client;
|
|
|
|
struct PortGroup;
|
|
|
|
struct Port;
|
|
|
|
|
|
|
|
typedef std::list<Client *> ClientList;
|
|
|
|
typedef std::list<PortGroup *> PortGroupList;
|
|
|
|
typedef std::list<Port *> PortList;
|
|
|
|
|
|
|
|
enum ConnectionMode
|
|
|
|
{
|
|
|
|
CM_UNKNOWN,
|
|
|
|
CM_NONE,
|
|
|
|
CM_PARTIAL,
|
|
|
|
CM_FULL
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Client;
|
|
|
|
struct PortGroup;
|
|
|
|
struct Port;
|
|
|
|
|
|
|
|
struct Base {
|
|
|
|
virtual int get_type() const = 0;
|
|
|
|
|
|
|
|
ConnectionMode ConnectedTo(Base *b)
|
|
|
|
{
|
|
|
|
switch (b->get_type()) {
|
|
|
|
case 0: return ConnectedTo((Client *)b);
|
|
|
|
case 1: return ConnectedTo((PortGroup *)b);
|
|
|
|
case 2: return ConnectedTo((Port *)b);
|
|
|
|
default: return CM_UNKNOWN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-12-20 21:46:49 +00:00
|
|
|
std::string m_name;
|
2009-11-30 23:46:37 +00:00
|
|
|
bool m_is_input;
|
|
|
|
bool m_is_midi;
|
|
|
|
Cairo::TextExtents extents;
|
|
|
|
bool m_expanded;
|
|
|
|
Rect rect;
|
|
|
|
|
2009-11-25 09:22:48 +00:00
|
|
|
virtual ConnectionMode ConnectedTo(Client *client) = 0;
|
|
|
|
virtual ConnectionMode ConnectedTo(PortGroup *group) = 0;
|
|
|
|
virtual ConnectionMode ConnectedTo(Port *port) = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Client : Base
|
|
|
|
{
|
|
|
|
PortGroupList m_groups;
|
|
|
|
PortList m_ports;
|
|
|
|
|
|
|
|
virtual ConnectionMode ConnectedTo(Port *port);
|
|
|
|
virtual ConnectionMode ConnectedTo(PortGroup *group);
|
|
|
|
virtual ConnectionMode ConnectedTo(Client *client);
|
|
|
|
|
|
|
|
virtual int get_type() const { return 0; }
|
|
|
|
};
|
|
|
|
|
|
|
|
struct PortGroup : Base
|
|
|
|
{
|
|
|
|
PortList m_ports;
|
|
|
|
|
|
|
|
virtual ConnectionMode ConnectedTo(Port *port);
|
|
|
|
virtual ConnectionMode ConnectedTo(PortGroup *group);
|
|
|
|
virtual ConnectionMode ConnectedTo(Client *client);
|
|
|
|
|
|
|
|
virtual int get_type() const { return 1; }
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Port : Base
|
|
|
|
{
|
2009-11-30 23:46:37 +00:00
|
|
|
jack_port_t *m_port;
|
|
|
|
Client *m_client;
|
|
|
|
PortGroup *m_group;
|
|
|
|
PortList m_connections;
|
2009-11-25 09:22:48 +00:00
|
|
|
|
|
|
|
virtual ConnectionMode ConnectedTo(Port *port);
|
|
|
|
virtual ConnectionMode ConnectedTo(PortGroup *group);
|
|
|
|
virtual ConnectionMode ConnectedTo(Client *client);
|
|
|
|
|
|
|
|
virtual int get_type() const { return 2; }
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // PORT_H
|