remove assert()s from LocaleGuard
[ardour.git] / gtk2_ardour / editor_selection.cc
index 3a6277ececf16b2d4d19df1435caa481f196b08b..64d17f9ae5dbfde993a8dcff9fd9132ab72db2e4 100644 (file)
@@ -192,17 +192,10 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                group = clicked_routeview->route()->route_group();
        }
 
-       bool had_tracks = !selection->tracks.empty();
-       RouteGroup& arg (_session->all_route_group());
-
        switch (op) {
        case Selection::Toggle:
                if (selection->selected (clicked_axisview)) {
-                       if (arg.is_select() && arg.is_active()) {
-                               for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
-                                       selection->remove(*i);
-                               }
-                       } else if (group && group->is_active()) {
+                       if (group && group->is_active()) {
                                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
                                        if ((*i)->route_group() == group) {
                                                selection->remove(*i);
@@ -212,11 +205,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                                selection->remove (clicked_axisview);
                        }
                } else {
-                       if (arg.is_select() && arg.is_active()) {
-                               for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
-                                       selection->add(*i);
-                               }
-                       } else if (group && group->is_active()) {
+                       if (group && group->is_active()) {
                                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
                                        if ((*i)->route_group() == group) {
                                                selection->add(*i);
@@ -229,14 +218,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                break;
 
        case Selection::Add:
-               if (!had_tracks && arg.is_select() && arg.is_active()) {
-                       /* nothing was selected already, and all group is active etc. so use
-                          all tracks.
-                       */
-                       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
-                               selection->add(*i);
-                       }
-               } else if (group && group->is_active()) {
+               if (group && group->is_active()) {
                        for (TrackViewList::iterator i  = track_views.begin(); i != track_views.end (); ++i) {
                                if ((*i)->route_group() == group) {
                                        selection->add(*i);
@@ -249,14 +231,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
 
        case Selection::Set:
                selection->clear();
-               if (!had_tracks && arg.is_select() && arg.is_active()) {
-                       /* nothing was selected already, and all group is active etc. so use
-                          all tracks.
-                       */
-                       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
-                               selection->add(*i);
-                       }
-               } else if (group && group->is_active()) {
+               if (group && group->is_active()) {
                        for (TrackViewList::iterator i  = track_views.begin(); i != track_views.end (); ++i) {
                                if ((*i)->route_group() == group) {
                                        selection->add(*i);
@@ -327,15 +302,27 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
        if (!clicked_control_point) {
                return false;
        }
+
        bool ret = false;
 
        switch (op) {
        case Selection::Set:
-               if (press) {
+               if (!selection->selected (clicked_control_point)) {
                        selection->set (clicked_control_point);
                        ret = true;
+               } else {
+                       /* clicked on an already selected point */
+                       if (press) {
+                               break;
+                       } else {
+                               if (selection->points.size() > 1) {
+                                       selection->set (clicked_control_point);
+                                       ret = true;
+                               }
+                       }
                }
                break;
+
        case Selection::Add:
                if (press) {
                        selection->add (clicked_control_point);
@@ -1038,10 +1025,6 @@ Editor::track_selection_changed ()
 void
 Editor::time_selection_changed ()
 {
-       if (Profile->get_sae()) {
-               return;
-       }
-
        /* XXX this is superficially inefficient. Hide the selection in all
         * tracks, then show it in all selected tracks.
         *
@@ -1133,6 +1116,7 @@ Editor::sensitize_the_right_region_actions ()
        bool have_inactive_fade_out = false;
        bool have_active_fade_in = false;
        bool have_active_fade_out = false;
+       bool have_transients = false;
 
        for (list<RegionView*>::const_iterator i = rs.begin(); i != rs.end(); ++i) {
 
@@ -1188,6 +1172,10 @@ Editor::sensitize_the_right_region_actions ()
                        have_not_at_natural_position = true;
                }
 
+               if (r->has_transients ()){
+                       have_transients = true;
+               }
+
                if (ar) {
                        if (ar->envelope_active()) {
                                have_envelope_active = true;
@@ -1213,6 +1201,8 @@ Editor::sensitize_the_right_region_actions ()
                }
        }
 
+       _region_actions->get_action("split-region-at-transients")->set_sensitive (have_transients);
+
        if (rs.size() > 1) {
                _region_actions->get_action("show-region-list-editor")->set_sensitive (false);
                _region_actions->get_action("show-region-properties")->set_sensitive (false);
@@ -1275,7 +1265,8 @@ Editor::sensitize_the_right_region_actions ()
 
        } else {
 
-               _region_actions->get_action("analyze-region")->set_sensitive (false);
+               _region_actions->get_action("loudness-analyze-region")->set_sensitive (false);
+               _region_actions->get_action("spectral-analyze-region")->set_sensitive (false);
                _region_actions->get_action("reset-region-gain-envelopes")->set_sensitive (false);
                _region_actions->get_action("toggle-region-gain-envelope-active")->set_sensitive (false);
                _region_actions->get_action("pitch-shift-region")->set_sensitive (false);
@@ -1627,9 +1618,7 @@ Editor::set_selection_from_region ()
 
        selection->set (tvl);
 
-       if (!Profile->get_sae()) {
-               set_mouse_mode (Editing::MouseRange, false);
-       }
+       set_mouse_mode (Editing::MouseRange, false);
 }
 
 void
@@ -1662,9 +1651,7 @@ Editor::set_selection_from_range (Location& loc)
        selection->set (loc.start(), loc.end());
        commit_reversible_selection_op ();
 
-       if (!Profile->get_sae()) {
-               set_mouse_mode (Editing::MouseRange, false);
-       }
+       set_mouse_mode (Editing::MouseRange, false);
 }
 
 void