From 708fb03e87676d4fb125e0d78bd297e705a8e735 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 3 Nov 2011 21:35:20 +0000 Subject: 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 --- gtk2_ardour/ardour_button.cc | 49 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'gtk2_ardour/ardour_button.cc') 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() @@ -225,12 +243,6 @@ ArdourButton::render (cairo_t* cr) } } -void -ArdourButton::state_handler () -{ - set_colors (); -} - void ArdourButton::set_diameter (float d) { @@ -427,6 +439,7 @@ ArdourButton::on_button_release_event (GdkEventButton *ev) if (_act_on_release) { if (_action) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (_action); _action->activate (); return true; } @@ -497,7 +510,7 @@ ArdourButton::set_related_action (RefPtr act) Glib::RefPtr tact = Glib::RefPtr::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& 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 (); + } +} + -- cgit v1.2.3