TrackList always deletes tracks on destruction or when cleared
This commit is contained in:
parent
824ff647f8
commit
c5a70126eb
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user