diff --git a/libs/ardour/ardour/proxy_controllable.h b/libs/ardour/ardour/proxy_controllable.h new file mode 100644 index 0000000000..dd2a686237 --- /dev/null +++ b/libs/ardour/ardour/proxy_controllable.h @@ -0,0 +1,34 @@ +#ifndef __libardour_proxy_controllable_h__ +#define __libardour_proxy_controllable_h__ + +#include + +#include "pbd/controllable.h" + +namespace ARDOUR { + +/** this class converts a pair of setter/getter functors into a Controllable + so that it can be used like a regular Controllable, bound to MIDI, OSC etc. +*/ + +class ProxyControllable : public PBD::Controllable { + public: + ProxyControllable (const std::string& name, PBD::Controllable::Flag flags, + boost::function1 setter, + boost::function0 getter) + : PBD::Controllable (name, flags) + , _setter (setter) + , _getter (getter) + {} + + void set_value (double v) { _setter (v); } + double get_value () const { return _getter (); } + + private: + boost::function1 _setter; + boost::function0 _getter; +}; + +} // namespace + +#endif /* __libardour_proxy_controllable_h__ */