1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-03 00:59:43 +02:00

TrackList::Remove and TrackListIterator::RemoveCurrent always delete the track

This commit is contained in:
Paul Licameli 2016-03-01 16:28:59 -05:00
parent 4edc960acd
commit bc5519a0e2
7 changed files with 13 additions and 19 deletions

View File

@ -3375,7 +3375,6 @@ bool AudacityProject::OnEffect(const PluginID & ID, int flags)
if (!success) {
if (newTrack) {
mTracks->Remove(newTrack);
delete newTrack;
mTrackPanel->Refresh(false);
}
@ -5635,7 +5634,7 @@ void AudacityProject::HandleMixAndRender(bool toNewTrack)
selectedCount++;
if (!toNewTrack) {
t = iter.RemoveCurrent(true);
t = iter.RemoveCurrent();
} else {
t = iter.Next();
};
@ -6485,7 +6484,7 @@ void AudacityProject::OnRemoveTracks()
mMixerBoard->RemoveTrackCluster((WaveTrack*)t);
if (!f)
f = l; // Capture the track preceeding the first removed track
t = iter.RemoveCurrent(true);
t = iter.RemoveCurrent();
}
else {
l = t;

View File

@ -5019,9 +5019,9 @@ void AudacityProject::RemoveTrack(Track * toRemove)
pMixerBoard->RemoveTrackCluster((WaveTrack*)toRemove); // Will remove partner shown in same cluster.
}
mTracks->Remove(toRemove, true);
mTracks->Remove(toRemove);
if (partner) {
mTracks->Remove(partner, true);
mTracks->Remove(partner);
}
if (mTracks->IsEmpty()) {

View File

@ -465,12 +465,12 @@ Track *TrackListIterator::Prev(bool skiplinked)
return *cur;
}
Track *TrackListIterator::RemoveCurrent(bool deletetrack)
Track *TrackListIterator::RemoveCurrent()
{
if (!l || l->isNull(cur))
return nullptr;
cur = l->Remove(*cur, deletetrack);
cur = l->Remove(*cur);
#ifdef DEBUG_TLI // if we are debugging this bit
wxASSERT_MSG((!cur || (*l).Contains((*cur).t)), wxT("cur invalid after deletion of track.")); // check that cur is in the list
@ -902,16 +902,13 @@ void TrackList::Replace(Track * t, Track * with, bool deletetrack)
}
}
TrackNodePointer TrackList::Remove(Track *t, bool deletetrack)
TrackNodePointer TrackList::Remove(Track *t)
{
TrackNodePointer result(end());
if (t) {
auto node = t->GetNode();
if (deletetrack)
delete t;
else
t->SetOwner(NULL, TrackNodePointer{});
delete t;
if (!isNull(node)) {
result = erase(node);

View File

@ -257,7 +257,7 @@ class AUDACITY_DLL_API TrackListIterator /* not final */
virtual Track *Prev(bool skiplinked = false);
virtual Track *Last(bool skiplinked = false);
Track *RemoveCurrent(bool deletetrack = false); // returns next
Track *RemoveCurrent(); // returns next
protected:
friend TrackList;
@ -435,7 +435,7 @@ class AUDACITY_DLL_API TrackList final : public wxEvtHandler, public ListOfTrack
/// Remove this Track or all children of this TrackList.
/// Return an iterator to what followed the removed track.
TrackNodePointer Remove(Track *t, bool deletetrack = false);
TrackNodePointer Remove(Track *t);
/// Make the list empty
void Clear(bool deleteTracks = false);

View File

@ -2145,7 +2145,7 @@ Effect::AddedAnalysisTrack::~AddedAnalysisTrack()
{
if (mpEffect) {
// not committed -- DELETE the label track
mpEffect->mTracks->Remove(mpTrack, true);
mpEffect->mTracks->Remove(mpTrack);
}
}
@ -2234,7 +2234,7 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult)
while (i < cnt && mOMap[i] != o) {
Track *t = (Track *) mIMap[i];
if (t) {
mTracks->Remove(t, true);
mTracks->Remove(t);
}
i++;
}
@ -2273,7 +2273,7 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult)
while (i < cnt) {
Track *t = (Track *) mIMap[i];
if (t) {
mTracks->Remove((Track *)mIMap[i], true);
mTracks->Remove((Track *)mIMap[i]);
}
i++;
}

View File

@ -167,7 +167,6 @@ bool EffectStereoToMono::ProcessOne(int count)
mRightTrack->SetLinked(false);
mLeftTrack->SetChannel(Track::MonoChannel);
mOutputTracks->Remove(mRightTrack);
delete mRightTrack;
delete [] leftBuffer;
delete [] rightBuffer;

View File

@ -1011,7 +1011,6 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
// msmeyer: Delete recently added tracks if opening stream fails
for (unsigned int i = 0; i < newRecordingTracks.size(); i++) {
trackList->Remove(newRecordingTracks[i]);
delete newRecordingTracks[i];
}
}