X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fcontrol_protocol_manager.h;h=292de9ec657a35585b8f6f13eb49276907e4c847;hb=5fa05b403ca21a6573d07b921dc14f0769dc9fc7;hp=0c8c9014f0668122062ddd8f154dbf5c0b91fcab;hpb=8c9749e42faf7808034ed8b7afce4a2fe6dc6f33;p=ardour.git diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h index 0c8c9014f0..292de9ec65 100644 --- a/libs/ardour/ardour/control_protocol_manager.h +++ b/libs/ardour/ardour/control_protocol_manager.h @@ -27,6 +27,9 @@ #include #include "pbd/stateful.h" + +#include "control_protocol/types.h" + #include "ardour/session_handle.h" namespace ARDOUR { @@ -36,20 +39,21 @@ class ControlProtocolDescriptor; class Session; class LIBARDOUR_API ControlProtocolInfo { -public: - ControlProtocolDescriptor* descriptor; - ControlProtocol* protocol; - std::string name; - std::string path; - bool requested; - bool mandatory; - bool supports_feedback; - XMLNode* state; - - ControlProtocolInfo() : descriptor (0), protocol (0), requested(false), + public: + ControlProtocolDescriptor* descriptor; + ControlProtocol* protocol; + std::string name; + std::string path; + bool requested; + bool mandatory; + bool supports_feedback; + XMLNode* state; + + ControlProtocolInfo() : descriptor (0), protocol (0), requested(false), mandatory(false), supports_feedback(false), state (0) {} - ~ControlProtocolInfo() { delete state; } + ~ControlProtocolInfo(); + }; class LIBARDOUR_API ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandlePtr @@ -64,10 +68,12 @@ class LIBARDOUR_API ControlProtocolManager : public PBD::Stateful, public ARDOUR void foreach_known_protocol (boost::function); void load_mandatory_protocols (); void midi_connectivity_established (); + void drop_protocols (); + void register_request_buffer_factories (); - int activate (ControlProtocolInfo&); + int activate (ControlProtocolInfo&); int deactivate (ControlProtocolInfo&); - + std::list control_protocol_info; static const std::string state_node_name; @@ -77,11 +83,14 @@ class LIBARDOUR_API ControlProtocolManager : public PBD::Stateful, public ARDOUR PBD::Signal1 ProtocolStatusChange; + void stripable_selection_changed (ARDOUR::StripableNotificationListPtr); + static PBD::Signal1 StripableSelectionChanged; + private: ControlProtocolManager (); static ControlProtocolManager* _instance; - Glib::Threads::Mutex protocols_lock; + Glib::Threads::RWLock protocols_lock; std::list control_protocols; void session_going_away (); @@ -90,7 +99,7 @@ class LIBARDOUR_API ControlProtocolManager : public PBD::Stateful, public ARDOUR ControlProtocolDescriptor* get_descriptor (std::string path); ControlProtocolInfo* cpi_by_name (std::string); ControlProtocol* instantiate (ControlProtocolInfo&); - int teardown (ControlProtocolInfo&); + int teardown (ControlProtocolInfo&, bool lock_required); }; } // namespace