summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/control_protocol_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/ardour/control_protocol_manager.h')
-rw-r--r--libs/ardour/ardour/control_protocol_manager.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h
index f0b7846978..b06c3024b6 100644
--- a/libs/ardour/ardour/control_protocol_manager.h
+++ b/libs/ardour/ardour/control_protocol_manager.h
@@ -4,12 +4,15 @@
#include <string>
#include <list>
+#include <sigc++/sigc++.h>
+
#include <pbd/lockmonitor.h>
namespace ARDOUR {
class ControlProtocol;
class ControlProtocolDescriptor;
+class Session;
struct ControlProtocolInfo {
ControlProtocolDescriptor* descriptor;
@@ -18,7 +21,7 @@ struct ControlProtocolInfo {
std::string path;
};
-class ControlProtocolManager
+ class ControlProtocolManager : public sigc::trackable
{
public:
ControlProtocolManager ();
@@ -26,19 +29,24 @@ class ControlProtocolManager
static ControlProtocolManager& instance() { return *_instance; }
+ void set_session (Session&);
void discover_control_protocols (std::string search_path);
- void startup (Session&);
+ void foreach_known_protocol (sigc::slot<void,const ControlProtocolInfo*>);
+
+ ControlProtocol* instantiate (ControlProtocolInfo&);
+ int teardown (ControlProtocolInfo&);
- ControlProtocol* instantiate (Session&, std::string protocol_name);
- int teardown (std::string protocol_name);
+ std::list<ControlProtocolInfo*> control_protocol_info;
private:
static ControlProtocolManager* _instance;
+ Session* _session;
PBD::Lock protocols_lock;
- std::list<ControlProtocolInfo*> control_protocol_info;
std::list<ControlProtocol*> control_protocols;
+ void drop_session ();
+
int control_protocol_discover (std::string path);
ControlProtocolDescriptor* get_descriptor (std::string path);
};