diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-11-03 21:35:20 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-11-03 21:35:20 +0000 |
commit | 708fb03e87676d4fb125e0d78bd297e705a8e735 (patch) | |
tree | b105af80b058dc77f9577385a9a07f00888e1bef /gtk2_ardour/ardour_button.cc | |
parent | 712d7fd5e4e58af842f33408904b3936647ef0c3 (diff) |
use ArdourButton for the (radio) buttons in the monitor section; fix ArdourButton, MonitorSection and CairoWidget to work with radio semantics
git-svn-id: svn://localhost/ardour2/branches/3.0@10430 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_button.cc')
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 580f893099..ff1ab12cce 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -65,7 +65,25 @@ ArdourButton::ArdourButton (Element e) , _led_rect (0) { ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler)); - StateChanged.connect (sigc::mem_fun (*this, &ArdourButton::state_handler)); +} + +ArdourButton::ArdourButton (const std::string& str, Element e) + : _elements (e) + , _act_on_release (true) + , _text_width (0) + , _text_height (0) + , _diameter (11.0) + , _corner_radius (9.0) + , edge_pattern (0) + , fill_pattern (0) + , led_inset_pattern (0) + , reflection_pattern (0) + , _led_left (false) + , _fixed_diameter (true) + , _distinct_led_click (false) + , _led_rect (0) +{ + set_text (str); } ArdourButton::~ArdourButton() @@ -226,12 +244,6 @@ ArdourButton::render (cairo_t* cr) } void -ArdourButton::state_handler () -{ - set_colors (); -} - -void ArdourButton::set_diameter (float d) { _diameter = (d*2) + 5.0; @@ -427,6 +439,7 @@ ArdourButton::on_button_release_event (GdkEventButton *ev) if (_act_on_release) { if (_action) { + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (_action); _action->activate (); return true; } @@ -497,7 +510,7 @@ ArdourButton::set_related_action (RefPtr<Action> act) Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (_action); if (tact) { tact->signal_toggled().connect (sigc::mem_fun (*this, &ArdourButton::action_toggled)); - } + } } void @@ -562,3 +575,23 @@ ArdourButton::set_image (const RefPtr<Gdk::Pixbuf>& img) queue_draw (); } +void +ArdourButton::set_active_state (Gtkmm2ext::ActiveState s) +{ + bool changed = (_active_state != s); + CairoWidget::set_active_state (s); + if (changed) { + set_colors (); + } +} + +void +ArdourButton::set_visual_state (Gtkmm2ext::VisualState s) +{ + bool changed = (_visual_state != s); + CairoWidget::set_visual_state (s); + if (changed) { + set_colors (); + } +} + |