diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 752fd18a9a..4ce22270c8 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -688,6 +688,7 @@ + diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 5526a5502a..2169c1b0ae 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -613,13 +613,12 @@ MixerStrip::set_route (boost::shared_ptr rt) _loudess_analysis_button = manage (new ArdourButton (S_("Loudness|LAN"))); _loudess_analysis_button->signal_clicked.connect (mem_fun (*this, &MixerStrip::loudess_analysis_button_clicked)); - _loudess_analysis_button->signal_button_press_event().connect (mem_fun (*this, &MixerStrip::loudess_analysis_button_pressed), false); - _volume_controller->signal_button_press_event().connect (mem_fun (*this, &MixerStrip::loudess_analysis_button_pressed), false); + _volume_controller->signal_button_press_event().connect (mem_fun (*this, &MixerStrip::volume_controller_button_pressed), false); set_tooltip (*_volume_controller, _("Master output volume")); set_tooltip (_loudess_analysis_button, _("Measure loudness of the session, normalize master output volume")); - master_volume_table.attach (*_loudess_analysis_button, 0, 1, 0, 1); + master_volume_table.attach (*_loudess_analysis_button, 0, 2, 0, 1); master_volume_table.attach (*_volume_controller, 0, 2, 1, 2); _loudess_analysis_button->show (); @@ -1997,7 +1996,7 @@ MixerStrip::loudess_analysis_button_clicked () } bool -MixerStrip::loudess_analysis_button_pressed (GdkEventButton* ev) +MixerStrip::volume_controller_button_pressed (GdkEventButton* ev) { using namespace Menu_Helpers; if (Keyboard::is_context_menu_event (ev)) { @@ -2006,7 +2005,7 @@ MixerStrip::loudess_analysis_button_pressed (GdkEventButton* ev) _master_volume_menu->set_name ("ArdourContextMenu"); MenuList& items = _master_volume_menu->items(); items.clear (); - items.push_back (CheckMenuElem (_("Custom Loudness Gain Processor Position"))); + items.push_back (CheckMenuElem (_("Custom Volume Ctrl. Pos."))); Gtk::CheckMenuItem* cmi = static_cast (&items.back()); cmi->set_active (!_route->volume_applies_to_output ()); cmi->signal_toggled().connect (sigc::bind (sigc::mem_fun (_route.get(), &Route::set_volume_applies_to_output), !_route->volume_applies_to_output ())); diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index 3edd07904a..1b45ca41ad 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -239,7 +239,7 @@ private: void setup_comment_button (); void loudess_analysis_button_clicked (); - bool loudess_analysis_button_pressed (GdkEventButton*); + bool volume_controller_button_pressed (GdkEventButton*); ArdourWidgets::ArdourButton group_button; RouteGroupMenu* group_menu; diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index a9975a9725..fdd0f587df 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -116,7 +116,7 @@ using namespace Gtkmm2ext; using namespace ArdourWidgets; ProcessorBox* ProcessorBox::_current_processor_box = 0; -bool ProcessorBox::_ignore_disk_io_change = false; +bool ProcessorBox::_ignore_rb_change = false; RefPtr ProcessorBox::paste_action; RefPtr ProcessorBox::cut_action; @@ -2345,7 +2345,7 @@ ProcessorBox::show_processor_menu (int arg) manage_pins_action->set_sensitive (pi != 0); if (boost::dynamic_pointer_cast(_route)) { disk_io_action->set_sensitive (true); - PBD::Unwinder uw (_ignore_disk_io_change, true); + PBD::Unwinder uw (_ignore_rb_change, true); ActionManager::get_toggle_action (X_("ProcessorMenu"), "disk-io-prefader")->set_active (_route->disk_io_point () == DiskIOPreFader); ActionManager::get_toggle_action (X_("ProcessorMenu"), "disk-io-postfader")->set_active (_route->disk_io_point () == DiskIOPostFader); ActionManager::get_toggle_action (X_("ProcessorMenu"), "disk-io-custom")->set_active (_route->disk_io_point () == DiskIOCustom); @@ -2353,6 +2353,15 @@ ProcessorBox::show_processor_menu (int arg) disk_io_action->set_sensitive (false); } + RefPtr volume_pos_action = ActionManager::get_toggle_action (X_("ProcessorMenu"), "custom-volume-pos"); + if (_route->is_master () && Config->get_use_master_volume ()) { + PBD::Unwinder uw (_ignore_rb_change, true); + volume_pos_action->set_sensitive (true); + volume_pos_action->set_active (!_route->volume_applies_to_output ()); + } else { + volume_pos_action->set_sensitive (false); + } + /* allow editing with an Ardour-generated UI for plugin inserts with editors */ edit_action->set_sensitive (pi && pi->plugin()->has_editor ()); @@ -3641,6 +3650,12 @@ ProcessorBox::set_disk_io_position (DiskIOPoint diop) } } +void +ProcessorBox::toggle_custom_loudness_pos () +{ + _route->set_volume_applies_to_output (!_route->volume_applies_to_output ()); +} + void ProcessorBox::clear_processors () { @@ -3932,6 +3947,9 @@ ProcessorBox::register_actions () ActionManager::register_toggle_action (processor_box_actions, X_("disk-io-postfader"), _("Post-Fader"), sigc::bind (sigc::ptr_fun (ProcessorBox::rb_set_disk_io_position), DiskIOPostFader)); ActionManager::register_toggle_action (processor_box_actions, X_("disk-io-custom"), _("Custom"), sigc::bind (sigc::ptr_fun (ProcessorBox::rb_set_disk_io_position), DiskIOCustom)); + /* Loudness Volume Control */ + ActionManager::register_toggle_action (processor_box_actions, X_("custom-volume-pos"), _("Custom Volume Ctrl. Pos."), sigc::ptr_fun (ProcessorBox::rb_toggle_custom_loudness_pos)); + /* show editors */ edit_action = ActionManager::register_action ( processor_box_actions, X_("edit"), _("Edit..."), @@ -3966,16 +3984,22 @@ ProcessorBox::rb_ab_plugins () void ProcessorBox::rb_set_disk_io_position (DiskIOPoint diop) { - if (_current_processor_box == 0) { - return; - } - if (_ignore_disk_io_change) { + if (_current_processor_box == 0 || _ignore_rb_change) { return; } _current_processor_box->set_disk_io_position (diop); } +void +ProcessorBox::rb_toggle_custom_loudness_pos () +{ + if (_current_processor_box == 0 || _ignore_rb_change) { + return; + } + _current_processor_box->toggle_custom_loudness_pos (); +} + void ProcessorBox::rb_manage_pins () { diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 2063ab064b..2513aceaa2 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -564,6 +564,7 @@ private: void get_selected_processors (ProcSelection&) const; void set_disk_io_position (ARDOUR::DiskIOPoint); + void toggle_custom_loudness_pos (); bool can_cut() const; bool stub_processor_selected() const; @@ -611,6 +612,7 @@ private: static void rb_ab_plugins (); static void rb_manage_pins (); static void rb_set_disk_io_position (ARDOUR::DiskIOPoint); + static void rb_toggle_custom_loudness_pos (); static void rb_edit (); static void rb_edit_generic (); @@ -634,7 +636,7 @@ private: XMLNode* entry_gui_object_state (ProcessorEntry *); PBD::ScopedConnection amp_config_connection; - static bool _ignore_disk_io_change; + static bool _ignore_rb_change; }; #endif /* __ardour_gtk_processor_box__ */