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:
parent
d19695022a
commit
89748cbe3c
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
30
src/Track.h
30
src/Track.h
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user