1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-06 14:52:34 +02:00

Remove "skiplinked" argument of old track iterators

This commit is contained in:
Paul Licameli 2016-11-03 22:10:57 -04:00
parent d19695022a
commit 89748cbe3c
7 changed files with 79 additions and 137 deletions

View File

@ -3578,11 +3578,8 @@ void MenuCommandHandler::OnPrevTrack( AudacityProject &project, bool shift )
wxBell();
if( mCircularTrackNavigation )
{
TrackListIterator iter( tracks );
for( Track *d = iter.First(); d; d = iter.Next( true ) )
{
p = d;
}
auto range = tracks->Leaders();
p = * range.rbegin(); // null if range is empty
trackPanel->SetFocusedTrack( p ); // Wrap to the first track
trackPanel->EnsureVisible( p );
project.ModifyState(false);
@ -7206,13 +7203,11 @@ int MenuCommandHandler::FindClips
// first search the tracks individually
TrackListIterator iter(tracks);
Track* track = iter.First();
std::vector<FoundClip> results;
int nTracksSearched = 0;
int trackNum = 1;
while (track) {
for (auto track : tracks->Leaders()) {
if (track->GetKind() == Track::Wave && (!anyWaveTracksSelected || track->GetSelected())) {
auto waveTrack = static_cast<const WaveTrack*>(track);
bool stereoAndDiff = waveTrack->GetLinked() && !ChannelsHaveSameClipBoundaries(waveTrack);
@ -7239,7 +7234,6 @@ int MenuCommandHandler::FindClips
}
trackNum++;
track = iter.Next(true);
}
@ -8465,13 +8459,11 @@ int MenuCommandHandler::FindClipBoundaries
// first search the tracks individually
TrackListIterator iter(tracks);
Track* track = iter.First();
std::vector<FoundClipBoundary> results;
int nTracksSearched = 0;
int trackNum = 1;
while (track) {
for (auto track : tracks->Leaders()) {
if (track->GetKind() == Track::Wave && (!anyWaveTracksSelected || track->GetSelected())) {
auto waveTrack = static_cast<const WaveTrack*>(track);
bool stereoAndDiff = waveTrack->GetLinked() && !ChannelsHaveSameClipBoundaries(waveTrack);
@ -8498,7 +8490,6 @@ int MenuCommandHandler::FindClipBoundaries
}
trackNum++;
track = iter.Next(true);
}

View File

@ -980,42 +980,36 @@ void MixerBoard::UpdateTrackClusters()
const int nClusterHeight = mScrolledWindow->GetClientSize().GetHeight() - kDoubleInset;
size_t nClusterCount = mMixerTrackClusters.size();
unsigned int nClusterIndex = 0;
TrackListIterator iterTracks(mTracks);
MixerTrackCluster* pMixerTrackCluster = NULL;
Track* pTrack;
pTrack = iterTracks.First();
while (pTrack) {
if (auto pPlayableTrack = dynamic_cast<PlayableTrack*>(pTrack))
for (auto pPlayableTrack: mTracks->Leaders<PlayableTrack>()) {
auto spTrack = Track::Pointer<PlayableTrack>( pPlayableTrack );
if (nClusterIndex < nClusterCount)
{
auto spTrack = Track::Pointer<PlayableTrack>( pPlayableTrack );
if (nClusterIndex < nClusterCount)
{
// Already showing it.
// Track clusters are maintained in the same order as the WaveTracks.
// Track pointers can change for the "same" track for different states
// on the undo stack, so update the pointers and display name.
mMixerTrackClusters[nClusterIndex]->mTrack = spTrack;
// Assume linked track is wave or null
mMixerTrackClusters[nClusterIndex]->UpdateForStateChange();
}
else
{
// Not already showing it. Add a NEW MixerTrackCluster.
wxPoint clusterPos(
kInset + nClusterIndex * kMixerTrackClusterWidth,
kInset);
wxSize clusterSize(kMixerTrackClusterWidth, nClusterHeight);
pMixerTrackCluster =
safenew MixerTrackCluster(mScrolledWindow, this, mProject,
spTrack,
clusterPos, clusterSize);
if (pMixerTrackCluster)
mMixerTrackClusters.push_back(pMixerTrackCluster);
}
nClusterIndex++;
// Already showing it.
// Track clusters are maintained in the same order as the WaveTracks.
// Track pointers can change for the "same" track for different states
// on the undo stack, so update the pointers and display name.
mMixerTrackClusters[nClusterIndex]->mTrack = spTrack;
// Assume linked track is wave or null
mMixerTrackClusters[nClusterIndex]->UpdateForStateChange();
}
pTrack = iterTracks.Next(true);
else
{
// Not already showing it. Add a NEW MixerTrackCluster.
wxPoint clusterPos(
kInset + nClusterIndex * kMixerTrackClusterWidth,
kInset);
wxSize clusterSize(kMixerTrackClusterWidth, nClusterHeight);
pMixerTrackCluster =
safenew MixerTrackCluster(mScrolledWindow, this, mProject,
spTrack,
clusterPos, clusterSize);
if (pMixerTrackCluster)
mMixerTrackClusters.push_back(pMixerTrackCluster);
}
nClusterIndex++;
}
if (pMixerTrackCluster)

View File

@ -469,7 +469,7 @@ Track *TrackListIterator::First(TrackList * val)
return nullptr;
}
Track *TrackListIterator::Last(bool skiplinked)
Track *TrackListIterator::Last()
{
if (l == NULL) {
return NULL;
@ -479,20 +479,10 @@ Track *TrackListIterator::Last(bool skiplinked)
if ( l->isNull( cur ) )
return nullptr;
// With skiplinked set, we won't return the second channel of a linked pair
if (skiplinked) {
auto prev = l->getPrev( cur );
if ( !l->isNull( prev ) &&
!(*cur.first)->GetLinked() &&
(*cur.first)->GetLink()
)
cur = prev;
}
return cur.first->get();
}
Track *TrackListIterator::Next(bool skipLinked)
Track *TrackListIterator::Next()
{
#ifdef DEBUG_TLI // if we are debugging this bit
wxASSERT_MSG((!cur || (*l).Contains((*cur).t)), wxT("cur invalid at start of Next(). List changed since iterator created?")); // check that cur is in the list
@ -501,16 +491,7 @@ Track *TrackListIterator::Next(bool skipLinked)
if (!l || l->isNull(cur))
return nullptr;
if (skipLinked &&
(*cur.first)->GetLinked())
cur = l->getNext( cur );
#ifdef DEBUG_TLI // if we are debugging this bit
wxASSERT_MSG((!cur || (*l).Contains((*cur).t)), wxT("cur invalid after skipping linked tracks.")); // check that cur is in the list
#endif
if (!l->isNull(cur))
cur = l->getNext( cur );
cur = l->getNext( cur );
#ifdef DEBUG_TLI // if we are debugging this bit
wxASSERT_MSG((!cur || (*l).Contains((*cur).t)), wxT("cur invalid after moving to next track.")); // check that cur is in the list if it is not null
@ -522,7 +503,7 @@ Track *TrackListIterator::Next(bool skipLinked)
return nullptr;
}
Track *TrackListIterator::Prev(bool skiplinked)
Track *TrackListIterator::Prev()
{
if (!l || l->isNull(cur))
return nullptr;
@ -531,12 +512,6 @@ Track *TrackListIterator::Prev(bool skiplinked)
if ( l->isNull( cur ) )
return nullptr;
if ( skiplinked ) {
auto prev = l->getPrev( cur );
if( !l->isNull( prev ) && (*prev.first)->GetLinked() )
cur = prev;
}
return cur.first->get();
}
@ -601,9 +576,9 @@ Track *TrackListCondIterator::First(TrackList *val)
return t;
}
Track *TrackListCondIterator::Next(bool skiplinked)
Track *TrackListCondIterator::Next()
{
while (Track *t = TrackListIterator::Next(skiplinked)) {
while (Track *t = TrackListIterator::Next()) {
if (this->Condition(t)) {
return t;
}
@ -612,9 +587,9 @@ Track *TrackListCondIterator::Next(bool skiplinked)
return NULL;
}
Track *TrackListCondIterator::Prev(bool skiplinked)
Track *TrackListCondIterator::Prev()
{
while (Track *t = TrackListIterator::Prev(skiplinked))
while (Track *t = TrackListIterator::Prev())
{
if (this->Condition(t)) {
return t;
@ -624,12 +599,12 @@ Track *TrackListCondIterator::Prev(bool skiplinked)
return NULL;
}
Track *TrackListCondIterator::Last(bool skiplinked)
Track *TrackListCondIterator::Last()
{
Track *t = TrackListIterator::Last(skiplinked);
Track *t = TrackListIterator::Last();
while (t && !this->Condition(t)) {
t = TrackListIterator::Prev(skiplinked);
t = TrackListIterator::Prev();
}
return t;
@ -734,9 +709,9 @@ bool SyncLockedTracksIterator::IsGoodNextTrack(const Track *t) const
return true;
}
Track *SyncLockedTracksIterator::Next(bool skiplinked)
Track *SyncLockedTracksIterator::Next()
{
Track *t = TrackListIterator::Next(skiplinked);
Track *t = TrackListIterator::Next();
if (!t)
return nullptr;
@ -751,9 +726,9 @@ Track *SyncLockedTracksIterator::Next(bool skiplinked)
return t;
}
Track *SyncLockedTracksIterator::Prev(bool skiplinked)
Track *SyncLockedTracksIterator::Prev()
{
Track *t = TrackListIterator::Prev(skiplinked);
Track *t = TrackListIterator::Prev();
//
// Ways to end a sync-locked group in reverse
@ -781,17 +756,17 @@ Track *SyncLockedTracksIterator::Prev(bool skiplinked)
return t;
}
Track *SyncLockedTracksIterator::Last(bool skiplinked)
Track *SyncLockedTracksIterator::Last()
{
if ( !l || l->isNull( cur ) )
return nullptr;
Track *t = cur.first->get();
while (const auto next = l->GetNext(t, skiplinked)) {
while (const auto next = l->GetNext(t)) {
if ( ! IsGoodNextTrack(next) )
break;
t = Next(skiplinked);
t = Next();
}
return t;

View File

@ -1095,9 +1095,9 @@ class AUDACITY_DLL_API TrackListIterator /* not final */
// Iterate functions
virtual Track *First(TrackList * val = nullptr);
virtual Track *StartWith(Track * val);
virtual Track *Next(bool skiplinked = false);
virtual Track *Prev(bool skiplinked = false);
virtual Track *Last(bool skiplinked = false);
virtual Track *Next();
virtual Track *Prev();
virtual Track *Last();
Track *RemoveCurrent(); // deletes track, returns next
@ -1146,12 +1146,12 @@ public:
{ return mIter.First(const_cast<TrackList*>(val)); }
const Track *StartWith(const Track * val)
{ return mIter.StartWith(const_cast<Track*>(val)); }
const Track *Next(bool skiplinked = false)
{ return mIter.Next(skiplinked); }
const Track *Prev(bool skiplinked = false)
{ return mIter.Prev(skiplinked); }
const Track *Last(bool skiplinked = false)
{ return mIter.Last(skiplinked); }
const Track *Next()
{ return mIter.Next(); }
const Track *Prev()
{ return mIter.Prev(); }
const Track *Last()
{ return mIter.Last(); }
// Provide minimal STL forward-iterator idiom:
@ -1184,9 +1184,9 @@ class AUDACITY_DLL_API TrackListCondIterator /* not final */ : public TrackListI
// Iteration functions
Track *First(TrackList *val = NULL) override;
Track *StartWith(Track *val) override;
Track *Next(bool skiplinked = false) override;
Track *Prev(bool skiplinked = false) override;
Track *Last(bool skiplinked = false) override;
Track *Next() override;
Track *Prev() override;
Track *Last() override;
protected:
// NEW virtual
@ -1256,9 +1256,9 @@ class AUDACITY_DLL_API SyncLockedTracksIterator final : public TrackListIterator
// Iterate functions
Track *StartWith(Track *member) override;
Track *Next(bool skiplinked = false) override;
Track *Prev(bool skiplinked = false) override;
Track *Last(bool skiplinked = false) override;
Track *Next() override;
Track *Prev() override;
Track *Last() override;
private:
bool IsGoodNextTrack(const Track *t) const;

View File

@ -162,19 +162,15 @@ int TrackPanelAx::TrackNum( const std::shared_ptr<Track> &target )
{
// Find 1-based position of the target in the visible tracks, or 0 if not
// found
TrackListIterator iter( mTrackPanel->GetTracks() );
Track *t = iter.First();
int ndx = 0;
while( t != NULL )
for ( auto t : mTrackPanel->GetTracks()->Leaders() )
{
ndx++;
if( t == target.get() )
{
return ndx;
}
t = iter.Next( true );
}
return 0;
@ -182,22 +178,16 @@ int TrackPanelAx::TrackNum( const std::shared_ptr<Track> &target )
std::shared_ptr<Track> TrackPanelAx::FindTrack( int num )
{
TrackListIterator iter( mTrackPanel->GetTracks() );
Track *t = iter.First();
int ndx = 0;
while( t != NULL )
for ( auto t : mTrackPanel->GetTracks()->Leaders() )
{
ndx++;
if( ndx == num )
{
break;
}
t = iter.Next( true );
return Track::Pointer( t );
}
return Track::Pointer( t );
return {};
}
void TrackPanelAx::Updated()

View File

@ -334,10 +334,7 @@ bool EffectTruncSilence::ProcessIndependently()
// Check if it's permissible
{
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
for (Track *track = iter.First(); track;
track = iter.Next(true) // skip linked tracks
) {
for (auto track : inputTracks()->SelectedLeaders< WaveTrack >() ) {
if (syncLock) {
Track *const link = track->GetLink();
SyncLockedTracksIterator syncIter(inputTracks());
@ -367,12 +364,8 @@ bool EffectTruncSilence::ProcessIndependently()
{
unsigned iGroup = 0;
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
for (Track *track = iter.First(); track;
++iGroup, track = iter.Next(true) // skip linked tracks
) {
Track *const link = track->GetLink();
Track *const last = link ? link : track;
for (auto track : mOutputTracks->SelectedLeaders< WaveTrack >() ) {
Track *const last = *TrackList::Channels(track).rbegin();
RegionList silences;
@ -393,6 +386,8 @@ bool EffectTruncSilence::ProcessIndependently()
if (!DoRemoval(silences, iGroup, nGroups, groupFirst, groupLast, totalCutLen))
return false;
newT1 = std::max(newT1, mT1 - totalCutLen);
++iGroup;
}
}

View File

@ -153,26 +153,23 @@ namespace
WaveTrack *NthAudioTrack(TrackList &list, int nn)
{
if (nn >= 0) {
TrackListOfKindIterator iter(Track::Wave, &list);
Track *pTrack = iter.First();
while (pTrack && nn--)
pTrack = iter.Next(true);
return static_cast<WaveTrack*>(pTrack);
for ( auto pTrack : list.Leaders< WaveTrack >() )
if (nn -- == 0)
return pTrack;
}
return NULL;
}
// Don't count right channels.
int TrackPosition(TrackList &list, Track *pFindTrack)
int TrackPosition(TrackList &list, const Track *pFindTrack)
{
Track *const partner = pFindTrack->GetLink();
TrackListOfKindIterator iter(Track::Wave, &list);
pFindTrack = *list.FindLeader(pFindTrack);
int nn = 0;
for (Track *pTrack = iter.First(); pTrack; pTrack = iter.Next(true), ++nn) {
if (pTrack == pFindTrack ||
pTrack == partner)
for ( auto pTrack : list.Leaders< const WaveTrack >() ) {
if (pTrack == pFindTrack)
return nn;
++nn;
}
return -1;
}