Optimize automation-event process splitting
[ardour.git] / gtk2_ardour / editor_selection.cc
index 6ee5dc0f38382bfaba3745a4ac8dc8d2d9c6e121..227eaa4a63247da4d083976930b16885bdbd7850 100644 (file)
@@ -983,23 +983,6 @@ Editor::set_selected_regionview_from_map_event (GdkEventAny* /*ev*/, StreamView*
        return true;
 }
 
-struct SelectionOrderSorter {
-       bool operator() (TimeAxisView const * const a, TimeAxisView const * const b) const  {
-               boost::shared_ptr<Stripable> sa = a->stripable ();
-               boost::shared_ptr<Stripable> sb = b->stripable ();
-               if (!sa && !sb) {
-                       return a < b;
-               }
-               if (!sa) {
-                       return false;
-               }
-               if (!sb) {
-                       return true;
-               }
-               return sa->presentation_info().selection_cnt() < sb->presentation_info().selection_cnt();
-       }
-};
-
 void
 Editor::presentation_info_changed (PropertyChange const & what_changed)
 {
@@ -1158,11 +1141,10 @@ Editor::presentation_info_changed (PropertyChange const & what_changed)
 void
 Editor::track_selection_changed ()
 {
-cout << "resetting paste count" << endl;
        /* reset paste count, so the plaste location doesn't get incremented
-        * if we want to paste in the same place, but different track. */ 
+        * if we want to paste in the same place, but different track. */
        paste_count = 0;
-       
+
        if ( _session->solo_selection_active() )
                play_solo_selection(false);
 }
@@ -1589,8 +1571,20 @@ Editor::region_selection_changed ()
                }
        }
 
-       if ( _session->solo_selection_active() )
+       if (_session->solo_selection_active()) {
                play_solo_selection(false);
+       }
+
+       /* set nudge button color */
+       if (! get_regions_from_selection_and_entered().empty()) {
+               /* nudge regions */
+               nudge_forward_button.set_name ("nudge button");
+               nudge_backward_button.set_name ("nudge button");
+       } else {
+               /* nudge marker or playhead */
+               nudge_forward_button.set_name ("generic button");
+               nudge_backward_button.set_name ("generic button");
+       }
 }
 
 void
@@ -1714,7 +1708,6 @@ Editor::invert_selection_in_track ()
 void
 Editor::invert_selection ()
 {
-       list<Selectable *> touched;
 
        if (internal_editing()) {
                for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
@@ -1726,16 +1719,35 @@ Editor::invert_selection ()
                return;
        }
 
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
-               if ((*iter)->hidden()) {
-                       continue;
+       if (!selection->tracks.empty()) {
+
+               TrackViewList inverted;
+
+               for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+                       if (!(*iter)->selected()) {
+                               inverted.push_back (*iter);
+                       }
                }
-               (*iter)->get_inverted_selectables (*selection, touched);
-       }
 
-       begin_reversible_selection_op (X_("Invert Selection"));
-       selection->set (touched);
-       commit_reversible_selection_op ();
+               begin_reversible_selection_op (X_("Invert Track Selection"));
+               selection->set (inverted);
+               commit_reversible_selection_op ();
+
+       } else {
+
+               list<Selectable *> touched;
+
+               for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+                       if ((*iter)->hidden()) {
+                               continue;
+                       }
+                       (*iter)->get_inverted_selectables (*selection, touched);
+               }
+
+               begin_reversible_selection_op (X_("Invert ObjectSelection"));
+               selection->set (touched);
+               commit_reversible_selection_op ();
+       }
 }
 
 /** @param start Start time in session samples.