X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fcontrol_protocol_manager.h;h=292de9ec657a35585b8f6f13eb49276907e4c847;hb=5fa05b403ca21a6573d07b921dc14f0769dc9fc7;hp=7d3d4872e689832578f4a70878c2008d38ee5fd7;hpb=84f55440a3c6317dd2ab5d7e3d638016609e4d03;p=ardour.git diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h index 7d3d4872e6..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 { @@ -35,24 +38,25 @@ class ControlProtocol; class ControlProtocolDescriptor; class Session; -class 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), +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), mandatory(false), supports_feedback(false), state (0) {} - ~ControlProtocolInfo() { delete state; } + ~ControlProtocolInfo(); + }; -class ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandlePtr +class LIBARDOUR_API ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandlePtr { public: ~ControlProtocolManager (); @@ -64,10 +68,12 @@ class ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandl 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 ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandl 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 ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandl 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