1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-24 00:18:07 +02:00

TrackList always deletes tracks on destruction or when cleared

This commit is contained in:
Paul Licameli 2016-03-13 10:34:44 -04:00
parent 824ff647f8
commit c5a70126eb
6 changed files with 22 additions and 29 deletions

View File

@ -2247,7 +2247,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
t = iter.Next(); t = iter.Next();
} }
mLastSavedTracks->Clear(true); mLastSavedTracks->Clear();
delete mLastSavedTracks; delete mLastSavedTracks;
mLastSavedTracks = NULL; mLastSavedTracks = NULL;
} }
@ -2294,7 +2294,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
this); this);
// Delete all the tracks to free up memory and DirManager references. // Delete all the tracks to free up memory and DirManager references.
mTracks->Clear(true); mTracks->Clear();
delete mTracks; delete mTracks;
mTracks = NULL; mTracks = NULL;
@ -3539,7 +3539,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
} }
if (mLastSavedTracks) { if (mLastSavedTracks) {
mLastSavedTracks->Clear(true); mLastSavedTracks->Clear();
delete mLastSavedTracks; delete mLastSavedTracks;
} }
@ -3588,7 +3588,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
TrackListOfKindIterator iter(Track::Wave, mTracks); TrackListOfKindIterator iter(Track::Wave, mTracks);
unsigned int numWaveTracks = 0; unsigned int numWaveTracks = 0;
TrackList pSavedTrackList(true); TrackList pSavedTrackList{};
for (pTrack = iter.First(); pTrack != NULL; pTrack = iter.Next()) for (pTrack = iter.First(); pTrack != NULL; pTrack = iter.Next())
{ {
numWaveTracks++; numWaveTracks++;
@ -4061,7 +4061,7 @@ void AudacityProject::PopState(const UndoState &state)
TrackList *const tracks = state.tracks.get(); TrackList *const tracks = state.tracks.get();
mTracks->Clear(true); mTracks->Clear();
TrackListIterator iter(tracks); TrackListIterator iter(tracks);
Track *t = iter.First(); Track *t = iter.First();
bool odUsed = false; bool odUsed = false;
@ -4173,7 +4173,7 @@ TrackList *AudacityProject::GetClipboardTracks()
void AudacityProject::DeleteClipboard() void AudacityProject::DeleteClipboard()
{ {
if (msClipboard) { if (msClipboard) {
msClipboard->Clear( true ); msClipboard->Clear();
delete msClipboard; delete msClipboard;
msClipboard = NULL; msClipboard = NULL;
} }
@ -4195,7 +4195,7 @@ void AudacityProject::ClearClipboard()
msClipT1 = 0.0; msClipT1 = 0.0;
msClipProject = NULL; msClipProject = NULL;
if (msClipboard) { if (msClipboard) {
msClipboard->Clear(true); msClipboard->Clear();
} }
} }

View File

@ -717,9 +717,8 @@ Track *SyncLockedTracksIterator::Last(bool skiplinked)
DEFINE_EVENT_TYPE(EVT_TRACKLIST_RESIZED); DEFINE_EVENT_TYPE(EVT_TRACKLIST_RESIZED);
DEFINE_EVENT_TYPE(EVT_TRACKLIST_UPDATED); DEFINE_EVENT_TYPE(EVT_TRACKLIST_UPDATED);
TrackList::TrackList(bool destructorDeletesTracks) TrackList::TrackList()
: wxEvtHandler() : wxEvtHandler()
, mDestructorDeletesTracks(destructorDeletesTracks)
{ {
} }
@ -732,7 +731,7 @@ TrackList::TrackList(const TrackList &that)
TrackList& TrackList::operator= (const TrackList &that) TrackList& TrackList::operator= (const TrackList &that)
{ {
if (this != &that) { if (this != &that) {
this->Clear(mDestructorDeletesTracks); this->Clear();
DoAssign(that); DoAssign(that);
} }
return *this; return *this;
@ -746,7 +745,7 @@ TrackList::TrackList(TrackList &&that)
TrackList &TrackList::operator= (TrackList &&that) TrackList &TrackList::operator= (TrackList &&that)
{ {
if (this != &that) { if (this != &that) {
this->Clear(mDestructorDeletesTracks); this->Clear();
Swap(that); Swap(that);
} }
return *this; return *this;
@ -754,7 +753,6 @@ TrackList &TrackList::operator= (TrackList &&that)
void TrackList::DoAssign(const TrackList &that) void TrackList::DoAssign(const TrackList &that)
{ {
mDestructorDeletesTracks = true;
TrackListConstIterator it(&that); TrackListConstIterator it(&that);
for (const Track *track = it.First(); track; track = it.Next()) for (const Track *track = it.First(); track; track = it.Next())
Add(track->Duplicate().release()); Add(track->Duplicate().release());
@ -767,12 +765,11 @@ void TrackList::Swap(TrackList &that)
(*it)->SetOwner(this, it); (*it)->SetOwner(this, it);
for (auto it = that.begin(), last = that.end(); it != last; ++it) for (auto it = that.begin(), last = that.end(); it != last; ++it)
(*it)->SetOwner(&that, it); (*it)->SetOwner(&that, it);
std::swap(mDestructorDeletesTracks, that.mDestructorDeletesTracks);
} }
TrackList::~TrackList() TrackList::~TrackList()
{ {
Clear(mDestructorDeletesTracks); Clear();
} }
void TrackList::RecalcPositions(TrackNodePointer node) void TrackList::RecalcPositions(TrackNodePointer node)
@ -923,12 +920,10 @@ TrackNodePointer TrackList::Remove(Track *t)
return result; return result;
} }
void TrackList::Clear(bool deleteTracks /* = false */) void TrackList::Clear()
{ {
if (deleteTracks) for (auto track : *this)
for (auto track : *this) delete track;
delete track;
ListOfTracks::clear(); ListOfTracks::clear();
UpdatedEvent(end()); UpdatedEvent(end());
} }

View File

@ -402,7 +402,7 @@ class AUDACITY_DLL_API TrackList final : public wxEvtHandler, public ListOfTrack
{ {
public: public:
// Create an empty TrackList // Create an empty TrackList
TrackList(bool destructorDeletesTracks = false); TrackList();
// Allow copy -- a deep copy that duplicates all tracks // Allow copy -- a deep copy that duplicates all tracks
TrackList(const TrackList &that); TrackList(const TrackList &that);
@ -438,7 +438,7 @@ class AUDACITY_DLL_API TrackList final : public wxEvtHandler, public ListOfTrack
TrackNodePointer Remove(Track *t); TrackNodePointer Remove(Track *t);
/// Make the list empty /// Make the list empty
void Clear(bool deleteTracks = false); void Clear();
/** Select a track, and if it is linked to another track, select it, too. */ /** Select a track, and if it is linked to another track, select it, too. */
void Select(Track * t, bool selected = true); void Select(Track * t, bool selected = true);
@ -514,8 +514,6 @@ private:
void ResizedEvent(TrackNodePointer node); void ResizedEvent(TrackNodePointer node);
void SwapNodes(TrackNodePointer s1, TrackNodePointer s2); void SwapNodes(TrackNodePointer s1, TrackNodePointer s2);
bool mDestructorDeletesTracks;
}; };
class AUDACITY_DLL_API TrackFactory class AUDACITY_DLL_API TrackFactory

View File

@ -210,7 +210,7 @@ void UndoManager::ModifyState(const TrackList * l,
stack[current]->state.tracks.reset(); stack[current]->state.tracks.reset();
// Duplicate // Duplicate
auto tracksCopy = std::make_unique<TrackList>(true); auto tracksCopy = std::make_unique<TrackList>();
TrackListConstIterator iter(l); TrackListConstIterator iter(l);
const Track *t = iter.First(); const Track *t = iter.First();
while (t) { while (t) {
@ -255,7 +255,7 @@ void UndoManager::PushState(const TrackList * l,
RemoveStateAt(i); RemoveStateAt(i);
} }
auto tracksCopy = std::make_unique<TrackList>(true); auto tracksCopy = std::make_unique<TrackList>();
TrackListConstIterator iter(l); TrackListConstIterator iter(l);
const Track *t = iter.First(); const Track *t = iter.First();
while (t) { while (t) {

View File

@ -2091,7 +2091,7 @@ void Effect::CopyInputTracks(int trackType)
mIMap.Clear(); mIMap.Clear();
mOMap.Clear(); mOMap.Clear();
mOutputTracks = new TrackList(true); mOutputTracks = new TrackList();
mOutputTracksType = trackType; mOutputTracksType = trackType;
//iterate over tracks of type trackType (All types if Track::All) //iterate over tracks of type trackType (All types if Track::All)
@ -2212,7 +2212,7 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult)
if (!bGoodResult) { if (!bGoodResult) {
// Processing failed or was cancelled so throw away the processed tracks. // Processing failed or was cancelled so throw away the processed tracks.
mOutputTracks->Clear(true); // true => DELETE the tracks mOutputTracks->Clear();
// Reset map // Reset map
mIMap.Clear(); mIMap.Clear();
@ -2677,7 +2677,7 @@ void Effect::Preview(bool dryOnly)
delete mOutputTracks; delete mOutputTracks;
mOutputTracks = NULL; mOutputTracks = NULL;
mTracks->Clear(true); // true => DELETE the tracks mTracks->Clear();
delete mTracks; delete mTracks;
mTracks = saveTracks; mTracks = saveTracks;

View File

@ -1116,7 +1116,7 @@ void ControlToolBar::ClearCutPreviewTracks()
{ {
if (mCutPreviewTracks) if (mCutPreviewTracks)
{ {
mCutPreviewTracks->Clear(true); /* DELETE track contents too */ mCutPreviewTracks->Clear(); /* DELETE track contents too */
delete mCutPreviewTracks; delete mCutPreviewTracks;
mCutPreviewTracks = NULL; mCutPreviewTracks = NULL;
} }