mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
tweaks for the monitor section. refactoring of some buttons, using new ArdourKnob instead of VolumeController. New ArdourDisplay shows a controllables user value, and provides support for preset values (hardcoded at present). Further refactoring to come, so that ArdourWidgets are derived from a common class. Controllable now has more responsibility for scaling between internal, user, and interface (knob percent) values. This also needs more refactoring and might have some unintended consequences. tested with audio and nothing seems amiss, yet.
This commit is contained in:
parent
ac9219a3c8
commit
b2b736d596
16 changed files with 967 additions and 31 deletions
|
|
@ -27,6 +27,9 @@
|
|||
#include "gtkmm2ext/actions.h"
|
||||
#include "gtkmm2ext/motionfeedback.h"
|
||||
|
||||
#include <gtkmm/menu.h>
|
||||
#include <gtkmm/menuitem.h>
|
||||
|
||||
#include "ardour/monitor_processor.h"
|
||||
#include "ardour/route.h"
|
||||
|
||||
|
|
@ -60,6 +63,10 @@ MonitorSection::MonitorSection (Session* s)
|
|||
, dim_control (0)
|
||||
, solo_boost_control (0)
|
||||
, solo_cut_control (0)
|
||||
, gain_display (0)
|
||||
, dim_display (0)
|
||||
, solo_boost_display (0)
|
||||
, solo_cut_display (0)
|
||||
, solo_in_place_button (_("SiP"), ArdourButton::led_default_elements)
|
||||
, afl_button (_("AFL"), ArdourButton::led_default_elements)
|
||||
, pfl_button (_("PFL"), ArdourButton::led_default_elements)
|
||||
|
|
@ -67,6 +74,9 @@ MonitorSection::MonitorSection (Session* s)
|
|||
, solo_mute_override_button (ArdourButton::led_default_elements)
|
||||
, _inhibit_solo_model_update (false)
|
||||
{
|
||||
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
Glib::RefPtr<Action> act;
|
||||
|
||||
if (!monitor_actions) {
|
||||
|
|
@ -141,9 +151,19 @@ MonitorSection::MonitorSection (Session* s)
|
|||
|
||||
/* Solo Boost */
|
||||
|
||||
solo_boost_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.01, 0.1, true, 30, 30, true);
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (*solo_boost_control, _("Gain increase for soloed signals (0dB is normal)"));
|
||||
solo_boost_control = new ArdourKnob ();
|
||||
solo_boost_control->set_name("monitor knob");
|
||||
solo_boost_control->set_size_request(40,40);
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (*solo_boost_control, _("Gain increase for soloed signals (0dB is normal)"));
|
||||
|
||||
solo_boost_display = new ArdourDisplay ();
|
||||
solo_boost_display->set_name("monitor section cut");
|
||||
solo_boost_display->set_size_request(80,20);
|
||||
solo_boost_display->add_controllable_preset("0dB", 0.0);
|
||||
solo_boost_display->add_controllable_preset("3 dB", 3.0);
|
||||
solo_boost_display->add_controllable_preset("6 dB", 6.0);
|
||||
solo_boost_display->add_controllable_preset("10 dB", 10.0);
|
||||
|
||||
HBox* solo_packer = manage (new HBox);
|
||||
solo_packer->set_spacing (6);
|
||||
solo_packer->show ();
|
||||
|
|
@ -151,44 +171,69 @@ MonitorSection::MonitorSection (Session* s)
|
|||
spin_label = manage (new Label (_("Solo Boost")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*solo_boost_control, false, false);
|
||||
spin_packer->set_spacing (3);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
spin_packer->pack_start (*solo_boost_control, false, false);
|
||||
spin_packer->pack_start (*solo_boost_display, false, false);
|
||||
|
||||
solo_packer->pack_start (*spin_packer, true, false);
|
||||
|
||||
/* Solo (SiP) cut */
|
||||
|
||||
solo_cut_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.1, 0.5, true, 30, 30, true);
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (*solo_cut_control, _("Gain reduction non-soloed signals\nA value above -inf dB causes \"solo-in-front\""));
|
||||
solo_cut_control = new ArdourKnob ();
|
||||
solo_cut_control->set_name ("monitor knob");
|
||||
solo_cut_control->set_size_request (40,40);
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (*solo_cut_control, _("Gain reduction non-soloed signals\nA value above -inf dB causes \"solo-in-front\""));
|
||||
|
||||
solo_cut_display = new ArdourDisplay ();
|
||||
solo_cut_display->set_name("monitor section cut");
|
||||
solo_cut_display->set_size_request(80,20);
|
||||
solo_cut_display->add_controllable_preset("0dB", 0.0);
|
||||
solo_cut_display->add_controllable_preset("-6 dB", -6.0);
|
||||
solo_cut_display->add_controllable_preset("-12 dB", -12.0);
|
||||
solo_cut_display->add_controllable_preset("-20 dB", -20.0);
|
||||
|
||||
spin_label = manage (new Label (_("SiP Cut")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*solo_cut_control, false, false);
|
||||
spin_packer->set_spacing (3);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
spin_packer->pack_start (*solo_cut_control, false, false);
|
||||
spin_packer->pack_start (*solo_cut_display, false, false);
|
||||
|
||||
solo_packer->pack_start (*spin_packer, true, false);
|
||||
|
||||
/* Dim */
|
||||
|
||||
dim_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.01, 0.1, true, 30, 30, true);
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (*dim_control, _("Gain reduction to use when dimming monitor outputs"));
|
||||
dim_control = new ArdourKnob ();
|
||||
dim_control->set_name ("monitor knob");
|
||||
dim_control->set_size_request (40,40);
|
||||
ARDOUR_UI::instance()->tooltips().set_tip (*dim_control, _("Gain reduction to use when dimming monitor outputs"));
|
||||
|
||||
dim_display = new ArdourDisplay ();
|
||||
dim_display->set_name("monitor section cut");
|
||||
dim_display->set_size_request(80,20);
|
||||
dim_display->add_controllable_preset("0dB", 0.0);
|
||||
dim_display->add_controllable_preset("-3 dB", -3.0);
|
||||
dim_display->add_controllable_preset("-6 dB", -6.0);
|
||||
dim_display->add_controllable_preset("-12 dB", -12.0);
|
||||
dim_display->add_controllable_preset("-20 dB", -20.0);
|
||||
dim_display->add_controllable_preset("-30 dB", -30.0);
|
||||
|
||||
HBox* dim_packer = manage (new HBox);
|
||||
dim_packer->show ();
|
||||
|
||||
spin_label = manage (new Label (_("Dim")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*dim_control, false, false);
|
||||
spin_packer->set_spacing (3);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
spin_packer->pack_start (*dim_control, false, false);
|
||||
spin_packer->pack_start (*dim_display, false, false);
|
||||
|
||||
dim_packer->pack_start (*spin_packer, true, false);
|
||||
|
||||
exclusive_solo_button.set_text (_("excl. solo"));
|
||||
exclusive_solo_button.set_text (_("excl. solo"));
|
||||
exclusive_solo_button.set_name (X_("monitor solo exclusive"));
|
||||
ARDOUR_UI::instance()->set_tip (&exclusive_solo_button, _("Exclusive solo means that only 1 solo is active at a time"));
|
||||
|
||||
|
|
@ -262,14 +307,27 @@ MonitorSection::MonitorSection (Session* s)
|
|||
|
||||
/* Gain */
|
||||
|
||||
gain_control = new VolumeController (big_knob_pixbuf, boost::shared_ptr<Controllable>(), 1.0, 0.01, 0.1, true, 80, 80, false);
|
||||
|
||||
spin_label = manage (new Label (_("Monitor")));
|
||||
spin_packer = manage (new VBox);
|
||||
gain_control = new ArdourKnob ();
|
||||
gain_control->set_name("monitor knob");
|
||||
gain_control->set_size_request(80,80);
|
||||
|
||||
gain_display = new ArdourDisplay ();
|
||||
gain_display->set_name("monitor section cut");
|
||||
gain_display->set_size_request(40,20);
|
||||
gain_display->add_controllable_preset("0dB", 0.0);
|
||||
gain_display->add_controllable_preset("-3 dB", -3.0);
|
||||
gain_display->add_controllable_preset("-6 dB", -6.0);
|
||||
gain_display->add_controllable_preset("-12 dB", -12.0);
|
||||
gain_display->add_controllable_preset("-20 dB", -20.0);
|
||||
gain_display->add_controllable_preset("-30 dB", -30.0);
|
||||
|
||||
spin_label = manage (new Label (_("Monitor")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*gain_control, false, false);
|
||||
spin_packer->set_spacing (3);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
spin_packer->pack_start (*gain_control, false, false);
|
||||
spin_packer->pack_start (*gain_display, false, false);
|
||||
|
||||
lower_packer.pack_start (*spin_packer, true, true);
|
||||
|
||||
|
|
@ -317,8 +375,11 @@ MonitorSection::MonitorSection (Session* s)
|
|||
hpacker.pack_start (vpacker, true, true);
|
||||
|
||||
gain_control->show_all ();
|
||||
gain_display->show_all ();
|
||||
dim_control->show_all ();
|
||||
dim_display->show_all();
|
||||
solo_boost_control->show_all ();
|
||||
solo_boost_display->show_all();
|
||||
|
||||
channel_table.show ();
|
||||
hpacker.show ();
|
||||
|
|
@ -351,8 +412,13 @@ MonitorSection::~MonitorSection ()
|
|||
_channel_buttons.clear ();
|
||||
|
||||
delete gain_control;
|
||||
delete gain_display;
|
||||
delete dim_control;
|
||||
delete dim_display;
|
||||
delete solo_boost_control;
|
||||
delete solo_boost_display;
|
||||
delete solo_cut_control;
|
||||
delete solo_cut_display;
|
||||
delete _tearoff;
|
||||
}
|
||||
|
||||
|
|
@ -1064,13 +1130,16 @@ MonitorSection::assign_controllables ()
|
|||
}
|
||||
|
||||
if (_session) {
|
||||
solo_cut_control->set_controllable (_session->solo_cut_control());
|
||||
solo_cut_control->set_controllable (_session->solo_cut_control());
|
||||
solo_cut_display->set_controllable (_session->solo_cut_control());
|
||||
} else {
|
||||
solo_cut_control->set_controllable (none);
|
||||
solo_cut_control->set_controllable (none);
|
||||
solo_cut_display->set_controllable (none);
|
||||
}
|
||||
|
||||
if (_route) {
|
||||
gain_control->set_controllable (_route->gain_control());
|
||||
gain_display->set_controllable (_route->gain_control());
|
||||
} else {
|
||||
gain_control->set_controllable (none);
|
||||
}
|
||||
|
|
@ -1084,8 +1153,10 @@ MonitorSection::assign_controllables ()
|
|||
mono_button.set_controllable (_monitor->mono_control());
|
||||
mono_button.watch ();
|
||||
|
||||
dim_control->set_controllable (_monitor->dim_level_control ());
|
||||
solo_boost_control->set_controllable (_monitor->solo_boost_control ());
|
||||
dim_control->set_controllable (_monitor->dim_level_control ());
|
||||
dim_display->set_controllable (_monitor->dim_level_control ());
|
||||
solo_boost_control->set_controllable (_monitor->solo_boost_control ());
|
||||
solo_boost_display->set_controllable (_monitor->solo_boost_control ());
|
||||
|
||||
} else {
|
||||
|
||||
|
|
@ -1094,7 +1165,9 @@ MonitorSection::assign_controllables ()
|
|||
mono_button.set_controllable (none);
|
||||
|
||||
dim_control->set_controllable (none);
|
||||
dim_display->set_controllable (none);
|
||||
solo_boost_control->set_controllable (none);
|
||||
solo_boost_display->set_controllable (none);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue