new class to wrap a pair of set/get methods as a Controllable
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 11 Feb 2011 16:14:24 +0000 (16:14 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 11 Feb 2011 16:14:24 +0000 (16:14 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8824 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/proxy_controllable.h [new file with mode: 0644]

diff --git a/libs/ardour/ardour/proxy_controllable.h b/libs/ardour/ardour/proxy_controllable.h
new file mode 100644 (file)
index 0000000..dd2a686
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __libardour_proxy_controllable_h__
+#define __libardour_proxy_controllable_h__
+
+#include <boost/function.hpp>
+
+#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<void,double> setter,
+                                 boost::function0<double> 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<void,double> _setter;
+    boost::function0<double> _getter;
+};
+
+} // namespace
+
+#endif /* __libardour_proxy_controllable_h__ */