diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-18 13:25:13 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-18 13:25:13 +0000 |
commit | ef92349187b61349d2d5182f49f700183901f59e (patch) | |
tree | 3b4c397c01c1b647bbbcf86db5cdcd0a5823afe4 /gtk2_ardour | |
parent | 9931171b6957be8989aa34e94dc15d7a4e598fd3 (diff) |
bring back full mute control (pre/post/control/main) via mute button context click
git-svn-id: svn://localhost/ardour2/branches/3.0@6116 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/route_ui.cc | 148 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 12 |
2 files changed, 77 insertions, 83 deletions
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 68c84bb1e7..5104601ba7 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -31,6 +31,7 @@ #include "pbd/stacktrace.h" #include "pbd/shiva.h" #include "pbd/controllable.h" +#include "pbd/enumwriter.h" #include "ardour_ui.h" #include "editor.h" @@ -96,6 +97,10 @@ RouteUI::init () mute_menu = 0; solo_menu = 0; sends_menu = 0; + pre_fader_mute_check = 0; + post_fader_mute_check = 0; + listen_mute_check = 0; + main_mute_check = 0; ignore_toggle = false; wait_for_release = false; route_active_menu_item = 0; @@ -806,52 +811,85 @@ RouteUI::build_mute_menu(void) mute_menu = new Menu; mute_menu->set_name ("ArdourContextMenu"); -#if FIX_ME_IN_3_0 MenuList& items = mute_menu->items(); - CheckMenuItem* check; - - check = new CheckMenuItem(_("Pre Fader")); - init_mute_menu(PRE_FADER, check); - check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), PRE_FADER, check)); - _route->pre_fader_changed.connect(bind (mem_fun (*this, &RouteUI::pre_fader_toggle), check)); - items.push_back (CheckMenuElem(*check)); - check->show_all(); - check = new CheckMenuItem(_("Post Fader")); - init_mute_menu(POST_FADER, check); - check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), POST_FADER, check)); - _route->post_fader_changed.connect(bind (mem_fun (*this, &RouteUI::post_fader_toggle), check)); - items.push_back (CheckMenuElem(*check)); - check->show_all(); - - check = new CheckMenuItem(_("Control Outs")); - init_mute_menu(CONTROL_OUTS, check); - check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), CONTROL_OUTS, check)); - _route->control_outs_changed.connect(bind (mem_fun (*this, &RouteUI::control_outs_toggle), check)); - items.push_back (CheckMenuElem(*check)); - check->show_all(); + pre_fader_mute_check = manage (new CheckMenuItem(_("Pre Fader"))); + init_mute_menu(MuteMaster::PreFader, pre_fader_mute_check); + pre_fader_mute_check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), MuteMaster::PreFader, pre_fader_mute_check)); + items.push_back (CheckMenuElem(*pre_fader_mute_check)); + pre_fader_mute_check->show_all(); + + post_fader_mute_check = manage (new CheckMenuItem(_("Post Fader"))); + init_mute_menu(MuteMaster::PostFader, post_fader_mute_check); + post_fader_mute_check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), MuteMaster::PostFader, post_fader_mute_check)); + items.push_back (CheckMenuElem(*post_fader_mute_check)); + post_fader_mute_check->show_all(); + + listen_mute_check = manage (new CheckMenuItem(_("Control Outs"))); + init_mute_menu(MuteMaster::Listen, listen_mute_check); + listen_mute_check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), MuteMaster::Listen, listen_mute_check)); + items.push_back (CheckMenuElem(*listen_mute_check)); + listen_mute_check->show_all(); + + main_mute_check = manage (new CheckMenuItem(_("Main Outs"))); + init_mute_menu(MuteMaster::Main, main_mute_check); + main_mute_check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), MuteMaster::Main, main_mute_check)); + items.push_back (CheckMenuElem(*main_mute_check)); + main_mute_check->show_all(); - check = new CheckMenuItem(_("Main Outs")); - init_mute_menu(MAIN_OUTS, check); - check->signal_toggled().connect(bind (mem_fun (*this, &RouteUI::toggle_mute_menu), MAIN_OUTS, check)); - _route->main_outs_changed.connect(bind (mem_fun (*this, &RouteUI::main_outs_toggle), check)); - items.push_back (CheckMenuElem(*check)); - check->show_all(); -#endif //items.push_back (SeparatorElem()); // items.push_back (MenuElem (_("MIDI Bind"), mem_fun (*mute_button, &BindableToggleButton::midi_learn))); + + _route->mute_points_changed.connect (mem_fun (*this, &RouteUI::muting_change)); } void RouteUI::init_mute_menu(MuteMaster::MutePoint mp, CheckMenuItem* check) { - check->set_active (_route->mute_master()->muted_at (mp)); + check->set_active (_route->mute_points() & mp); +} + +void +RouteUI::toggle_mute_menu(MuteMaster::MutePoint mp, Gtk::CheckMenuItem* check) +{ + if (check->get_active()) { + _route->set_mute_points (MuteMaster::MutePoint (_route->mute_points() | mp)); + } else { + _route->set_mute_points (MuteMaster::MutePoint (_route->mute_points() & ~mp)); + } } void -RouteUI::toggle_mute_menu(MuteMaster::MutePoint /*mp*/, Gtk::CheckMenuItem* /*check*/) +RouteUI::muting_change () { - // _route->set_mute_config(type, check->get_active(), this); + ENSURE_GUI_THREAD(mem_fun (*this, &RouteUI::muting_change)); + + bool yn; + MuteMaster::MutePoint current = _route->mute_points (); + + yn = (current & MuteMaster::PreFader); + + if (pre_fader_mute_check->get_active() != yn) { + pre_fader_mute_check->set_active (yn); + } + + yn = (current & MuteMaster::PostFader); + + if (post_fader_mute_check->get_active() != yn) { + post_fader_mute_check->set_active (yn); + } + + yn = (current & MuteMaster::Listen); + + if (listen_mute_check->get_active() != yn) { + listen_mute_check->set_active (yn); + } + + yn = (current & MuteMaster::Main); + + if (main_mute_check->get_active() != yn) { + main_mute_check->set_active (yn); + } } void @@ -1164,52 +1202,6 @@ RouteUI::solo_isolated_toggle(void* /*src*/, Gtk::CheckMenuItem* check) } } -#ifdef FIX_THIS_FOR_3_0 -void -RouteUI::pre_fader_toggle(void* src, Gtk::CheckMenuItem* check) -{ - ENSURE_GUI_THREAD(bind (mem_fun (*this, &RouteUI::pre_fader_toggle), src, check)); - - bool yn = _route->get_mute_config(PRE_FADER); - if (check->get_active() != yn) { - check->set_active (yn); - } -} - -void -RouteUI::post_fader_toggle(void* src, Gtk::CheckMenuItem* check) -{ - ENSURE_GUI_THREAD(bind (mem_fun (*this, &RouteUI::post_fader_toggle), src, check)); - - bool yn = _route->get_mute_config(POST_FADER); - if (check->get_active() != yn) { - check->set_active (yn); - } -} - -void -RouteUI::control_outs_toggle(void* src, Gtk::CheckMenuItem* check) -{ - ENSURE_GUI_THREAD(bind (mem_fun (*this, &RouteUI::control_outs_toggle), src, check)); - - bool yn = _route->get_mute_config(CONTROL_OUTS); - if (check->get_active() != yn) { - check->set_active (yn); - } -} - -void -RouteUI::main_outs_toggle(void* src, Gtk::CheckMenuItem* check) -{ - ENSURE_GUI_THREAD(bind (mem_fun (*this, &RouteUI::main_outs_toggle), src, check)); - - bool yn = _route->get_mute_config(MAIN_OUTS); - if (check->get_active() != yn) { - check->set_active (yn); - } -} -#endif - void RouteUI::disconnect_input () { diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 3b611d23a0..1b2aca1689 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -99,6 +99,7 @@ class RouteUI : public virtual AxisView Gtk::Menu* solo_menu; Gtk::Menu* sends_menu; + XMLNode *xml_node; void ensure_xml_node (); @@ -137,12 +138,13 @@ class RouteUI : public virtual AxisView void solo_isolated_toggle (void*, Gtk::CheckMenuItem*); void toggle_solo_isolated (Gtk::CheckMenuItem*); - void toggle_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*); - void pre_fader_toggle(void*, Gtk::CheckMenuItem*); - void post_fader_toggle(void*, Gtk::CheckMenuItem*); - void control_outs_toggle(void*, Gtk::CheckMenuItem*); - void main_outs_toggle(void*, Gtk::CheckMenuItem*); + Gtk::CheckMenuItem* pre_fader_mute_check; + Gtk::CheckMenuItem* post_fader_mute_check; + Gtk::CheckMenuItem* listen_mute_check; + Gtk::CheckMenuItem* main_mute_check; + void toggle_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*); + void muting_change (); void build_mute_menu(void); void init_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*); |