remove assert()s from LocaleGuard
[ardour.git] / gtk2_ardour / route_ui.cc
index ddba45b73f3359ac7511807f1c19b5ca59b64509..29ccc647be533535a6ce886f16c551db588a31ae 100644 (file)
@@ -282,7 +282,7 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
                t->RecordEnableChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::route_rec_enable_changed, this), gui_context());
 
                rec_enable_button->show();
-               rec_enable_button->set_controllable (t->rec_enable_control());
+               rec_enable_button->set_controllable (t->rec_enable_control());
 
                 if (is_midi_track()) {
                         midi_track()->StepEditStatusChange.connect (route_connections, invalidator (*this),
@@ -405,7 +405,16 @@ RouteUI::mute_press (GdkEventButton* ev)
 
                        } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
 
-                               /* Primary-button1 applies change to the mix group even if it is not active
+                               /* Primary-button1 inverts the implication of
+                                  the group being active. If the group is
+                                  active (for mute), then this modifier means
+                                  "do not apply to mute". If the group is
+                                  inactive (for mute), then this modifier
+                                  means "apply to route". This is all
+                                  accomplished by passing just the actual
+                                  route, along with the InverseGroup group
+                                  control disposition.
+
                                   NOTE: Primary-button2 is MIDI learn.
                                */
 
@@ -413,20 +422,15 @@ RouteUI::mute_press (GdkEventButton* ev)
 
                                if (ev->button == 1) {
 
-                                       if (_route->route_group()) {
-
-                                               rl = _route->route_group()->route_list();
+                                       rl.reset (new RouteList);
+                                       rl->push_back (_route);
 
-                                               if (_mute_release) {
-                                                       _mute_release->routes = rl;
-                                               }
-                                       } else {
-                                               rl.reset (new RouteList);
-                                               rl->push_back (_route);
+                                       if (_mute_release) {
+                                               _mute_release->routes = rl;
                                        }
 
                                        DisplaySuspender ds;
-                                       _session->set_mute (rl, !_route->muted(), Session::rt_cleanup, Controllable::WholeGroup);
+                                       _session->set_mute (rl, !_route->muted(), Session::rt_cleanup, Controllable::InverseGroup);
                                }
 
                        } else {
@@ -555,9 +559,9 @@ RouteUI::solo_press(GdkEventButton* ev)
 
                                DisplaySuspender ds;
                                if (Config->get_solo_control_is_listen_control()) {
-                                       _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(),  Session::rt_cleanup, Controllable::NoGroup);
+                                       _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(),  Session::rt_cleanup, Controllable::UseGroup);
                                } else {
-                                       _session->set_solo (_session->get_routes(), !_route->self_soloed(),  Session::rt_cleanup, Controllable::NoGroup);
+                                       _session->set_solo (_session->get_routes(), !_route->self_soloed(),  Session::rt_cleanup, Controllable::UseGroup);
                                }
 
                        } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
@@ -606,23 +610,33 @@ RouteUI::solo_press(GdkEventButton* ev)
                                boost::shared_ptr<RouteList> rl;
 
                                if (ev->button == 1) {
-                                       if (ARDOUR::Profile->get_mixbus() && _route->route_group()) {
 
-                                               rl = _route->route_group()->route_list();
+                                       /* Primary-button1 inverts the implication of
+                                          the group being active. If the group is
+                                          active (for solo), then this modifier means
+                                          "do not apply to solo". If the group is
+                                          inactive (for mute), then this modifier
+                                          means "apply to route". This is all
+                                          accomplished by passing just the actual
+                                          route, along with the InverseGroup group
+                                          control disposition.
 
-                                               if (_solo_release) {
-                                                       _solo_release->routes = rl;
-                                               }
-                                       } else {
-                                               rl.reset (new RouteList);
-                                               rl->push_back (_route);
+                                          NOTE: Primary-button2 is MIDI learn.
+                                       */
+
+                                       rl.reset (new RouteList);
+                                       rl->push_back (_route);
+
+                                       if (_solo_release) {
+                                               _solo_release->routes = rl;
                                        }
 
                                        DisplaySuspender ds;
+
                                        if (Config->get_solo_control_is_listen_control()) {
-                                               _session->set_listen (rl, !_route->listening_via_monitor(),  Session::rt_cleanup, Controllable::WholeGroup);
+                                               _session->set_listen (rl, !_route->listening_via_monitor(),  Session::rt_cleanup, Controllable::InverseGroup);
                                        } else {
-                                               _session->set_solo (rl, !_route->self_soloed(),  Session::rt_cleanup, Controllable::WholeGroup);
+                                               _session->set_solo (rl, !_route->self_soloed(),  Session::rt_cleanup, Controllable::InverseGroup);
                                        }
                                }
 
@@ -725,17 +739,11 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
 
                                boost::shared_ptr<RouteList> rl;
 
-                               if (_route->route_group()) {
-
-                                       rl = _route->route_group()->route_list();
-
-                               } else {
-                                       rl.reset (new RouteList);
-                                       rl->push_back (_route);
-                               }
+                               rl.reset (new RouteList);
+                               rl->push_back (_route);
 
                                DisplaySuspender ds;
-                               _session->set_record_enabled (rl, !_route->record_enabled(), Session::rt_cleanup, Controllable::WholeGroup);
+                               _session->set_record_enabled (rl, !_route->record_enabled(), Session::rt_cleanup, Controllable::InverseGroup);
                        }
 
                } else if (Keyboard::is_context_menu_event (ev)) {
@@ -1828,7 +1836,7 @@ RouteUI::map_frozen ()
 {
        ENSURE_GUI_THREAD (*this, &RouteUI::map_frozen)
 
-       AudioTrack* at = dynamic_cast<AudioTrack*>(_route.get());
+       AudioTrack* at = dynamic_cast<AudioTrack*>(_route.get());
 
        if (at) {
                switch (at->freeze_state()) {