From 896a0a991cc44418f58903fe5dd1c58001c87314 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 5 May 2010 14:09:58 +0000 Subject: rename latched solo option and reverse its meaning; add exclusive solo button functionality in monitor section; add solo/mute override control in monitor section git-svn-id: svn://localhost/ardour2/branches/3.0@7059 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/monitor_section.cc | 78 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 4 deletions(-) (limited to 'gtk2_ardour/monitor_section.cc') diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc index 95b9e5c6a5..f3a668804b 100644 --- a/gtk2_ardour/monitor_section.cc +++ b/gtk2_ardour/monitor_section.cc @@ -52,7 +52,8 @@ MonitorSection::MonitorSection (Session* s) , mono_button (_("mono")) , rude_solo_button (_("soloing")) , rude_audition_button (_("auditioning")) - , exclusive_solo_button (_("Exclusive solo")) + , exclusive_solo_button (_("Exclusive")) + , solo_mute_override_button (_("Solo/Mute")) { Glib::RefPtr act; @@ -127,7 +128,6 @@ MonitorSection::MonitorSection (Session* s) act->connect_proxy (pfl_button); } - /* Solo Boost */ solo_boost_control = new VolumeController (little_knob_pixbuf, &solo_boost_adjustment, false, 30, 30); @@ -158,13 +158,34 @@ MonitorSection::MonitorSection (Session* s) solo_packer->pack_start (*spin_packer, true, true); - exclusive_solo_button.set_name (X_("MonitorCutButton")); + exclusive_solo_button.set_name (X_("MonitorOptButton")); + ARDOUR_UI::instance()->set_tip (&exclusive_solo_button, _("Exclusive solo means that only 1 solo is active at a time")); + + act = ActionManager::get_action (X_("Monitor"), X_("toggle-exclusive-solo")); + if (act) { + act->connect_proxy (exclusive_solo_button); + } + solo_mute_override_button.set_name (X_("MonitorOptButton")); + ARDOUR_UI::instance()->set_tip (&solo_mute_override_button, _("If enabled, solo will override mute\n(a soloed & muted track or bus will be audible)")); + + act = ActionManager::get_action (X_("Monitor"), X_("toggle-mute-overrides-solo")); + if (act) { + act->connect_proxy (solo_mute_override_button); + } + + HBox* solo_opt_box = manage (new HBox); + solo_opt_box->set_spacing (12); + solo_opt_box->set_homogeneous (true); + solo_opt_box->pack_start (exclusive_solo_button); + solo_opt_box->pack_start (solo_mute_override_button); + solo_opt_box->show (); + 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_opt_box, false, false); upper_packer.pack_start (*solo_packer, false, false); act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all")); @@ -411,6 +432,38 @@ MonitorSection::set_button_names () solo_button_label.set_text ("rec"); } +void +MonitorSection::toggle_exclusive_solo () +{ + if (!_monitor) { + return; + } + + Glib::RefPtr act = ActionManager::get_action (X_("Monitor"), "toggle-exclusive-solo"); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + Config->set_exclusive_solo (tact->get_active()); + } + +} + + +void +MonitorSection::toggle_mute_overrides_solo () +{ + if (!_monitor) { + return; + } + + Glib::RefPtr act = ActionManager::get_action (X_("Monitor"), "toggle-mute-overrides-solo"); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + cerr << "Set solo_mute_override to " << tact->get_active() << endl; + Config->set_solo_mute_override (tact->get_active()); + } +} + + void MonitorSection::dim_all () { @@ -537,6 +590,7 @@ MonitorSection::register_actions () { string action_name; string action_descr; + Glib::RefPtr act; monitor_actions = ActionGroup::create (X_("Monitor")); ActionManager::add_action_group (monitor_actions); @@ -550,6 +604,22 @@ MonitorSection::register_actions () ActionManager::register_toggle_action (monitor_actions, "monitor-dim-all", "", sigc::mem_fun (*this, &MonitorSection::dim_all)); + act = ActionManager::register_toggle_action (monitor_actions, "toggle-exclusive-solo", "", + sigc::mem_fun (*this, &MonitorSection::toggle_exclusive_solo)); + + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + tact->set_active (Config->get_exclusive_solo()); + + act = ActionManager::register_toggle_action (monitor_actions, "toggle-mute-overrides-solo", "", + sigc::mem_fun (*this, &MonitorSection::toggle_mute_overrides_solo)); + + tact = Glib::RefPtr::cast_dynamic(act); + tact->set_active (Config->get_solo_mute_override()); + + /* map from RC config */ + + + /* note the 1-based counting (for naming - backend uses 0-based) */ for (uint32_t chn = 1; chn <= 16; ++chn) { -- cgit v1.2.3