new class to wrap a pair of set/get methods as a Controllable
[ardour.git] / libs / ardour / ardour / proxy_controllable.h
1 #ifndef __libardour_proxy_controllable_h__
2 #define __libardour_proxy_controllable_h__
3
4 #include <boost/function.hpp>
5
6 #include "pbd/controllable.h"
7
8 namespace ARDOUR {
9
10 /** this class converts a pair of setter/getter functors into a Controllable
11     so that it can be used like a regular Controllable, bound to MIDI, OSC etc.
12 */
13
14 class ProxyControllable : public PBD::Controllable {
15   public:
16     ProxyControllable (const std::string& name, PBD::Controllable::Flag flags,
17                                  boost::function1<void,double> setter,
18                                  boost::function0<double> getter)
19             : PBD::Controllable (name, flags)
20             , _setter (setter)
21             , _getter (getter)
22     {}
23     
24     void set_value (double v) { _setter (v); }
25     double get_value () const { return _getter (); }
26
27   private:
28     boost::function1<void,double> _setter;
29     boost::function0<double> _getter;
30 };
31
32 } // namespace
33
34 #endif /* __libardour_proxy_controllable_h__ */