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

Remove some naked new amd delete in: Project

This commit is contained in:
Paul Licameli 2016-08-02 22:08:13 -04:00
parent 60260520dc
commit cfd7648fce
3 changed files with 105 additions and 120 deletions

View File

@ -1695,7 +1695,7 @@ CommandFlag AudacityProject::GetUpdateFlags()
if (!mViewInfo.selectedRegion.isPoint()) if (!mViewInfo.selectedRegion.isPoint())
flags |= TimeSelectedFlag; flags |= TimeSelectedFlag;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
flags |= TracksExistFlag; flags |= TracksExistFlag;
@ -3336,7 +3336,7 @@ double AudacityProject::NearestZeroCrossing(double t0)
for(i=0; i<windowSize; i++) for(i=0; i<windowSize; i++)
dist[i] = 0.0; dist[i] = 0.0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *track = iter.First(); Track *track = iter.First();
while (track) { while (track) {
if (!track->GetSelected() || track->GetKind() != (Track::Wave)) { if (!track->GetSelected() || track->GetKind() != (Track::Wave)) {
@ -3447,7 +3447,7 @@ bool AudacityProject::OnEffect(const PluginID & ID, int flags)
wxGetApp().SetMissingAliasedFileWarningShouldShow(true); wxGetApp().SetMissingAliasedFileWarningShouldShow(true);
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
WaveTrack *newTrack{}; WaveTrack *newTrack{};
wxWindow *focus = wxWindow::FindFocus(); wxWindow *focus = wxWindow::FindFocus();
@ -3475,7 +3475,7 @@ bool AudacityProject::OnEffect(const PluginID & ID, int flags)
EffectManager & em = EffectManager::Get(); EffectManager & em = EffectManager::Get();
bool success = em.DoEffect(ID, this, mRate, bool success = em.DoEffect(ID, this, mRate,
mTracks, mTrackFactory, GetTracks(), GetTrackFactory(),
&mViewInfo.selectedRegion, &mViewInfo.selectedRegion,
(flags & OnEffectFlags::kConfigured) == 0); (flags & OnEffectFlags::kConfigured) == 0);
@ -3647,7 +3647,7 @@ void AudacityProject::OnExportLabels()
Track *t; Track *t;
int numLabelTracks = 0; int numLabelTracks = 0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
wxString fName = _("labels.txt"); wxString fName = _("labels.txt");
t = iter.First(); t = iter.First();
@ -3715,7 +3715,7 @@ void AudacityProject::OnExportLabels()
#ifdef USE_MIDI #ifdef USE_MIDI
void AudacityProject::OnExportMIDI(){ void AudacityProject::OnExportMIDI(){
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
int numNoteTracksSelected = 0; int numNoteTracksSelected = 0;
NoteTrack *nt = NULL; NoteTrack *nt = NULL;
@ -3860,7 +3860,7 @@ void AudacityProject::OnPageSetup()
void AudacityProject::OnPrint() void AudacityProject::OnPrint()
{ {
HandlePrint(this, GetName(), mTracks); HandlePrint(this, GetName(), GetTracks());
} }
// //
@ -3928,7 +3928,7 @@ void AudacityProject::OnRedo()
void AudacityProject::OnCut() void AudacityProject::OnCut()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
// This doesn't handle cutting labels, it handles // This doesn't handle cutting labels, it handles
@ -4016,7 +4016,7 @@ void AudacityProject::OnCut()
void AudacityProject::OnSplitCut() void AudacityProject::OnSplitCut()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
ClearClipboard(); ClearClipboard();
@ -4059,7 +4059,7 @@ void AudacityProject::OnSplitCut()
void AudacityProject::OnCopy() void AudacityProject::OnCopy()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
@ -4113,7 +4113,7 @@ void AudacityProject::OnPaste()
double t0 = mViewInfo.selectedRegion.t0(); double t0 = mViewInfo.selectedRegion.t0();
double t1 = mViewInfo.selectedRegion.t1(); double t1 = mViewInfo.selectedRegion.t1();
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
TrackListIterator clipIter(msClipboard.get()); TrackListIterator clipIter(msClipboard.get());
Track *n = iter.First(); Track *n = iter.First();
@ -4308,7 +4308,7 @@ void AudacityProject::OnPaste()
// (This was formerly the first part of overly-long OnPaste.) // (This was formerly the first part of overly-long OnPaste.)
bool AudacityProject::HandlePasteText() bool AudacityProject::HandlePasteText()
{ {
TrackListOfKindIterator iterLabelTrack(Track::Label, mTracks); TrackListOfKindIterator iterLabelTrack(Track::Label, GetTracks());
LabelTrack* pLabelTrack = (LabelTrack*)(iterLabelTrack.First()); LabelTrack* pLabelTrack = (LabelTrack*)(iterLabelTrack.First());
while (pLabelTrack) while (pLabelTrack)
{ {
@ -4344,7 +4344,7 @@ bool AudacityProject::HandlePasteNothingSelected()
{ {
// First check whether anything's selected. // First check whether anything's selected.
bool bAnySelected = false; bool bAnySelected = false;
TrackListIterator iterTrack(mTracks); TrackListIterator iterTrack(GetTracks());
Track* pTrack = iterTrack.First(); Track* pTrack = iterTrack.First();
while (pTrack) { while (pTrack) {
if (pTrack->GetSelected()) if (pTrack->GetSelected())
@ -4442,13 +4442,13 @@ void AudacityProject::OnPasteNewLabel()
{ {
bool bPastedSomething = false; bool bPastedSomething = false;
SelectedTrackListOfKindIterator iter(Track::Label, mTracks); SelectedTrackListOfKindIterator iter(Track::Label, GetTracks());
Track *t = iter.First(); Track *t = iter.First();
if (!t) if (!t)
{ {
// If there are no selected label tracks, try to choose the first label // If there are no selected label tracks, try to choose the first label
// track after some other selected track // track after some other selected track
TrackListIterator iter1(mTracks); TrackListIterator iter1(GetTracks());
for (Track *t1 = iter1.First(); t1; t1 = iter1.Next()) { for (Track *t1 = iter1.First(); t1; t1 = iter1.Next()) {
if (t1->GetSelected()) { if (t1->GetSelected()) {
// Look for a label track // Look for a label track
@ -4525,7 +4525,7 @@ void AudacityProject::OnTrim()
if (mViewInfo.selectedRegion.isPoint()) if (mViewInfo.selectedRegion.isPoint())
return; return;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
while (n) { while (n) {
@ -4566,7 +4566,7 @@ void AudacityProject::OnDelete()
void AudacityProject::OnSplitDelete() void AudacityProject::OnSplitDelete()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
@ -4595,7 +4595,7 @@ void AudacityProject::OnSplitDelete()
void AudacityProject::OnDisjoin() void AudacityProject::OnDisjoin()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
@ -4620,7 +4620,7 @@ void AudacityProject::OnDisjoin()
void AudacityProject::OnJoin() void AudacityProject::OnJoin()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
@ -4645,7 +4645,7 @@ void AudacityProject::OnJoin()
void AudacityProject::OnSilence() void AudacityProject::OnSilence()
{ {
SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); SelectedTrackListOfKindIterator iter(Track::Wave, GetTracks());
for (Track *n = iter.First(); n; n = iter.Next()) for (Track *n = iter.First(); n; n = iter.Next())
n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1()); n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1());
@ -4661,7 +4661,7 @@ void AudacityProject::OnSilence()
void AudacityProject::OnDuplicate() void AudacityProject::OnDuplicate()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *l = iter.Last(); Track *l = iter.Last();
Track *n = iter.First(); Track *n = iter.First();
@ -4849,7 +4849,7 @@ void AudacityProject::OnDisjoinLabels()
void AudacityProject::OnSplit() void AudacityProject::OnSplit()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
double sel0 = mViewInfo.selectedRegion.t0(); double sel0 = mViewInfo.selectedRegion.t0();
double sel1 = mViewInfo.selectedRegion.t1(); double sel1 = mViewInfo.selectedRegion.t1();
@ -4922,7 +4922,7 @@ void AudacityProject::OnSplit()
void AudacityProject::OnSplitNew() void AudacityProject::OnSplitNew()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *l = iter.Last(); Track *l = iter.Last();
for (Track *n = iter.First(); n; n = iter.Next()) { for (Track *n = iter.First(); n; n = iter.Next()) {
@ -4967,7 +4967,7 @@ void AudacityProject::OnSplitNew()
void AudacityProject::OnSelectAll() void AudacityProject::OnSelectAll()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
@ -5003,7 +5003,7 @@ void AudacityProject::DoNextPeakFrequency(bool up)
{ {
// Find the first selected wave track that is in a spectrogram view. // Find the first selected wave track that is in a spectrogram view.
WaveTrack *pTrack = 0; WaveTrack *pTrack = 0;
SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); SelectedTrackListOfKindIterator iter(Track::Wave, GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) { for (Track *t = iter.First(); t; t = iter.Next()) {
WaveTrack *const wt = static_cast<WaveTrack*>(t); WaveTrack *const wt = static_cast<WaveTrack*>(t);
const int display = wt->GetDisplay(); const int display = wt->GetDisplay();
@ -5036,7 +5036,7 @@ void AudacityProject::OnSelectCursorEnd()
{ {
double maxEndOffset = -1000000.0; double maxEndOffset = -1000000.0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
@ -5059,7 +5059,7 @@ void AudacityProject::OnSelectStartCursor()
{ {
double minOffset = 1000000.0; double minOffset = 1000000.0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
@ -5081,7 +5081,7 @@ void AudacityProject::OnSelectStartCursor()
void AudacityProject::OnSelectSyncLockSel() void AudacityProject::OnSelectSyncLockSel()
{ {
bool selected = false; bool selected = false;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) for (Track *t = iter.First(); t; t = iter.Next())
{ {
if (t->IsSyncLockSelected()) { if (t->IsSyncLockSelected()) {
@ -5100,7 +5100,7 @@ void AudacityProject::OnSelectSyncLockSel()
void AudacityProject::OnSelectAllTracks() void AudacityProject::OnSelectAllTracks()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) { for (Track *t = iter.First(); t; t = iter.Next()) {
t->SetSelected(true); t->SetSelected(true);
} }
@ -5277,7 +5277,7 @@ void AudacityProject::DoZoomFitV()
height -= 28; height -= 28;
count = 0; count = 0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
if ((t->GetKind() == Track::Wave) && if ((t->GetKind() == Track::Wave) &&
@ -5297,7 +5297,7 @@ void AudacityProject::DoZoomFitV()
if (height < 40) if (height < 40)
height = 40; height = 40;
TrackListIterator iter2(mTracks); TrackListIterator iter2(GetTracks());
t = iter2.First(); t = iter2.First();
while (t) { while (t) {
if ((t->GetKind() == Track::Wave) && if ((t->GetKind() == Track::Wave) &&
@ -5671,7 +5671,7 @@ void AudacityProject::OnImportRaw()
TrackHolders newTracks; TrackHolders newTracks;
::ImportRaw(this, fileName, mTrackFactory, newTracks); ::ImportRaw(this, fileName, GetTrackFactory(), newTracks);
if (newTracks.size() <= 0) if (newTracks.size() <= 0)
return; return;
@ -5709,12 +5709,12 @@ void AudacityProject::HandleMixAndRender(bool toNewTrack)
wxGetApp().SetMissingAliasedFileWarningShouldShow(true); wxGetApp().SetMissingAliasedFileWarningShouldShow(true);
WaveTrack::Holder uNewLeft, uNewRight; WaveTrack::Holder uNewLeft, uNewRight;
MixAndRender(mTracks, mTrackFactory, mRate, mDefaultFormat, 0.0, 0.0, uNewLeft, uNewRight); MixAndRender(GetTracks(), GetTrackFactory(), mRate, mDefaultFormat, 0.0, 0.0, uNewLeft, uNewRight);
if (uNewLeft) { if (uNewLeft) {
// Remove originals, get stats on what tracks were mixed // Remove originals, get stats on what tracks were mixed
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
int selectedCount = 0; int selectedCount = 0;
wxString firstName; wxString firstName;
@ -5811,7 +5811,7 @@ void AudacityProject::OnCursorTrackStart()
{ {
double minOffset = 1000000.0; double minOffset = 1000000.0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
@ -5835,7 +5835,7 @@ void AudacityProject::OnCursorTrackEnd()
double maxEndOffset = -1000000.0; double maxEndOffset = -1000000.0;
double thisEndOffset = 0.0; double thisEndOffset = 0.0;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
@ -5872,7 +5872,7 @@ void AudacityProject::OnCursorSelEnd()
void AudacityProject::HandleAlign(int index, bool moveSel) void AudacityProject::HandleAlign(int index, bool moveSel)
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
wxString action; wxString action;
wxString shortAction; wxString shortAction;
double offset; double offset;
@ -5966,7 +5966,7 @@ void AudacityProject::HandleAlign(int index, bool moveSel)
} }
if ((unsigned)index >= mAlignLabelsCount) { // This is an alignLabelsNoSync command. if ((unsigned)index >= mAlignLabelsCount) { // This is an alignLabelsNoSync command.
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
double leftChannelStart = 0.0; double leftChannelStart = 0.0;
double leftChannelEnd = 0.0; double leftChannelEnd = 0.0;
@ -6023,7 +6023,7 @@ void AudacityProject::HandleAlign(int index, bool moveSel)
} }
if (delta != 0.0) { if (delta != 0.0) {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
@ -6502,7 +6502,7 @@ int AudacityProject::DoAddLabel(const SelectedRegion &region, bool preserveFocus
// Otherwise look for a label track after the focused track // Otherwise look for a label track after the focused track
if (!lt) { if (!lt) {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
if (t) if (t)
iter.StartWith(t); iter.StartWith(t);
else else
@ -6589,7 +6589,7 @@ void AudacityProject::DoEditLabels(LabelTrack *lt, int index)
wxString format = GetSelectionFormat(), wxString format = GetSelectionFormat(),
freqFormat = GetFrequencySelectionFormatName(); freqFormat = GetFrequencySelectionFormatName();
LabelDialog dlg(this, *GetTrackFactory(), mTracks, LabelDialog dlg(this, *GetTrackFactory(), GetTracks(),
lt, index, lt, index,
mViewInfo, mRate, mViewInfo, mRate,
format, freqFormat); format, freqFormat);
@ -6620,7 +6620,7 @@ void AudacityProject::OnEditChains()
void AudacityProject::OnRemoveTracks() void AudacityProject::OnRemoveTracks()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
Track *f = NULL; Track *f = NULL;
Track *l = NULL; Track *l = NULL;
@ -6781,7 +6781,7 @@ void AudacityProject::OnSeparator()
void AudacityProject::OnCollapseAllTracks() void AudacityProject::OnCollapseAllTracks()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) while (t)
@ -6796,7 +6796,7 @@ void AudacityProject::OnCollapseAllTracks()
void AudacityProject::OnExpandAllTracks() void AudacityProject::OnExpandAllTracks()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) while (t)
@ -6812,7 +6812,7 @@ void AudacityProject::OnExpandAllTracks()
void AudacityProject::OnMuteAllTracks() void AudacityProject::OnMuteAllTracks()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) while (t)
@ -6831,7 +6831,7 @@ void AudacityProject::OnMuteAllTracks()
void AudacityProject::OnUnMuteAllTracks() void AudacityProject::OnUnMuteAllTracks()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) while (t)
@ -6868,7 +6868,7 @@ void AudacityProject::OnUnlockPlayRegion()
void AudacityProject::OnResample() void AudacityProject::OnResample()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
int newRate; int newRate;

View File

@ -842,8 +842,6 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
// MM: We don't need to Ref() here because it start with refcount=1 // MM: We don't need to Ref() here because it start with refcount=1
mDirManager = new DirManager(); mDirManager = new DirManager();
// Create track list
mTracks = new TrackList();
mLastSavedTracks = NULL; mLastSavedTracks = NULL;
// Register for tracklist updates // Register for tracklist updates
@ -965,7 +963,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
TrackPanelID, TrackPanelID,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
mTracks, GetTracks(),
&mViewInfo, &mViewInfo,
this, this,
mRuler); mRuler);
@ -1093,7 +1091,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
#endif #endif
mIconized = false; mIconized = false;
mTrackFactory = new TrackFactory(mDirManager, &mViewInfo); mTrackFactory.reset(safenew TrackFactory{ mDirManager, &mViewInfo });
int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -1, 150}; int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -1, 150};
mStatusBar->SetStatusWidths(4, widths); mStatusBar->SetStatusWidths(4, widths);
@ -1103,7 +1101,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
GetControlToolBar()->UpdateStatusBar(this); GetControlToolBar()->UpdateStatusBar(this);
mLastStatusUpdateTime = ::wxGetUTCTime(); mLastStatusUpdateTime = ::wxGetUTCTime();
mTimer = new wxTimer(this, AudacityProjectTimerID); mTimer = std::make_unique<wxTimer>(this, AudacityProjectTimerID);
mTimer->Start(200); mTimer->Start(200);
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
@ -1217,9 +1215,9 @@ wxDialog *AudacityProject::GetMissingAliasFileDialog()
void AudacityProject::RedrawProject(const bool bForceWaveTracks /*= false*/) void AudacityProject::RedrawProject(const bool bForceWaveTracks /*= false*/)
{ {
FixScrollbars(); FixScrollbars();
if (bForceWaveTracks && mTracks) if (bForceWaveTracks && GetTracks())
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track* pTrack = iter.First(); Track* pTrack = iter.First();
while (pTrack) while (pTrack)
{ {
@ -1277,7 +1275,7 @@ DirManager *AudacityProject::GetDirManager()
TrackFactory *AudacityProject::GetTrackFactory() TrackFactory *AudacityProject::GetTrackFactory()
{ {
return mTrackFactory; return mTrackFactory.get();
} }
AdornedRulerPanel *AudacityProject::GetRulerPanel() AdornedRulerPanel *AudacityProject::GetRulerPanel()
@ -1420,7 +1418,7 @@ double AudacityProject::SSBL_GetRate() const
// Return maximum of project rate and all track rates. // Return maximum of project rate and all track rates.
double rate = mRate; double rate = mRate;
TrackListOfKindIterator iterWaveTrack(Track::Wave, mTracks); TrackListOfKindIterator iterWaveTrack(Track::Wave, mTracks.get());
WaveTrack *pWaveTrack = static_cast<WaveTrack*>(iterWaveTrack.First()); WaveTrack *pWaveTrack = static_cast<WaveTrack*>(iterWaveTrack.First());
while (pWaveTrack) while (pWaveTrack)
{ {
@ -1726,7 +1724,7 @@ bool AudacityProject::TP_ScrollUpDown(int delta)
void AudacityProject::FixScrollbars() void AudacityProject::FixScrollbars()
{ {
if(!mTracks) if (!GetTracks())
return; return;
bool refresh = false; bool refresh = false;
@ -1877,8 +1875,8 @@ void AudacityProject::FixScrollbars()
Track *AudacityProject::GetFirstVisible() Track *AudacityProject::GetFirstVisible()
{ {
if (!mViewInfo.track && mTracks) { if (!mViewInfo.track && GetTracks()) {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) { for (Track *t = iter.First(); t; t = iter.Next()) {
int y = t->GetY(); int y = t->GetY();
int h = t->GetHeight(); int h = t->GetHeight();
@ -1894,7 +1892,7 @@ Track *AudacityProject::GetFirstVisible()
void AudacityProject::UpdateFirstVisible() void AudacityProject::UpdateFirstVisible()
{ {
if (!mViewInfo.track || !mTracks) { if (!mViewInfo.track || !GetTracks()) {
return; return;
} }
@ -2349,8 +2347,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
ModuleManager::Get().Dispatch(ProjectClosing); ModuleManager::Get().Dispatch(ProjectClosing);
// Stop the timer since there's no need to update anything anymore // Stop the timer since there's no need to update anything anymore
delete mTimer; mTimer.reset();
mTimer = NULL;
// The project is now either saved or the user doesn't want to save it, // The project is now either saved or the user doesn't want to save it,
// so there's no need to keep auto save info around anymore // so there's no need to keep auto save info around anymore
@ -2390,7 +2387,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
// in memory. After it's locked, DELETE the data structure so that // in memory. After it's locked, DELETE the data structure so that
// there's no memory leak. // there's no memory leak.
if (mLastSavedTracks) { if (mLastSavedTracks) {
TrackListIterator iter(mLastSavedTracks); TrackListIterator iter(mLastSavedTracks.get());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
if (t->GetKind() == Track::Wave) if (t->GetKind() == Track::Wave)
@ -2398,9 +2395,8 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
t = iter.Next(); t = iter.Next();
} }
mLastSavedTracks->Clear(); mLastSavedTracks->Clear(); // sends an event
delete mLastSavedTracks; mLastSavedTracks.reset();
mLastSavedTracks = NULL;
} }
// Get rid of the history window // Get rid of the history window
@ -2429,13 +2425,11 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
DestroyChildren(); DestroyChildren();
delete mTrackFactory; mTrackFactory.reset();
mTrackFactory = NULL;
mTags.reset(); mTags.reset();
delete mImportXMLTagHandler; mImportXMLTagHandler.reset();
mImportXMLTagHandler = NULL;
// Unregister for tracklist updates // Unregister for tracklist updates
mTracks->Disconnect(EVT_TRACKLIST_UPDATED, mTracks->Disconnect(EVT_TRACKLIST_UPDATED,
@ -2445,8 +2439,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
// Delete all the tracks to free up memory and DirManager references. // Delete all the tracks to free up memory and DirManager references.
mTracks->Clear(); mTracks->Clear();
delete mTracks; mTracks.reset();
mTracks = NULL;
// This must be done before the following Deref() since it holds // This must be done before the following Deref() since it holds
// references to the DirManager. // references to the DirManager.
@ -2850,7 +2843,7 @@ void AudacityProject::OpenFile(const wxString &fileNameArg, bool addtohistory)
bool err = false; bool err = false;
Track *t; Track *t;
TrackListIterator iter(GetTracks()); TrackListIterator iter(GetTracks());
mLastSavedTracks = new TrackList(); mLastSavedTracks = std::make_unique<TrackList>();
t = iter.First(); t = iter.First();
while (t) { while (t) {
@ -2998,11 +2991,7 @@ void AudacityProject::OpenFile(const wxString &fileNameArg, bool addtohistory)
} }
// Clean up now unused recording recovery handler if any // Clean up now unused recording recovery handler if any
if (mRecordingRecoveryHandler) mRecordingRecoveryHandler.reset();
{
delete mRecordingRecoveryHandler;
mRecordingRecoveryHandler = NULL;
}
if (!bParseSuccess) if (!bParseSuccess)
return; // No need to do further processing if parse failed. return; // No need to do further processing if parse failed.
@ -3015,7 +3004,7 @@ void AudacityProject::OpenFile(const wxString &fileNameArg, bool addtohistory)
if(ODManager::HasLoadedODFlag()) if(ODManager::HasLoadedODFlag())
{ {
Track *tr; Track *tr;
TrackListIterator triter(mTracks); TrackListIterator triter(GetTracks());
tr = triter.First(); tr = triter.First();
std::vector<ODTask*> newTasks; std::vector<ODTask*> newTasks;
@ -3318,14 +3307,14 @@ XMLTagHandler *AudacityProject::HandleXMLChild(const wxChar *tag)
if (!wxStrcmp(tag, wxT("recordingrecovery"))) { if (!wxStrcmp(tag, wxT("recordingrecovery"))) {
if (!mRecordingRecoveryHandler) if (!mRecordingRecoveryHandler)
mRecordingRecoveryHandler = new RecordingRecoveryHandler(this); mRecordingRecoveryHandler = std::make_unique<RecordingRecoveryHandler>(this);
return mRecordingRecoveryHandler; return mRecordingRecoveryHandler.get();
} }
if (!wxStrcmp(tag, wxT("import"))) { if (!wxStrcmp(tag, wxT("import"))) {
if (mImportXMLTagHandler == NULL) if (!mImportXMLTagHandler)
mImportXMLTagHandler = new ImportXMLTagHandler(this); mImportXMLTagHandler = std::make_unique<ImportXMLTagHandler>(this);
return mImportXMLTagHandler; return mImportXMLTagHandler.get();
} }
return NULL; return NULL;
@ -3392,7 +3381,7 @@ void AudacityProject::WriteXML(XMLWriter &xmlFile)
Track *t; Track *t;
WaveTrack* pWaveTrack; WaveTrack* pWaveTrack;
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
t = iter.First(); t = iter.First();
unsigned int ndx = 0; unsigned int ndx = 0;
while (t) { while (t) {
@ -3491,7 +3480,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
wxASSERT(fromSaveAs); wxASSERT(fromSaveAs);
else else
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
bool bHasTracks = (iter.First() != NULL); bool bHasTracks = (iter.First() != NULL);
if (!bHasTracks) if (!bHasTracks)
{ {
@ -3582,7 +3571,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
std::vector<movable_ptr<WaveTrack::Locker>> lockers; std::vector<movable_ptr<WaveTrack::Locker>> lockers;
if (mLastSavedTracks && !overwrite) { if (mLastSavedTracks && !overwrite) {
lockers.reserve(mLastSavedTracks->size()); lockers.reserve(mLastSavedTracks->size());
TrackListIterator iter(mLastSavedTracks); TrackListIterator iter(mLastSavedTracks.get());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
if (t->GetKind() == Track::Wave) if (t->GetKind() == Track::Wave)
@ -3666,14 +3655,11 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
mDirManager->RemoveOrphanBlockfiles(); mDirManager->RemoveOrphanBlockfiles();
} }
if (mLastSavedTracks) { if (mLastSavedTracks)
mLastSavedTracks->Clear(); mLastSavedTracks->Clear();
delete mLastSavedTracks; mLastSavedTracks = std::make_unique<TrackList>();
}
mLastSavedTracks = new TrackList(); TrackListIterator iter(GetTracks());
TrackListIterator iter(mTracks);
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
mLastSavedTracks->Add(t->Duplicate()); mLastSavedTracks->Add(t->Duplicate());
@ -3710,7 +3696,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
// Copy the tracks because we're going to do some state changes before exporting. // Copy the tracks because we're going to do some state changes before exporting.
Track* pTrack; Track* pTrack;
WaveTrack* pWaveTrack; WaveTrack* pWaveTrack;
TrackListOfKindIterator iter(Track::Wave, mTracks); TrackListOfKindIterator iter(Track::Wave, GetTracks());
unsigned int numWaveTracks = 0; unsigned int numWaveTracks = 0;
TrackList pSavedTrackList; TrackList pSavedTrackList;
@ -3913,7 +3899,7 @@ bool AudacityProject::Import(const wxString &fileName, WaveTrackArray* pTrackArr
TempTags tempTags(mTags); TempTags tempTags(mTags);
bool success = Importer::Get().Import(fileName, bool success = Importer::Get().Import(fileName,
mTrackFactory, GetTrackFactory(),
newTracks, newTracks,
mTags.get(), mTags.get(),
errorMessage); errorMessage);
@ -4099,18 +4085,17 @@ For an audio file that will open in other apps, use 'Export'.\n"),
void AudacityProject::InitialState() void AudacityProject::InitialState()
{ {
if (mImportXMLTagHandler != NULL) { if (mImportXMLTagHandler) {
// We processed an <import> tag, so save it as a normal project, with no <import> tags. // We processed an <import> tag, so save it as a normal project, with no <import> tags.
this->Save(); this->Save();
// Shouldn't need it any more. // Shouldn't need it any more.
delete mImportXMLTagHandler; mImportXMLTagHandler.reset();
mImportXMLTagHandler = NULL;
} }
GetUndoManager()->ClearStates(); GetUndoManager()->ClearStates();
GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion, mTags, GetUndoManager()->PushState(GetTracks(), mViewInfo.selectedRegion, mTags,
_("Created new project"), wxT("")); _("Created new project"), wxT(""));
GetUndoManager()->StateSaved(); GetUndoManager()->StateSaved();
@ -4134,7 +4119,7 @@ void AudacityProject::PushState(const wxString &desc,
const wxString &shortDesc, const wxString &shortDesc,
UndoPush flags ) UndoPush flags )
{ {
GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion, mTags, GetUndoManager()->PushState(GetTracks(), mViewInfo.selectedRegion, mTags,
desc, shortDesc, flags); desc, shortDesc, flags);
mDirty = true; mDirty = true;
@ -4170,7 +4155,7 @@ void AudacityProject::RollbackState()
void AudacityProject::ModifyState(bool bWantsAutoSave) void AudacityProject::ModifyState(bool bWantsAutoSave)
{ {
GetUndoManager()->ModifyState(mTracks, mViewInfo.selectedRegion, mTags); GetUndoManager()->ModifyState(GetTracks(), mViewInfo.selectedRegion, mTags);
if (bWantsAutoSave) if (bWantsAutoSave)
AutoSave(); AutoSave();
} }
@ -4252,7 +4237,7 @@ void AudacityProject::UpdateLyrics()
if (!mLyricsWindow) if (!mLyricsWindow)
return; return;
TrackListOfKindIterator iter(Track::Label, mTracks); TrackListOfKindIterator iter(Track::Label, GetTracks());
LabelTrack* pLabelTrack = (LabelTrack*)(iter.First()); // Lyrics come from only the first label track. LabelTrack* pLabelTrack = (LabelTrack*)(iter.First()); // Lyrics come from only the first label track.
if (!pLabelTrack) if (!pLabelTrack)
return; return;
@ -4320,7 +4305,7 @@ void AudacityProject::ClearClipboard()
void AudacityProject::Clear() void AudacityProject::Clear()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *n = iter.First(); Track *n = iter.First();
@ -4345,7 +4330,7 @@ void AudacityProject::Clear()
void AudacityProject::SelectNone() void AudacityProject::SelectNone()
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
t->SetSelected(false); t->SetSelected(false);
@ -4614,7 +4599,7 @@ void AudacityProject::OnTimer(wxTimerEvent& WXUNUSED(event))
//regions memory need to be deleted by the caller //regions memory need to be deleted by the caller
void AudacityProject::GetRegionsByLabel( Regions &regions ) void AudacityProject::GetRegionsByLabel( Regions &regions )
{ {
TrackListIterator iter( mTracks ); TrackListIterator iter(GetTracks());
Track *n; Track *n;
//determine labelled regions //determine labelled regions
@ -4668,7 +4653,7 @@ void AudacityProject::EditByLabel( EditFunction action,
if( regions.size() == 0 ) if( regions.size() == 0 )
return; return;
TrackListIterator iter( mTracks ); TrackListIterator iter(GetTracks());
Track *n; Track *n;
bool allTracks = true; bool allTracks = true;
@ -4714,7 +4699,7 @@ void AudacityProject::EditClipboardByLabel( EditDestFunction action )
if( regions.size() == 0 ) if( regions.size() == 0 )
return; return;
TrackListIterator iter( mTracks ); TrackListIterator iter(GetTracks());
Track *n; Track *n;
bool allTracks = true; bool allTracks = true;
@ -5195,7 +5180,7 @@ void AudacityProject::HandleTrackMute(Track *t, const bool exclusive)
// "exclusive" mute means mute the chosen track and unmute all others. // "exclusive" mute means mute the chosen track and unmute all others.
if (exclusive) if (exclusive)
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *i = iter.First(); Track *i = iter.First();
while (i) { while (i) {
if (i == t) { if (i == t) {
@ -5219,7 +5204,7 @@ void AudacityProject::HandleTrackMute(Track *t, const bool exclusive)
if(t->GetLinked()) // set mute the same on both, if a pair if(t->GetLinked()) // set mute the same on both, if a pair
{ {
bool muted = t->GetMute(); bool muted = t->GetMute();
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *i = iter.First(); Track *i = iter.First();
while (i != t) { // search for this track while (i != t) { // search for this track
i = iter.Next(); i = iter.Next();
@ -5230,7 +5215,7 @@ void AudacityProject::HandleTrackMute(Track *t, const bool exclusive)
if (IsSoloSimple() || IsSoloNone()) if (IsSoloSimple() || IsSoloNone())
{ {
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *i = iter.First(); Track *i = iter.First();
int nPlaying=0; int nPlaying=0;
@ -5273,7 +5258,7 @@ void AudacityProject::HandleTrackSolo(Track *t, const bool alternate)
if(t->GetLinked()) if(t->GetLinked())
{ {
bool soloed = t->GetSolo(); bool soloed = t->GetSolo();
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *i = iter.First(); Track *i = iter.First();
while (i != t) { // search for this track while (i != t) { // search for this track
i = iter.Next(); i = iter.Next();
@ -5286,7 +5271,7 @@ void AudacityProject::HandleTrackSolo(Track *t, const bool alternate)
{ {
// Normal click solo this track only, mute everything else. // Normal click solo this track only, mute everything else.
// OR unmute and unsolo everything. // OR unmute and unsolo everything.
TrackListIterator iter(mTracks); TrackListIterator iter(GetTracks());
Track *i = iter.First(); Track *i = iter.First();
bool bWasSolo = t->GetSolo(); bool bWasSolo = t->GetSolo();
while (i) { while (i) {
@ -5417,7 +5402,7 @@ bool AudacityProject::SaveFromTimerRecording(wxFileName fnFile) {
bool AudacityProject::ProjectHasTracks() { bool AudacityProject::ProjectHasTracks() {
// These two lines test for an 'empty' project. // These two lines test for an 'empty' project.
// of course it could still have a history at this stage. // of course it could still have a history at this stage.
TrackListIterator iter2(mTracks); TrackListIterator iter2(GetTracks());
bool bHasTracks = (iter2.First() != NULL); bool bHasTracks = (iter2.First() != NULL);
return bHasTracks; return bHasTracks;
} }

View File

@ -166,7 +166,7 @@ class AUDACITY_DLL_API AudacityProject final : public wxFrame,
AudioIOStartStreamOptions GetDefaultPlayOptions(); AudioIOStartStreamOptions GetDefaultPlayOptions();
TrackList *GetTracks() { return mTracks; } TrackList *GetTracks() { return mTracks.get(); }
UndoManager *GetUndoManager() { return mUndoManager.get(); } UndoManager *GetUndoManager() { return mUndoManager.get(); }
sampleFormat GetDefaultFormat() { return mDefaultFormat; } sampleFormat GetDefaultFormat() { return mDefaultFormat; }
@ -562,14 +562,14 @@ public:
std::shared_ptr<Tags> mTags; std::shared_ptr<Tags> mTags;
// List of tracks and display info // List of tracks and display info
TrackList *mTracks; std::unique_ptr<TrackList> mTracks{ std::make_unique<TrackList>() };
int mSnapTo; int mSnapTo;
wxString mSelectionFormat; wxString mSelectionFormat;
wxString mFrequencySelectionFormatName; wxString mFrequencySelectionFormatName;
wxString mBandwidthSelectionFormatName; wxString mBandwidthSelectionFormatName;
TrackList *mLastSavedTracks; std::unique_ptr<TrackList> mLastSavedTracks;
// Clipboard (static because it is shared by all projects) // Clipboard (static because it is shared by all projects)
static std::unique_ptr<TrackList> msClipboard; static std::unique_ptr<TrackList> msClipboard;
@ -592,7 +592,7 @@ public:
// Window elements // Window elements
wxTimer *mTimer; std::unique_ptr<wxTimer> mTimer;
long mLastStatusUpdateTime; long mLastStatusUpdateTime;
wxStatusBar *mStatusBar; wxStatusBar *mStatusBar;
@ -600,7 +600,7 @@ public:
AdornedRulerPanel *mRuler{}; AdornedRulerPanel *mRuler{};
wxPanel *mTopPanel{}; wxPanel *mTopPanel{};
TrackPanel *mTrackPanel{}; TrackPanel *mTrackPanel{};
TrackFactory *mTrackFactory{}; std::unique_ptr<TrackFactory> mTrackFactory{};
wxPanel * mMainPanel; wxPanel * mMainPanel;
wxScrollBar *mHsbar; wxScrollBar *mHsbar;
wxScrollBar *mVsbar; wxScrollBar *mVsbar;
@ -664,7 +664,7 @@ public:
// See AudacityProject::OnActivate() for an explanation of this. // See AudacityProject::OnActivate() for an explanation of this.
wxWindow *mLastFocusedWindow{}; wxWindow *mLastFocusedWindow{};
ImportXMLTagHandler* mImportXMLTagHandler{}; std::unique_ptr<ImportXMLTagHandler> mImportXMLTagHandler;
// Last auto-save file name and path (empty if none) // Last auto-save file name and path (empty if none)
wxString mAutoSaveFileName; wxString mAutoSaveFileName;
@ -679,7 +679,7 @@ public:
wxString mRecoveryAutoSaveDataDir; wxString mRecoveryAutoSaveDataDir;
// The handler that handles recovery of <recordingrecovery> tags // The handler that handles recovery of <recordingrecovery> tags
RecordingRecoveryHandler* mRecordingRecoveryHandler{}; std::unique_ptr<RecordingRecoveryHandler> mRecordingRecoveryHandler;
// Dependencies have been imported and a warning should be shown on save // Dependencies have been imported and a warning should be shown on save
bool mImportedDependencies{ false }; bool mImportedDependencies{ false };