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();
}
mLastSavedTracks->Clear(true);
mLastSavedTracks->Clear();
delete mLastSavedTracks;
mLastSavedTracks = NULL;
}
@ -2294,7 +2294,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
this);
// Delete all the tracks to free up memory and DirManager references.
mTracks->Clear(true);
mTracks->Clear();
delete mTracks;
mTracks = NULL;
@ -3539,7 +3539,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
}
if (mLastSavedTracks) {
mLastSavedTracks->Clear(true);
mLastSavedTracks->Clear();
delete mLastSavedTracks;
}
@ -3588,7 +3588,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
TrackListOfKindIterator iter(Track::Wave, mTracks);
unsigned int numWaveTracks = 0;
TrackList pSavedTrackList(true);
TrackList pSavedTrackList{};
for (pTrack = iter.First(); pTrack != NULL; pTrack = iter.Next())
{
numWaveTracks++;
@ -4061,7 +4061,7 @@ void AudacityProject::PopState(const UndoState &state)
TrackList *const tracks = state.tracks.get();
mTracks->Clear(true);
mTracks->Clear();
TrackListIterator iter(tracks);
Track *t = iter.First();
bool odUsed = false;
@ -4173,7 +4173,7 @@ TrackList *AudacityProject::GetClipboardTracks()
void AudacityProject::DeleteClipboard()
{
if (msClipboard) {
msClipboard->Clear( true );
msClipboard->Clear();
delete msClipboard;
msClipboard = NULL;
}
@ -4195,7 +4195,7 @@ void AudacityProject::ClearClipboard()
msClipT1 = 0.0;
msClipProject = NULL;
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_UPDATED);
TrackList::TrackList(bool destructorDeletesTracks)
TrackList::TrackList()
: wxEvtHandler()
, mDestructorDeletesTracks(destructorDeletesTracks)
{
}
@ -732,7 +731,7 @@ TrackList::TrackList(const TrackList &that)
TrackList& TrackList::operator= (const TrackList &that)
{
if (this != &that) {
this->Clear(mDestructorDeletesTracks);
this->Clear();
DoAssign(that);
}
return *this;
@ -746,7 +745,7 @@ TrackList::TrackList(TrackList &&that)
TrackList &TrackList::operator= (TrackList &&that)
{
if (this != &that) {
this->Clear(mDestructorDeletesTracks);
this->Clear();
Swap(that);
}
return *this;
@ -754,7 +753,6 @@ TrackList &TrackList::operator= (TrackList &&that)
void TrackList::DoAssign(const TrackList &that)
{
mDestructorDeletesTracks = true;
TrackListConstIterator it(&that);
for (const Track *track = it.First(); track; track = it.Next())
Add(track->Duplicate().release());
@ -767,12 +765,11 @@ void TrackList::Swap(TrackList &that)
(*it)->SetOwner(this, it);
for (auto it = that.begin(), last = that.end(); it != last; ++it)
(*it)->SetOwner(&that, it);
std::swap(mDestructorDeletesTracks, that.mDestructorDeletesTracks);
}
TrackList::~TrackList()
{
Clear(mDestructorDeletesTracks);
Clear();
}
void TrackList::RecalcPositions(TrackNodePointer node)
@ -923,12 +920,10 @@ TrackNodePointer TrackList::Remove(Track *t)
return result;
}
void TrackList::Clear(bool deleteTracks /* = false */)
void TrackList::Clear()
{
if (deleteTracks)
for (auto track : *this)
delete track;
for (auto track : *this)
delete track;
ListOfTracks::clear();
UpdatedEvent(end());
}

View File

@ -402,7 +402,7 @@ class AUDACITY_DLL_API TrackList final : public wxEvtHandler, public ListOfTrack
{
public:
// Create an empty TrackList
TrackList(bool destructorDeletesTracks = false);
TrackList();
// Allow copy -- a deep copy that duplicates all tracks
TrackList(const TrackList &that);
@ -438,7 +438,7 @@ class AUDACITY_DLL_API TrackList final : public wxEvtHandler, public ListOfTrack
TrackNodePointer Remove(Track *t);
/// 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. */
void Select(Track * t, bool selected = true);
@ -514,8 +514,6 @@ private:
void ResizedEvent(TrackNodePointer node);
void SwapNodes(TrackNodePointer s1, TrackNodePointer s2);
bool mDestructorDeletesTracks;
};
class AUDACITY_DLL_API TrackFactory

View File

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

View File

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

View File

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