13
0

Use slider for master output volume

This commit is contained in:
Robin Gareus 2020-07-22 22:20:15 +02:00
parent 75187f6469
commit 4ccd3c9740
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 20 additions and 51 deletions

View File

@ -73,6 +73,7 @@
#include "widgets/tooltips.h" #include "widgets/tooltips.h"
#include "ardour_window.h" #include "ardour_window.h"
#include "automation_controller.h"
#include "context_menu_helper.h" #include "context_menu_helper.h"
#include "enums_convert.h" #include "enums_convert.h"
#include "mixer_strip.h" #include "mixer_strip.h"
@ -114,16 +115,14 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer)
, rec_mon_table (2, 2) , rec_mon_table (2, 2)
, solo_iso_table (1, 2) , solo_iso_table (1, 2)
, mute_solo_table (1, 2) , mute_solo_table (1, 2)
, master_volume_table (1, 2) , master_volume_table (2, 2)
, bottom_button_table (1, 3) , bottom_button_table (1, 3)
, monitor_section_button (0) , monitor_section_button (0)
, midi_input_enable_button (0) , midi_input_enable_button (0)
, _plugin_insert_cnt (0) , _plugin_insert_cnt (0)
, _comment_button (_("Comments")) , _comment_button (_("Comments"))
, trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero)) , trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero))
, _master_volume_menu (0)
, _loudess_analysis_button (0) , _loudess_analysis_button (0)
, _volume_control_knob (0)
, _visibility (X_("mixer-element-visibility")) , _visibility (X_("mixer-element-visibility"))
, _suspend_menu_callbacks (false) , _suspend_menu_callbacks (false)
, control_slave_ui (sess) , control_slave_ui (sess)
@ -158,9 +157,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, boost::shared_ptr<Route> rt
, _plugin_insert_cnt (0) , _plugin_insert_cnt (0)
, _comment_button (_("Comments")) , _comment_button (_("Comments"))
, trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero)) , trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero))
, _master_volume_menu (0)
, _loudess_analysis_button (0) , _loudess_analysis_button (0)
, _volume_control_knob (0)
, _visibility (X_("mixer-element-visibility")) , _visibility (X_("mixer-element-visibility"))
, _suspend_menu_callbacks (false) , _suspend_menu_callbacks (false)
, control_slave_ui (sess) , control_slave_ui (sess)
@ -244,6 +241,10 @@ MixerStrip::init ()
} }
rec_mon_table.show (); 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) { if (solo_isolated_led) {
button_size_group->add_widget (*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)); trim_control.StopGesture.connect(sigc::mem_fun(*this, &MixerStrip::trim_end_touch));
input_button_box.pack_start (trim_control, false, false); 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_no_show_all ();
global_vpacker.set_border_width (1); global_vpacker.set_border_width (1);
global_vpacker.set_spacing (0); global_vpacker.set_spacing (0);
@ -446,7 +444,6 @@ MixerStrip::~MixerStrip ()
if (this ==_entered_mixer_strip) { if (this ==_entered_mixer_strip) {
_entered_mixer_strip = NULL; _entered_mixer_strip = NULL;
} }
delete _master_volume_menu;
} }
void void
@ -601,29 +598,27 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
master_volume_table.show (); master_volume_table.show ();
} }
if (_volume_control_knob == 0) { if (_volume_controller == 0) {
assert (_loudess_analysis_button == 0); assert (_loudess_analysis_button == 0);
assert (route()->volume_control()); assert (route()->volume_control());
boost::shared_ptr<AutomationControl> 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 = 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")); 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 (*_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 (); _loudess_analysis_button->show ();
_volume_control_knob->show (); _volume_controller->show ();
} }
if (monitor_section_button == 0) { if (monitor_section_button == 0) {
@ -1997,31 +1992,6 @@ MixerStrip::loudess_analysis_button_clicked ()
PublicEditor::instance().measure_master_loudness (false); 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<Gtk::CheckMenuItem*> (&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 void
MixerStrip::hide_clicked () MixerStrip::hide_clicked ()
{ {

View File

@ -79,6 +79,7 @@ class Mixer_UI;
class MotionController; class MotionController;
class RouteGroupMenu; class RouteGroupMenu;
class ArdourWindow; class ArdourWindow;
class AutomationController;
class MixerStrip : public AxisView, public RouteUI, public Gtk::EventBox class MixerStrip : public AxisView, public RouteUI, public Gtk::EventBox
{ {
@ -228,9 +229,8 @@ private:
ArdourWidgets::ArdourButton _comment_button; ArdourWidgets::ArdourButton _comment_button;
ArdourWidgets::ArdourKnob trim_control; ArdourWidgets::ArdourKnob trim_control;
Gtk::Menu* _master_volume_menu;
ArdourWidgets::ArdourButton* _loudess_analysis_button; ArdourWidgets::ArdourButton* _loudess_analysis_button;
ArdourWidgets::ArdourKnob* _volume_control_knob; boost::shared_ptr<AutomationController> _volume_controller;
void trim_start_touch (); void trim_start_touch ();
void trim_end_touch (); void trim_end_touch ();
@ -238,7 +238,6 @@ private:
void setup_comment_button (); void setup_comment_button ();
void loudess_analysis_button_clicked (); void loudess_analysis_button_clicked ();
bool loudess_analysis_button_pressed (GdkEventButton*);
ArdourWidgets::ArdourButton group_button; ArdourWidgets::ArdourButton group_button;
RouteGroupMenu* group_menu; RouteGroupMenu* group_menu;