canvas HSV color serialization needs LocaleGuard
[ardour.git] / gtk2_ardour / ardour_knob.h
index 49091db0bbd852b96ddb3281643fc2d1daab90e5..ede200f4b1a9ec6e83f880f18058519f29f20a1e 100644 (file)
@@ -25,6 +25,8 @@
 #include <gtkmm/action.h>
 
 #include "pbd/signals.h"
+#include "ardour/automatable.h"
+
 #include "gtkmm2ext/binding_proxy.h"
 #include "gtkmm2ext/activatable.h"
 #include "gtkmm2ext/cairo_widget.h"
@@ -57,7 +59,13 @@ public:
                unused5 = 0x20,
        };
 
-       ArdourKnob (Element e = default_elements, bool arc_to_zero = false);
+       enum Flags {
+               NoFlags = 0,
+               Detent = 0x1,
+               ArcToZero = 0x2,
+       };
+
+       ArdourKnob (Element e = default_elements, Flags flags = NoFlags);
        virtual ~ArdourKnob ();
 
        void set_active_state (Gtkmm2ext::ActiveState);
@@ -68,7 +76,7 @@ public:
        void add_elements (Element);
        static Element default_elements;
 
-       void set_tooltip_prefix (std::string pfx) { _tooltip_prefix = pfx; }
+       void set_tooltip_prefix (std::string pfx) { _tooltip_prefix = pfx; controllable_changed (true); }
 
        boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); }
        void set_controllable (boost::shared_ptr<PBD::Controllable> c);
@@ -78,6 +86,8 @@ public:
        bool on_scroll_event (GdkEventScroll* ev);
        bool on_motion_notify_event (GdkEventMotion *ev) ;
 
+       void set_printer (boost::shared_ptr<ARDOUR::Automatable> p) { _printer = p; controllable_changed (true); }
+
        void color_handler ();
 
   protected:
@@ -91,22 +101,24 @@ public:
        bool on_focus_in_event (GdkEventFocus*);
        bool on_focus_out_event (GdkEventFocus*);
 
-       void controllable_changed ();
+       void controllable_changed (bool force_update = false);
        PBD::ScopedConnection watch_connection;
 
 
   private:
-       Element                     _elements;
-
-       BindingProxy                binding_proxy;
+       Element _elements;
+       BindingProxy binding_proxy;
+       boost::shared_ptr<ARDOUR::Automatable> _printer;
 
        bool _hovering;
        float _grabbed_x;
        float _grabbed_y;
 
        float _val; // current value [0..1]
-       float _zero; // default value, arc
-       bool _arc_to_zero; // if false, arc starts left-edge
+       float _normal; // default value, arc
+       float _dead_zone_delta;
+
+       Flags _flags;
 
        void action_sensitivity_changed ();
        void action_visibility_changed ();