diff options
author | Carl Hetherington <carl@carlh.net> | 2012-01-21 22:54:36 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-01-21 22:54:36 +0000 |
commit | c95b34642f100b966ccab5bc810d24b016dc1c6a (patch) | |
tree | 9c406e6889b51698eb3ce9227807519457f98204 /gtk2_ardour/processor_box.cc | |
parent | 4bb517279c38102f57a22a9294b4d89b11f412d5 (diff) |
Use a button in the processor box for toggle parameters.
git-svn-id: svn://localhost/ardour2/branches/3.0@11297 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/processor_box.cc')
-rw-r--r-- | gtk2_ardour/processor_box.cc | 90 |
1 files changed, 63 insertions, 27 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 02a0bfefc8..784076e6be 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -412,30 +412,44 @@ ProcessorEntry::Control::Control (Glib::RefPtr<Gdk::Pixbuf> s, boost::shared_ptr : _control (c) , _adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0, 1, 0.01, 0.1) , _slider (s, &_adjustment, 0, false) - , _ignore_slider_adjustment (false) + , _button (ArdourButton::Element (ArdourButton::Text | ArdourButton::Indicator)) + , _ignore_ui_adjustment (false) , _visible (false) , _name (n) { _slider.set_controllable (c); - box.pack_start (_label); - _label.show (); - _label.set_text (_name); - - box.pack_start (_slider); - _slider.show (); - - double const lo = c->internal_to_interface (c->lower ()); - double const up = c->internal_to_interface (c->upper ()); + if (c->toggled()) { + _button.set_text (_name); + _button.set_led_left (true); + _button.set_name ("processor control button"); + box.pack_start (_button); + _button.show (); - _adjustment.set_lower (lo); - _adjustment.set_upper (up); - _adjustment.set_step_increment ((up - lo) / 100); - _adjustment.set_page_increment ((up - lo) / 10); - _slider.set_default_value (c->internal_to_interface (c->normal ())); + _button.signal_clicked.connect (sigc::mem_fun (*this, &Control::button_clicked)); + _button.signal_led_clicked.connect (sigc::mem_fun (*this, &Control::button_clicked)); + c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ()); - _adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &Control::slider_adjusted)); - c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ()); + } else { + + box.pack_start (_label); + _label.show (); + _label.set_text (_name); + box.pack_start (_slider); + _slider.show (); + + double const lo = c->internal_to_interface (c->lower ()); + double const up = c->internal_to_interface (c->upper ()); + + _adjustment.set_lower (lo); + _adjustment.set_upper (up); + _adjustment.set_step_increment ((up - lo) / 100); + _adjustment.set_page_increment ((up - lo) / 10); + _slider.set_default_value (c->internal_to_interface (c->normal ())); + + _adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &Control::slider_adjusted)); + c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ()); + } control_changed (); } @@ -449,7 +463,7 @@ ProcessorEntry::Control::set_pixel_width (int p) void ProcessorEntry::Control::slider_adjusted () { - if (_ignore_slider_adjustment) { + if (_ignore_ui_adjustment) { return; } @@ -463,6 +477,21 @@ ProcessorEntry::Control::slider_adjusted () } void +ProcessorEntry::Control::button_clicked () +{ + boost::shared_ptr<AutomationControl> c = _control.lock (); + + if (!c) { + return; + } + + bool const n = _button.active_state() == Gtkmm2ext::Active ? false : true; + + c->set_value (n ? 1 : 0); + _button.set_active_state (n ? Gtkmm2ext::Active : Gtkmm2ext::ActiveState (0)); +} + +void ProcessorEntry::Control::control_changed () { boost::shared_ptr<AutomationControl> c = _control.lock (); @@ -470,18 +499,25 @@ ProcessorEntry::Control::control_changed () return; } - _ignore_slider_adjustment = true; + _ignore_ui_adjustment = true; - _adjustment.set_value (c->internal_to_interface (c->get_value ())); + if (c->toggled ()) { - stringstream s; - s.precision (1); - s.setf (ios::fixed, ios::floatfield); - s << c->internal_to_user (c->get_value ()); - - _slider.set_tooltip_text (s.str ()); + _button.set_active_state (c->get_value() > 0.5 ? Gtkmm2ext::Active : Gtkmm2ext::ActiveState (0)); + + } else { + + _adjustment.set_value (c->internal_to_interface (c->get_value ())); + + stringstream s; + s.precision (1); + s.setf (ios::fixed, ios::floatfield); + s << c->internal_to_user (c->get_value ()); + + _slider.set_tooltip_text (s.str ()); + } - _ignore_slider_adjustment = false; + _ignore_ui_adjustment = false; } void |