X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_selection.cc;h=227eaa4a63247da4d083976930b16885bdbd7850;hb=6b1b72a247bf04c81292fc41af4f69c9b7f90379;hp=95cba60704ed00e6a8859b4ef2f1d2cf8874947b;hpb=f54f270627fcd141f5dd7d2b31e3e21cca468462;p=ardour.git diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 95cba60704..227eaa4a63 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -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 sa = a->stripable (); - boost::shared_ptr 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,6 +1141,10 @@ Editor::presentation_info_changed (PropertyChange const & what_changed) void Editor::track_selection_changed () { + /* reset paste count, so the plaste location doesn't get incremented + * if we want to paste in the same place, but different track. */ + paste_count = 0; + if ( _session->solo_selection_active() ) play_solo_selection(false); } @@ -1584,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 @@ -1709,7 +1708,6 @@ Editor::invert_selection_in_track () void Editor::invert_selection () { - list touched; if (internal_editing()) { for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { @@ -1721,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 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.