summaryrefslogtreecommitdiff
path: root/gtk2_ardour/monitor_section.cc
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2014-07-18 08:47:45 -0500
committerBen Loftis <ben@harrisonconsoles.com>2014-07-18 08:47:45 -0500
commitb2b736d596123de52dac700db769ac4eb576da5c (patch)
treec800fa5fd3a84d3c7b0749ba3edb5b9fd89629ed /gtk2_ardour/monitor_section.cc
parentac9219a3c884b69352ff5ab0d13f30fb15cf8e6e (diff)
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.
Diffstat (limited to 'gtk2_ardour/monitor_section.cc')
-rw-r--r--gtk2_ardour/monitor_section.cc125
1 files changed, 99 insertions, 26 deletions
diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc
index a816dd397d..3f7ebfaa6e 100644
--- a/gtk2_ardour/monitor_section.cc
+++ b/gtk2_ardour/monitor_section.cc
@@ -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);
}
}