mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 08:14:58 +01:00
Patch from colinf to avoid splitting unselected regions
on the same track as a selected region; also make no selection = all tracks button work (#4831). git-svn-id: svn://localhost/ardour2/branches/3.0@12459 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
bdfd71602f
commit
d33c0d96fb
1 changed files with 35 additions and 18 deletions
|
|
@ -4526,16 +4526,15 @@ Editor::get_regions_from_selection ()
|
||||||
* the edit point is `mouse' and the mouse is over an unselected
|
* the edit point is `mouse' and the mouse is over an unselected
|
||||||
* region. In this case, start with just that region.
|
* region. In this case, start with just that region.
|
||||||
*
|
*
|
||||||
* Then, make an initial track list of the tracks that these
|
* Then, add equivalent regions in active edit groups to the region list.
|
||||||
* regions are on, and if the edit point is not `mouse', add the
|
|
||||||
* selected tracks.
|
|
||||||
*
|
*
|
||||||
* Look at this track list and add any other tracks that are on the
|
* Then, search the list of selected tracks to find any selected tracks which
|
||||||
* same active edit-enabled route group as one of the initial tracks.
|
* do not contain regions already in the region list. If there are no selected
|
||||||
|
* tracks and 'No Selection = All Tracks' is active, search all tracks rather
|
||||||
|
* than just the selected.
|
||||||
*
|
*
|
||||||
* Finally take the initial region list and add any regions that are
|
* Add any regions that are under the edit point on these tracks to get the
|
||||||
* under the edit point on one of the tracks on the track list to get
|
* returned region list.
|
||||||
* the returned region list.
|
|
||||||
*
|
*
|
||||||
* The rationale here is that the mouse edit point is special in that
|
* The rationale here is that the mouse edit point is special in that
|
||||||
* its position describes both a time and a track; the other edit
|
* its position describes both a time and a track; the other edit
|
||||||
|
|
@ -4563,22 +4562,40 @@ Editor::get_regions_from_selection_and_edit_point ()
|
||||||
tracks = selection->tracks;
|
tracks = selection->tracks;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add any other tracks that have regions that are in the same
|
/* Add any other regions that are in the same
|
||||||
edit-activated route group as one of our regions.
|
edit-activated route group as one of our regions.
|
||||||
*/
|
*/
|
||||||
for (RegionSelection::iterator i = regions.begin (); i != regions.end(); ++i) {
|
regions = get_equivalent_regions (regions, ARDOUR::Properties::edit.property_id);
|
||||||
|
framepos_t const where = get_preferred_edit_position ();
|
||||||
|
|
||||||
RouteGroup* g = (*i)->get_time_axis_view().route_group ();
|
if (_route_groups->all_group_active_button().get_active() && tracks.empty()) {
|
||||||
|
/* tracks is empty (no track selected), and 'No Selection = All Tracks'
|
||||||
if (g && g->is_active() && g->is_edit()) {
|
* is enabled, so consider all tracks
|
||||||
tracks.add (axis_views_from_routes (g->route_list()));
|
*/
|
||||||
}
|
tracks = track_views;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tracks.empty()) {
|
if (!tracks.empty()) {
|
||||||
/* now find regions that are at the edit position on those tracks */
|
/* now search the selected tracks for tracks which don't
|
||||||
framepos_t const where = get_preferred_edit_position ();
|
already contain regions to be acted upon, and get regions at
|
||||||
get_regions_at (regions, where, tracks);
|
the edit point on those tracks too.
|
||||||
|
*/
|
||||||
|
TrackViewList tracks_without_relevant_regions;
|
||||||
|
|
||||||
|
for (TrackViewList::iterator t = tracks.begin (); t != tracks.end (); ++t) {
|
||||||
|
if (!regions.involves (**t)) {
|
||||||
|
/* there are no equivalent regions on this track */
|
||||||
|
tracks_without_relevant_regions.push_back (*t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tracks_without_relevant_regions.empty()) {
|
||||||
|
/* there are some selected tracks with neither selected
|
||||||
|
* regions or their equivalents: act upon all regions in
|
||||||
|
* those tracks
|
||||||
|
*/
|
||||||
|
get_regions_at (regions, where, tracks_without_relevant_regions);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return regions;
|
return regions;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue