Amend f3c0c1a865 (Add quarter-note position methods).
[ardour.git] / libs / ardour / ardour / proxy_controllable.h
index 0914f9909879cd09f1d5b6ce9413439469240c3e..22761d7dba1ce49d229592b6c491da1ef1828998 100644 (file)
@@ -30,24 +30,32 @@ namespace ARDOUR {
     so that it can be used like a regular Controllable, bound to MIDI, OSC etc.
 */
 
-class ProxyControllable : public PBD::Controllable {
-public:
+class LIBARDOUR_API ProxyControllable : public PBD::Controllable {
+  public:
        ProxyControllable (const std::string& name, PBD::Controllable::Flag flags,
-                          boost::function1<void,double> setter,
+                          boost::function1<bool,double> setter,
                           boost::function0<double> getter)
                : PBD::Controllable (name, flags)
                , _setter (setter)
                , _getter (getter)
        {}
-       
-       void set_value (double v) { _setter (v); }
+
+       void set_value (double v, PBD::Controllable::GroupControlDisposition gcd) { if (_setter (v)) { Changed (true, gcd); /* EMIT SIGNAL */ } }
        double get_value () const { return _getter (); }
-       
-private:
-       boost::function1<void,double> _setter;
+
+       double internal_to_user (double i) const { return accurate_coefficient_to_dB (i);}
+       double user_to_internal (double u) const { return dB_to_coefficient(u) ;}
+
+       std::string get_user_string () const {
+               char theBuf[32]; sprintf( theBuf, "%3.1f dB", accurate_coefficient_to_dB (get_value()));
+               return std::string(theBuf);
+       }
+
+  private:
+       boost::function1<bool,double> _setter;
        boost::function0<double> _getter;
 };
-       
+
 } // namespace
 
 #endif /* __libardour_proxy_controllable_h__ */