diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-05 14:09:58 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-05 14:09:58 +0000 |
commit | 896a0a991cc44418f58903fe5dd1c58001c87314 (patch) | |
tree | 8a4e899260d04f7ad5dc42afde589ad55bbf3d3b /gtk2_ardour/monitor_section.cc | |
parent | 2e1d9645281435d590c2d2879aba08431f8561e6 (diff) |
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
Diffstat (limited to 'gtk2_ardour/monitor_section.cc')
-rw-r--r-- | gtk2_ardour/monitor_section.cc | 78 |
1 files changed, 74 insertions, 4 deletions
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<Action> 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")); @@ -412,6 +433,38 @@ MonitorSection::set_button_names () } void +MonitorSection::toggle_exclusive_solo () +{ + if (!_monitor) { + return; + } + + Glib::RefPtr<Action> act = ActionManager::get_action (X_("Monitor"), "toggle-exclusive-solo"); + if (act) { + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act); + Config->set_exclusive_solo (tact->get_active()); + } + +} + + +void +MonitorSection::toggle_mute_overrides_solo () +{ + if (!_monitor) { + return; + } + + Glib::RefPtr<Action> act = ActionManager::get_action (X_("Monitor"), "toggle-mute-overrides-solo"); + if (act) { + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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 () { if (!_monitor) { @@ -537,6 +590,7 @@ MonitorSection::register_actions () { string action_name; string action_descr; + Glib::RefPtr<Action> 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<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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<ToggleAction>::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) { |