Rewrite iterations over sync-lock groups
This commit is contained in:
parent
bb3aa00f50
commit
b6a6b8e73e
|
@ -16,43 +16,25 @@
|
|||
// on, use the largest possible selection in the sync-lock group.
|
||||
// If it's a stereo track, do the same for the stereo channels.
|
||||
void SelectionState::SelectTrackLength
|
||||
( TrackList &tracks, ViewInfo &viewInfo, Track &track, bool syncLocked )
|
||||
( ViewInfo &viewInfo, Track &track, bool syncLocked )
|
||||
{
|
||||
SyncLockedTracksIterator it( &tracks );
|
||||
Track *t1 = it.StartWith( &track );
|
||||
double minOffset = track.GetOffset();
|
||||
double maxEnd = track.GetEndTime();
|
||||
|
||||
auto trackRange = syncLocked
|
||||
// If we have a sync-lock group and sync-lock linking is on,
|
||||
// check the sync-lock group tracks.
|
||||
if ( syncLocked && t1 != NULL )
|
||||
{
|
||||
for ( ; t1; t1 = it.Next())
|
||||
{
|
||||
if (t1->GetOffset() < minOffset)
|
||||
minOffset = t1->GetOffset();
|
||||
if (t1->GetEndTime() > maxEnd)
|
||||
maxEnd = t1->GetEndTime();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, check for a stereo pair
|
||||
t1 = track.GetLink();
|
||||
if (t1)
|
||||
{
|
||||
if (t1->GetOffset() < minOffset)
|
||||
minOffset = t1->GetOffset();
|
||||
if (t1->GetEndTime() > maxEnd)
|
||||
maxEnd = t1->GetEndTime();
|
||||
}
|
||||
}
|
||||
? TrackList::SyncLockGroup(&track)
|
||||
|
||||
// Otherwise, check for a stereo pair
|
||||
: TrackList::Channels(&track);
|
||||
|
||||
auto minOffset = trackRange.min( &Track::GetOffset );
|
||||
auto maxEnd = trackRange.max( &Track::GetEndTime );
|
||||
|
||||
// PRL: double click or click on track control.
|
||||
// should this select all frequencies too? I think not.
|
||||
viewInfo.selectedRegion.setTimes(minOffset, maxEnd);
|
||||
}
|
||||
|
||||
|
||||
void SelectionState::SelectTrack
|
||||
( Track &track, bool selected, bool updateLastPicked,
|
||||
MixerBoard *pMixerBoard )
|
||||
|
@ -175,7 +157,7 @@ void SelectionState::HandleListSelection
|
|||
else {
|
||||
SelectNone( tracks, pMixerBoard );
|
||||
SelectTrack( track, true, true, pMixerBoard );
|
||||
SelectTrackLength( tracks, viewInfo, track, syncLocked );
|
||||
SelectTrackLength( viewInfo, track, syncLocked );
|
||||
}
|
||||
|
||||
if (pMixerBoard)
|
||||
|
|
|
@ -21,7 +21,7 @@ class SelectionState
|
|||
{
|
||||
public:
|
||||
static void SelectTrackLength
|
||||
( TrackList &tracks, ViewInfo &viewInfo, Track &track, bool syncLocked );
|
||||
( ViewInfo &viewInfo, Track &track, bool syncLocked );
|
||||
|
||||
void SelectTrack
|
||||
( Track &track,
|
||||
|
|
|
@ -371,9 +371,9 @@ bool EffectTruncSilence::ProcessIndependently()
|
|||
// Treat tracks in the sync lock group only
|
||||
Track *groupFirst, *groupLast;
|
||||
if (syncLock) {
|
||||
SyncLockedTracksIterator syncIter(mOutputTracks.get());
|
||||
groupFirst = syncIter.StartWith(track);
|
||||
groupLast = syncIter.Last();
|
||||
auto trackRange = TrackList::SyncLockGroup(track);
|
||||
groupFirst = *trackRange.begin();
|
||||
groupLast = *trackRange.rbegin();
|
||||
}
|
||||
else {
|
||||
groupFirst = track;
|
||||
|
|
|
@ -818,8 +818,7 @@ bool NyquistEffect::Process()
|
|||
}
|
||||
|
||||
// Check whether we're in the same group as the last selected track
|
||||
SyncLockedTracksIterator gIter(mOutputTracks.get());
|
||||
Track *gt = gIter.StartWith(mCurTrack[0]);
|
||||
Track *gt = *TrackList::SyncLockGroup(mCurTrack[0]).first;
|
||||
mFirstInGroup = !gtLast || (gtLast != gt);
|
||||
gtLast = gt;
|
||||
|
||||
|
@ -1530,9 +1529,7 @@ bool NyquistEffect::ProcessOne()
|
|||
|
||||
// If we were first in the group adjust non-selected group tracks
|
||||
if (mFirstInGroup) {
|
||||
SyncLockedTracksIterator git(mOutputTracks.get());
|
||||
Track *t;
|
||||
for (t = git.StartWith(mCurTrack[i]); t; t = git.Next())
|
||||
for (auto t : TrackList::SyncLockGroup(mCurTrack[i]))
|
||||
{
|
||||
if (!t->GetSelected() && t->IsSyncLockSelected()) {
|
||||
t->SyncLockAdjust(mT1, mT0 + out->GetEndTime());
|
||||
|
|
|
@ -226,9 +226,8 @@ UIHandle::Result StretchHandle::Release
|
|||
bool right = mStretchState.mMode == stretchRight;
|
||||
ViewInfo &viewInfo = pProject->GetViewInfo();
|
||||
if ( pProject->IsSyncLocked() && ( left || right ) ) {
|
||||
SyncLockedTracksIterator syncIter( pProject->GetTracks() );
|
||||
for ( auto track = syncIter.StartWith( mpTrack.get() ); track != nullptr;
|
||||
track = syncIter.Next() ) {
|
||||
for ( auto track :
|
||||
TrackList::SyncLockGroup( mpTrack.get() ) ) {
|
||||
if ( track != mpTrack.get() ) {
|
||||
if ( left ) {
|
||||
auto origT0 = mStretchState.mOrigSel0Quantized;
|
||||
|
|
|
@ -566,7 +566,7 @@ UIHandle::Result SelectHandle::Click
|
|||
|
||||
// Default behavior: select whole track
|
||||
SelectionState::SelectTrackLength
|
||||
( *trackList, viewInfo, *pTrack, pProject->IsSyncLocked() );
|
||||
( viewInfo, *pTrack, pProject->IsSyncLocked() );
|
||||
|
||||
// Special case: if we're over a clip in a WaveTrack,
|
||||
// select just that clip
|
||||
|
|
|
@ -267,9 +267,7 @@ void TimeShiftHandle::CreateListOfCapturedClips
|
|||
// we can treat individual labels as clips)
|
||||
if ( trackClip.clip ) {
|
||||
// Iterate over sync-lock group tracks.
|
||||
SyncLockedTracksIterator git( &trackList );
|
||||
for (Track *t = git.StartWith( trackClip.track );
|
||||
t; t = git.Next() )
|
||||
for (auto t : TrackList::SyncLockGroup( trackClip.track ))
|
||||
AddClipsToCaptured(state, t,
|
||||
trackClip.clip->GetStartTime(),
|
||||
trackClip.clip->GetEndTime() );
|
||||
|
@ -278,8 +276,7 @@ void TimeShiftHandle::CreateListOfCapturedClips
|
|||
// Capture additional clips from NoteTracks
|
||||
trackClip.track->TypeSwitch( [&](NoteTrack *nt) {
|
||||
// Iterate over sync-lock group tracks.
|
||||
SyncLockedTracksIterator git( &trackList );
|
||||
for (Track *t = git.StartWith(nt); t; t = git.Next())
|
||||
for (auto t : TrackList::SyncLockGroup(nt))
|
||||
AddClipsToCaptured
|
||||
( state, t, nt->GetStartTime(), nt->GetEndTime() );
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue