summaryrefslogtreecommitdiff
path: root/gtk2_ardour/monitor_section.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/monitor_section.cc')
-rw-r--r--gtk2_ardour/monitor_section.cc50
1 files changed, 48 insertions, 2 deletions
diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc
index b9e4c1b8a5..95b9e5c6a5 100644
--- a/gtk2_ardour/monitor_section.cc
+++ b/gtk2_ardour/monitor_section.cc
@@ -51,7 +51,8 @@ MonitorSection::MonitorSection (Session* s)
, dim_all_button (_("dim"))
, mono_button (_("mono"))
, rude_solo_button (_("soloing"))
-
+ , rude_audition_button (_("auditioning"))
+ , exclusive_solo_button (_("Exclusive solo"))
{
Glib::RefPtr<Action> act;
@@ -90,10 +91,16 @@ MonitorSection::MonitorSection (Session* s)
rude_solo_button.set_name ("TransportSoloAlert");
rude_solo_button.show ();
- ARDOUR_UI::Blink.connect (sigc::mem_fun (*this, &MonitorSection::solo_blink));
+ rude_audition_button.set_name ("TransportAuditioningAlert");
+ rude_audition_button.show ();
+
+ ARDOUR_UI::Blink.connect (sigc::mem_fun (*this, &MonitorSection::do_blink));
+
rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo), false);
UI::instance()->set_tip (rude_solo_button, _("When active, something is soloed.\nClick to de-solo everything"));
+ rude_audition_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_audition), false);
+ UI::instance()->set_tip (rude_audition_button, _("When active, auditioning is active.\nClick to stop the audition"));
solo_model_box.set_spacing (6);
solo_model_box.pack_start (solo_in_place_button, false, false);
@@ -151,9 +158,13 @@ MonitorSection::MonitorSection (Session* s)
solo_packer->pack_start (*spin_packer, true, true);
+ exclusive_solo_button.set_name (X_("MonitorCutButton"));
+
upper_packer.set_spacing (12);
upper_packer.pack_start (rude_solo_button, false, false);
+ upper_packer.pack_start (rude_audition_button, false, false);
upper_packer.pack_start (solo_model_box, false, false);
+ upper_packer.pack_start (exclusive_solo_button, false, false);
upper_packer.pack_start (*solo_packer, false, false);
act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
@@ -808,6 +819,32 @@ MonitorSection::map_state ()
}
void
+MonitorSection::do_blink (bool onoff)
+{
+ solo_blink (onoff);
+ audition_blink (onoff);
+}
+
+void
+MonitorSection::audition_blink (bool onoff)
+{
+ if (_session == 0) {
+ return;
+ }
+
+ if (_session->is_auditioning()) {
+ if (onoff) {
+ rude_audition_button.set_state (STATE_ACTIVE);
+ } else {
+ rude_audition_button.set_state (STATE_NORMAL);
+ }
+ } else {
+ rude_audition_button.set_active (false);
+ rude_audition_button.set_state (STATE_NORMAL);
+ }
+}
+
+void
MonitorSection::solo_blink (bool onoff)
{
if (_session == 0) {
@@ -840,6 +877,15 @@ MonitorSection::cancel_solo (GdkEventButton* ev)
return true;
}
+bool
+MonitorSection::cancel_audition (GdkEventButton* ev)
+{
+ if (_session) {
+ _session->cancel_audition();
+ }
+ return true;
+}
+
void
MonitorSection::solo_cut_changed ()
{