diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index b5349b7899..d8fdef35b2 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -73,6 +73,7 @@ #include "widgets/tooltips.h" #include "ardour_window.h" +#include "automation_controller.h" #include "context_menu_helper.h" #include "enums_convert.h" #include "mixer_strip.h" @@ -114,16 +115,14 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer) , rec_mon_table (2, 2) , solo_iso_table (1, 2) , mute_solo_table (1, 2) - , master_volume_table (1, 2) + , master_volume_table (2, 2) , bottom_button_table (1, 3) , monitor_section_button (0) , midi_input_enable_button (0) , _plugin_insert_cnt (0) , _comment_button (_("Comments")) , trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero)) - , _master_volume_menu (0) , _loudess_analysis_button (0) - , _volume_control_knob (0) , _visibility (X_("mixer-element-visibility")) , _suspend_menu_callbacks (false) , control_slave_ui (sess) @@ -158,9 +157,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, boost::shared_ptr rt , _plugin_insert_cnt (0) , _comment_button (_("Comments")) , trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero)) - , _master_volume_menu (0) , _loudess_analysis_button (0) - , _volume_control_knob (0) , _visibility (X_("mixer-element-visibility")) , _suspend_menu_callbacks (false) , control_slave_ui (sess) @@ -244,6 +241,10 @@ MixerStrip::init () } rec_mon_table.show (); + master_volume_table.set_homogeneous (true); + master_volume_table.set_row_spacings (2); + master_volume_table.set_col_spacings (2); + if (solo_isolated_led) { button_size_group->add_widget (*solo_isolated_led); } @@ -294,9 +295,6 @@ MixerStrip::init () trim_control.StopGesture.connect(sigc::mem_fun(*this, &MixerStrip::trim_end_touch)); input_button_box.pack_start (trim_control, false, false); - master_volume_table.set_homogeneous (true); - master_volume_table.set_spacings (2); - global_vpacker.set_no_show_all (); global_vpacker.set_border_width (1); global_vpacker.set_spacing (0); @@ -446,7 +444,6 @@ MixerStrip::~MixerStrip () if (this ==_entered_mixer_strip) { _entered_mixer_strip = NULL; } - delete _master_volume_menu; } void @@ -601,29 +598,27 @@ MixerStrip::set_route (boost::shared_ptr rt) master_volume_table.show (); } - if (_volume_control_knob == 0) { + if (_volume_controller == 0) { assert (_loudess_analysis_button == 0); assert (route()->volume_control()); + boost::shared_ptr ac = route()->volume_control (); + + _volume_controller = AutomationController::create (ac->parameter (), ParameterDescriptor (ac->parameter ()), ac, false); + _volume_controller->set_name (X_("ProcessorControlSlider")); + _volume_controller->set_size_request (PX_SCALE(19), -1); + _volume_controller->disable_vertical_scroll (); - _volume_control_knob = manage (new ArdourKnob (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero))); _loudess_analysis_button = manage (new ArdourButton (S_("Loudness|LAN"))); + _loudess_analysis_button->signal_clicked.connect (mem_fun (*this, &MixerStrip::loudess_analysis_button_clicked)); + + set_tooltip (*_volume_controller, _("Master output volume")); set_tooltip (_loudess_analysis_button, _("Measure loudness of the session, normalize master output volume")); - _volume_control_knob->set_size_request (PX_SCALE(19), PX_SCALE(19)); - _volume_control_knob->set_controllable (route()->volume_control()); - - _volume_control_knob->set_tooltip_prefix (_("Output Volume: ")); - _volume_control_knob->set_name ("trim knob"); - _volume_control_knob->set_sensitive (false); - - _loudess_analysis_button->signal_clicked.connect (mem_fun (*this, &MixerStrip::loudess_analysis_button_clicked)); - _loudess_analysis_button->signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::loudess_analysis_button_pressed), false); - master_volume_table.attach (*_loudess_analysis_button, 0, 1, 0, 1); - master_volume_table.attach (*_volume_control_knob, 1, 2, 0, 1); + master_volume_table.attach (*_volume_controller, 0, 2, 1, 2); _loudess_analysis_button->show (); - _volume_control_knob->show (); + _volume_controller->show (); } if (monitor_section_button == 0) { @@ -1997,31 +1992,6 @@ MixerStrip::loudess_analysis_button_clicked () PublicEditor::instance().measure_master_loudness (false); } -bool -MixerStrip::loudess_analysis_button_pressed (GdkEventButton* ev) -{ - using namespace Menu_Helpers; - assert (_volume_control_knob); - - if (Keyboard::is_context_menu_event (ev)) { - bool is_sensitive = _volume_control_knob->sensitive (); - delete _master_volume_menu; - _master_volume_menu = new Menu; - _master_volume_menu->set_name ("ArdourContextMenu"); - - MenuList& items = _master_volume_menu->items(); - items.clear (); - items.push_back (CheckMenuElem (_("Allow Manual Gain Control"))); - Gtk::CheckMenuItem* cmi = static_cast (&items.back()); - cmi->set_active (is_sensitive); - cmi->signal_toggled().connect (sigc::bind (sigc::mem_fun (*_volume_control_knob, &ArdourKnob::set_sensitive), !is_sensitive)); - - _master_volume_menu->popup (ev->button, ev->time); - return true; - } - return false; -} - void MixerStrip::hide_clicked () { diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index 8f58fa0f99..8c54717a35 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -79,6 +79,7 @@ class Mixer_UI; class MotionController; class RouteGroupMenu; class ArdourWindow; +class AutomationController; class MixerStrip : public AxisView, public RouteUI, public Gtk::EventBox { @@ -228,9 +229,8 @@ private: ArdourWidgets::ArdourButton _comment_button; ArdourWidgets::ArdourKnob trim_control; - Gtk::Menu* _master_volume_menu; ArdourWidgets::ArdourButton* _loudess_analysis_button; - ArdourWidgets::ArdourKnob* _volume_control_knob; + boost::shared_ptr _volume_controller; void trim_start_touch (); void trim_end_touch (); @@ -238,7 +238,6 @@ private: void setup_comment_button (); void loudess_analysis_button_clicked (); - bool loudess_analysis_button_pressed (GdkEventButton*); ArdourWidgets::ArdourButton group_button; RouteGroupMenu* group_menu;