fix message in startup wizard re: alpha
[ardour.git] / gtk2_ardour / ardour_button.h
index 7f4884d6a71aa27ef239143e6b749ad3fd508b10..fb0f8320a1d3be1720b293aea85eb0b597eefb7e 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef __gtk2_ardour_ardour_button_h__
 #define __gtk2_ardour_ardour_button_h__
 
+#include <list>
 #include <stdint.h>
 
 #include <gtkmm/action.h>
@@ -37,16 +38,27 @@ class ArdourButton : public CairoWidget
                Body = 0x2,
                Text = 0x4,
                Indicator = 0x8,
-               Image = 0x16
        };
-       
+
        static Element default_elements;
        static Element led_default_elements;
        static Element just_led_default_elements;
 
        ArdourButton (Element e = default_elements);
+       ArdourButton (const std::string&, Element e = default_elements);
        virtual ~ArdourButton ();
 
+       enum Tweaks {
+               ShowClick = 0x1,
+               NoModel = 0x4,
+       };
+
+       Tweaks tweaks() const { return _tweaks; }
+       void set_tweaks (Tweaks);
+
+       void set_active_state (Gtkmm2ext::ActiveState);
+       void set_visual_state (Gtkmm2ext::VisualState);
+
        void set_elements (Element);
        Element elements() const { return _elements; }
 
@@ -60,6 +72,7 @@ class ArdourButton : public CairoWidget
        void set_distinct_led_click (bool yn);
 
        sigc::signal<void> signal_led_clicked;
+       sigc::signal<void> signal_clicked;
 
        boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); }
        void set_controllable (boost::shared_ptr<PBD::Controllable> c);
@@ -67,20 +80,28 @@ class ArdourButton : public CairoWidget
 
        void set_related_action (Glib::RefPtr<Gtk::Action>);
 
+       bool on_button_press_event (GdkEventButton*);
+       bool on_button_release_event (GdkEventButton*);
+
+       void set_image (const Glib::RefPtr<Gdk::Pixbuf>&);
+
   protected:
        void render (cairo_t *);
        void on_size_request (Gtk::Requisition* req);
        void on_size_allocate (Gtk::Allocation&);
-       bool on_button_press_event (GdkEventButton*);
-       bool on_button_release_event (GdkEventButton*);
+       void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
+       bool on_enter_notify_event (GdkEventCrossing*);
+       bool on_leave_notify_event (GdkEventCrossing*);
 
         void controllable_changed ();
         PBD::ScopedConnection watch_connection;
 
   private:
        Glib::RefPtr<Pango::Layout> _layout;
+       Glib::RefPtr<Gdk::Pixbuf>   _pixbuf;
        std::string                 _text;
        Element                     _elements;
+       Tweaks                      _tweaks;
        BindingProxy binding_proxy;
        bool    _act_on_release;
 
@@ -107,14 +128,20 @@ class ArdourButton : public CairoWidget
        bool _led_left;
        bool _fixed_diameter;
        bool _distinct_led_click;
+       cairo_rectangle_t* _led_rect;
+       bool _hovering;
 
+       void setup_led_rect ();
        void set_colors ();
        void color_handler ();
-       void state_handler ();
 
        Glib::RefPtr<Gtk::Action> _action;
        void action_activated ();
        void action_toggled ();
+
+       void action_sensitivity_changed ();
+       void action_visibility_changed ();
+       void action_tooltip_changed ();
 };
 
 #endif /* __gtk2_ardour_ardour_button_h__ */