diff --git a/src/Menus.cpp b/src/Menus.cpp index ec5b4961a..658afe94b 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -1695,7 +1695,7 @@ CommandFlag AudacityProject::GetUpdateFlags() if (!mViewInfo.selectedRegion.isPoint()) flags |= TimeSelectedFlag; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { flags |= TracksExistFlag; @@ -3336,7 +3336,7 @@ double AudacityProject::NearestZeroCrossing(double t0) for(i=0; iGetSelected() || track->GetKind() != (Track::Wave)) { @@ -3447,7 +3447,7 @@ bool AudacityProject::OnEffect(const PluginID & ID, int flags) wxGetApp().SetMissingAliasedFileWarningShouldShow(true); - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); WaveTrack *newTrack{}; wxWindow *focus = wxWindow::FindFocus(); @@ -3475,7 +3475,7 @@ bool AudacityProject::OnEffect(const PluginID & ID, int flags) EffectManager & em = EffectManager::Get(); bool success = em.DoEffect(ID, this, mRate, - mTracks, mTrackFactory, + GetTracks(), GetTrackFactory(), &mViewInfo.selectedRegion, (flags & OnEffectFlags::kConfigured) == 0); @@ -3647,7 +3647,7 @@ void AudacityProject::OnExportLabels() Track *t; int numLabelTracks = 0; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); wxString fName = _("labels.txt"); t = iter.First(); @@ -3715,7 +3715,7 @@ void AudacityProject::OnExportLabels() #ifdef USE_MIDI void AudacityProject::OnExportMIDI(){ - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); int numNoteTracksSelected = 0; NoteTrack *nt = NULL; @@ -3860,7 +3860,7 @@ void AudacityProject::OnPageSetup() void AudacityProject::OnPrint() { - HandlePrint(this, GetName(), mTracks); + HandlePrint(this, GetName(), GetTracks()); } // @@ -3928,7 +3928,7 @@ void AudacityProject::OnRedo() void AudacityProject::OnCut() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); // This doesn't handle cutting labels, it handles @@ -4016,7 +4016,7 @@ void AudacityProject::OnCut() void AudacityProject::OnSplitCut() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); ClearClipboard(); @@ -4059,7 +4059,7 @@ void AudacityProject::OnSplitCut() void AudacityProject::OnCopy() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); @@ -4113,7 +4113,7 @@ void AudacityProject::OnPaste() double t0 = mViewInfo.selectedRegion.t0(); double t1 = mViewInfo.selectedRegion.t1(); - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); TrackListIterator clipIter(msClipboard.get()); Track *n = iter.First(); @@ -4308,7 +4308,7 @@ void AudacityProject::OnPaste() // (This was formerly the first part of overly-long OnPaste.) bool AudacityProject::HandlePasteText() { - TrackListOfKindIterator iterLabelTrack(Track::Label, mTracks); + TrackListOfKindIterator iterLabelTrack(Track::Label, GetTracks()); LabelTrack* pLabelTrack = (LabelTrack*)(iterLabelTrack.First()); while (pLabelTrack) { @@ -4344,7 +4344,7 @@ bool AudacityProject::HandlePasteNothingSelected() { // First check whether anything's selected. bool bAnySelected = false; - TrackListIterator iterTrack(mTracks); + TrackListIterator iterTrack(GetTracks()); Track* pTrack = iterTrack.First(); while (pTrack) { if (pTrack->GetSelected()) @@ -4442,13 +4442,13 @@ void AudacityProject::OnPasteNewLabel() { bool bPastedSomething = false; - SelectedTrackListOfKindIterator iter(Track::Label, mTracks); + SelectedTrackListOfKindIterator iter(Track::Label, GetTracks()); Track *t = iter.First(); if (!t) { // If there are no selected label tracks, try to choose the first label // track after some other selected track - TrackListIterator iter1(mTracks); + TrackListIterator iter1(GetTracks()); for (Track *t1 = iter1.First(); t1; t1 = iter1.Next()) { if (t1->GetSelected()) { // Look for a label track @@ -4525,7 +4525,7 @@ void AudacityProject::OnTrim() if (mViewInfo.selectedRegion.isPoint()) return; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); while (n) { @@ -4566,7 +4566,7 @@ void AudacityProject::OnDelete() void AudacityProject::OnSplitDelete() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); @@ -4595,7 +4595,7 @@ void AudacityProject::OnSplitDelete() void AudacityProject::OnDisjoin() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); @@ -4620,7 +4620,7 @@ void AudacityProject::OnDisjoin() void AudacityProject::OnJoin() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); @@ -4645,7 +4645,7 @@ void AudacityProject::OnJoin() void AudacityProject::OnSilence() { - SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, GetTracks()); for (Track *n = iter.First(); n; n = iter.Next()) n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1()); @@ -4661,7 +4661,7 @@ void AudacityProject::OnSilence() void AudacityProject::OnDuplicate() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *l = iter.Last(); Track *n = iter.First(); @@ -4849,7 +4849,7 @@ void AudacityProject::OnDisjoinLabels() void AudacityProject::OnSplit() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); double sel0 = mViewInfo.selectedRegion.t0(); double sel1 = mViewInfo.selectedRegion.t1(); @@ -4922,7 +4922,7 @@ void AudacityProject::OnSplit() void AudacityProject::OnSplitNew() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *l = iter.Last(); for (Track *n = iter.First(); n; n = iter.Next()) { @@ -4967,7 +4967,7 @@ void AudacityProject::OnSplitNew() void AudacityProject::OnSelectAll() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { @@ -5003,7 +5003,7 @@ void AudacityProject::DoNextPeakFrequency(bool up) { // Find the first selected wave track that is in a spectrogram view. WaveTrack *pTrack = 0; - SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, GetTracks()); for (Track *t = iter.First(); t; t = iter.Next()) { WaveTrack *const wt = static_cast(t); const int display = wt->GetDisplay(); @@ -5036,7 +5036,7 @@ void AudacityProject::OnSelectCursorEnd() { double maxEndOffset = -1000000.0; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { @@ -5059,7 +5059,7 @@ void AudacityProject::OnSelectStartCursor() { double minOffset = 1000000.0; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { @@ -5081,7 +5081,7 @@ void AudacityProject::OnSelectStartCursor() void AudacityProject::OnSelectSyncLockSel() { bool selected = false; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); for (Track *t = iter.First(); t; t = iter.Next()) { if (t->IsSyncLockSelected()) { @@ -5100,7 +5100,7 @@ void AudacityProject::OnSelectSyncLockSel() void AudacityProject::OnSelectAllTracks() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); for (Track *t = iter.First(); t; t = iter.Next()) { t->SetSelected(true); } @@ -5277,7 +5277,7 @@ void AudacityProject::DoZoomFitV() height -= 28; count = 0; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { if ((t->GetKind() == Track::Wave) && @@ -5297,7 +5297,7 @@ void AudacityProject::DoZoomFitV() if (height < 40) height = 40; - TrackListIterator iter2(mTracks); + TrackListIterator iter2(GetTracks()); t = iter2.First(); while (t) { if ((t->GetKind() == Track::Wave) && @@ -5671,7 +5671,7 @@ void AudacityProject::OnImportRaw() TrackHolders newTracks; - ::ImportRaw(this, fileName, mTrackFactory, newTracks); + ::ImportRaw(this, fileName, GetTrackFactory(), newTracks); if (newTracks.size() <= 0) return; @@ -5709,12 +5709,12 @@ void AudacityProject::HandleMixAndRender(bool toNewTrack) wxGetApp().SetMissingAliasedFileWarningShouldShow(true); 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) { // Remove originals, get stats on what tracks were mixed - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); int selectedCount = 0; wxString firstName; @@ -5811,7 +5811,7 @@ void AudacityProject::OnCursorTrackStart() { double minOffset = 1000000.0; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { @@ -5835,7 +5835,7 @@ void AudacityProject::OnCursorTrackEnd() double maxEndOffset = -1000000.0; double thisEndOffset = 0.0; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { @@ -5872,7 +5872,7 @@ void AudacityProject::OnCursorSelEnd() void AudacityProject::HandleAlign(int index, bool moveSel) { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); wxString action; wxString shortAction; double offset; @@ -5966,7 +5966,7 @@ void AudacityProject::HandleAlign(int index, bool moveSel) } if ((unsigned)index >= mAlignLabelsCount) { // This is an alignLabelsNoSync command. - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); double leftChannelStart = 0.0; double leftChannelEnd = 0.0; @@ -6023,7 +6023,7 @@ void AudacityProject::HandleAlign(int index, bool moveSel) } if (delta != 0.0) { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { @@ -6502,7 +6502,7 @@ int AudacityProject::DoAddLabel(const SelectedRegion ®ion, bool preserveFocus // Otherwise look for a label track after the focused track if (!lt) { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); if (t) iter.StartWith(t); else @@ -6589,7 +6589,7 @@ void AudacityProject::DoEditLabels(LabelTrack *lt, int index) wxString format = GetSelectionFormat(), freqFormat = GetFrequencySelectionFormatName(); - LabelDialog dlg(this, *GetTrackFactory(), mTracks, + LabelDialog dlg(this, *GetTrackFactory(), GetTracks(), lt, index, mViewInfo, mRate, format, freqFormat); @@ -6620,7 +6620,7 @@ void AudacityProject::OnEditChains() void AudacityProject::OnRemoveTracks() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); Track *f = NULL; Track *l = NULL; @@ -6781,7 +6781,7 @@ void AudacityProject::OnSeparator() void AudacityProject::OnCollapseAllTracks() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) @@ -6796,7 +6796,7 @@ void AudacityProject::OnCollapseAllTracks() void AudacityProject::OnExpandAllTracks() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) @@ -6812,7 +6812,7 @@ void AudacityProject::OnExpandAllTracks() void AudacityProject::OnMuteAllTracks() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) @@ -6831,7 +6831,7 @@ void AudacityProject::OnMuteAllTracks() void AudacityProject::OnUnMuteAllTracks() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) @@ -6868,7 +6868,7 @@ void AudacityProject::OnUnlockPlayRegion() void AudacityProject::OnResample() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); int newRate; diff --git a/src/Project.cpp b/src/Project.cpp index fce477137..23185edc4 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -842,8 +842,6 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, // MM: We don't need to Ref() here because it start with refcount=1 mDirManager = new DirManager(); - // Create track list - mTracks = new TrackList(); mLastSavedTracks = NULL; // Register for tracklist updates @@ -965,7 +963,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, TrackPanelID, wxDefaultPosition, wxDefaultSize, - mTracks, + GetTracks(), &mViewInfo, this, mRuler); @@ -1093,7 +1091,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, #endif mIconized = false; - mTrackFactory = new TrackFactory(mDirManager, &mViewInfo); + mTrackFactory.reset(safenew TrackFactory{ mDirManager, &mViewInfo }); int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -1, 150}; mStatusBar->SetStatusWidths(4, widths); @@ -1103,7 +1101,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, GetControlToolBar()->UpdateStatusBar(this); mLastStatusUpdateTime = ::wxGetUTCTime(); - mTimer = new wxTimer(this, AudacityProjectTimerID); + mTimer = std::make_unique(this, AudacityProjectTimerID); mTimer->Start(200); #if wxUSE_DRAG_AND_DROP @@ -1217,9 +1215,9 @@ wxDialog *AudacityProject::GetMissingAliasFileDialog() void AudacityProject::RedrawProject(const bool bForceWaveTracks /*= false*/) { FixScrollbars(); - if (bForceWaveTracks && mTracks) + if (bForceWaveTracks && GetTracks()) { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track* pTrack = iter.First(); while (pTrack) { @@ -1277,7 +1275,7 @@ DirManager *AudacityProject::GetDirManager() TrackFactory *AudacityProject::GetTrackFactory() { - return mTrackFactory; + return mTrackFactory.get(); } AdornedRulerPanel *AudacityProject::GetRulerPanel() @@ -1420,7 +1418,7 @@ double AudacityProject::SSBL_GetRate() const // Return maximum of project rate and all track rates. double rate = mRate; - TrackListOfKindIterator iterWaveTrack(Track::Wave, mTracks); + TrackListOfKindIterator iterWaveTrack(Track::Wave, mTracks.get()); WaveTrack *pWaveTrack = static_cast(iterWaveTrack.First()); while (pWaveTrack) { @@ -1726,7 +1724,7 @@ bool AudacityProject::TP_ScrollUpDown(int delta) void AudacityProject::FixScrollbars() { - if(!mTracks) + if (!GetTracks()) return; bool refresh = false; @@ -1877,8 +1875,8 @@ void AudacityProject::FixScrollbars() Track *AudacityProject::GetFirstVisible() { - if (!mViewInfo.track && mTracks) { - TrackListIterator iter(mTracks); + if (!mViewInfo.track && GetTracks()) { + TrackListIterator iter(GetTracks()); for (Track *t = iter.First(); t; t = iter.Next()) { int y = t->GetY(); int h = t->GetHeight(); @@ -1894,7 +1892,7 @@ Track *AudacityProject::GetFirstVisible() void AudacityProject::UpdateFirstVisible() { - if (!mViewInfo.track || !mTracks) { + if (!mViewInfo.track || !GetTracks()) { return; } @@ -2349,8 +2347,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) ModuleManager::Get().Dispatch(ProjectClosing); // Stop the timer since there's no need to update anything anymore - delete mTimer; - mTimer = NULL; + mTimer.reset(); // 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 @@ -2390,7 +2387,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) // in memory. After it's locked, DELETE the data structure so that // there's no memory leak. if (mLastSavedTracks) { - TrackListIterator iter(mLastSavedTracks); + TrackListIterator iter(mLastSavedTracks.get()); Track *t = iter.First(); while (t) { if (t->GetKind() == Track::Wave) @@ -2398,9 +2395,8 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) t = iter.Next(); } - mLastSavedTracks->Clear(); - delete mLastSavedTracks; - mLastSavedTracks = NULL; + mLastSavedTracks->Clear(); // sends an event + mLastSavedTracks.reset(); } // Get rid of the history window @@ -2429,13 +2425,11 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) DestroyChildren(); - delete mTrackFactory; - mTrackFactory = NULL; + mTrackFactory.reset(); mTags.reset(); - delete mImportXMLTagHandler; - mImportXMLTagHandler = NULL; + mImportXMLTagHandler.reset(); // Unregister for tracklist updates 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. mTracks->Clear(); - delete mTracks; - mTracks = NULL; + mTracks.reset(); // This must be done before the following Deref() since it holds // references to the DirManager. @@ -2850,7 +2843,7 @@ void AudacityProject::OpenFile(const wxString &fileNameArg, bool addtohistory) bool err = false; Track *t; TrackListIterator iter(GetTracks()); - mLastSavedTracks = new TrackList(); + mLastSavedTracks = std::make_unique(); t = iter.First(); while (t) { @@ -2998,11 +2991,7 @@ void AudacityProject::OpenFile(const wxString &fileNameArg, bool addtohistory) } // Clean up now unused recording recovery handler if any - if (mRecordingRecoveryHandler) - { - delete mRecordingRecoveryHandler; - mRecordingRecoveryHandler = NULL; - } + mRecordingRecoveryHandler.reset(); if (!bParseSuccess) 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()) { Track *tr; - TrackListIterator triter(mTracks); + TrackListIterator triter(GetTracks()); tr = triter.First(); std::vector newTasks; @@ -3318,14 +3307,14 @@ XMLTagHandler *AudacityProject::HandleXMLChild(const wxChar *tag) if (!wxStrcmp(tag, wxT("recordingrecovery"))) { if (!mRecordingRecoveryHandler) - mRecordingRecoveryHandler = new RecordingRecoveryHandler(this); - return mRecordingRecoveryHandler; + mRecordingRecoveryHandler = std::make_unique(this); + return mRecordingRecoveryHandler.get(); } if (!wxStrcmp(tag, wxT("import"))) { - if (mImportXMLTagHandler == NULL) - mImportXMLTagHandler = new ImportXMLTagHandler(this); - return mImportXMLTagHandler; + if (!mImportXMLTagHandler) + mImportXMLTagHandler = std::make_unique(this); + return mImportXMLTagHandler.get(); } return NULL; @@ -3392,7 +3381,7 @@ void AudacityProject::WriteXML(XMLWriter &xmlFile) Track *t; WaveTrack* pWaveTrack; - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); t = iter.First(); unsigned int ndx = 0; while (t) { @@ -3491,7 +3480,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ , wxASSERT(fromSaveAs); else { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); bool bHasTracks = (iter.First() != NULL); if (!bHasTracks) { @@ -3582,7 +3571,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ , std::vector> lockers; if (mLastSavedTracks && !overwrite) { lockers.reserve(mLastSavedTracks->size()); - TrackListIterator iter(mLastSavedTracks); + TrackListIterator iter(mLastSavedTracks.get()); Track *t = iter.First(); while (t) { if (t->GetKind() == Track::Wave) @@ -3666,14 +3655,11 @@ bool AudacityProject::Save(bool overwrite /* = true */ , mDirManager->RemoveOrphanBlockfiles(); } - if (mLastSavedTracks) { + if (mLastSavedTracks) mLastSavedTracks->Clear(); - delete mLastSavedTracks; - } + mLastSavedTracks = std::make_unique(); - mLastSavedTracks = new TrackList(); - - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { 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. Track* pTrack; WaveTrack* pWaveTrack; - TrackListOfKindIterator iter(Track::Wave, mTracks); + TrackListOfKindIterator iter(Track::Wave, GetTracks()); unsigned int numWaveTracks = 0; TrackList pSavedTrackList; @@ -3913,7 +3899,7 @@ bool AudacityProject::Import(const wxString &fileName, WaveTrackArray* pTrackArr TempTags tempTags(mTags); bool success = Importer::Get().Import(fileName, - mTrackFactory, + GetTrackFactory(), newTracks, mTags.get(), errorMessage); @@ -4099,18 +4085,17 @@ For an audio file that will open in other apps, use 'Export'.\n"), void AudacityProject::InitialState() { - if (mImportXMLTagHandler != NULL) { + if (mImportXMLTagHandler) { // We processed an tag, so save it as a normal project, with no tags. this->Save(); // Shouldn't need it any more. - delete mImportXMLTagHandler; - mImportXMLTagHandler = NULL; + mImportXMLTagHandler.reset(); } GetUndoManager()->ClearStates(); - GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion, mTags, + GetUndoManager()->PushState(GetTracks(), mViewInfo.selectedRegion, mTags, _("Created new project"), wxT("")); GetUndoManager()->StateSaved(); @@ -4134,7 +4119,7 @@ void AudacityProject::PushState(const wxString &desc, const wxString &shortDesc, UndoPush flags ) { - GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion, mTags, + GetUndoManager()->PushState(GetTracks(), mViewInfo.selectedRegion, mTags, desc, shortDesc, flags); mDirty = true; @@ -4170,7 +4155,7 @@ void AudacityProject::RollbackState() void AudacityProject::ModifyState(bool bWantsAutoSave) { - GetUndoManager()->ModifyState(mTracks, mViewInfo.selectedRegion, mTags); + GetUndoManager()->ModifyState(GetTracks(), mViewInfo.selectedRegion, mTags); if (bWantsAutoSave) AutoSave(); } @@ -4252,7 +4237,7 @@ void AudacityProject::UpdateLyrics() if (!mLyricsWindow) return; - TrackListOfKindIterator iter(Track::Label, mTracks); + TrackListOfKindIterator iter(Track::Label, GetTracks()); LabelTrack* pLabelTrack = (LabelTrack*)(iter.First()); // Lyrics come from only the first label track. if (!pLabelTrack) return; @@ -4320,7 +4305,7 @@ void AudacityProject::ClearClipboard() void AudacityProject::Clear() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *n = iter.First(); @@ -4345,7 +4330,7 @@ void AudacityProject::Clear() void AudacityProject::SelectNone() { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *t = iter.First(); while (t) { t->SetSelected(false); @@ -4614,7 +4599,7 @@ void AudacityProject::OnTimer(wxTimerEvent& WXUNUSED(event)) //regions memory need to be deleted by the caller void AudacityProject::GetRegionsByLabel( Regions ®ions ) { - TrackListIterator iter( mTracks ); + TrackListIterator iter(GetTracks()); Track *n; //determine labelled regions @@ -4668,7 +4653,7 @@ void AudacityProject::EditByLabel( EditFunction action, if( regions.size() == 0 ) return; - TrackListIterator iter( mTracks ); + TrackListIterator iter(GetTracks()); Track *n; bool allTracks = true; @@ -4714,7 +4699,7 @@ void AudacityProject::EditClipboardByLabel( EditDestFunction action ) if( regions.size() == 0 ) return; - TrackListIterator iter( mTracks ); + TrackListIterator iter(GetTracks()); Track *n; 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. if (exclusive) { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *i = iter.First(); while (i) { 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 { bool muted = t->GetMute(); - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *i = iter.First(); while (i != t) { // search for this track i = iter.Next(); @@ -5230,7 +5215,7 @@ void AudacityProject::HandleTrackMute(Track *t, const bool exclusive) if (IsSoloSimple() || IsSoloNone()) { - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *i = iter.First(); int nPlaying=0; @@ -5273,7 +5258,7 @@ void AudacityProject::HandleTrackSolo(Track *t, const bool alternate) if(t->GetLinked()) { bool soloed = t->GetSolo(); - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *i = iter.First(); while (i != t) { // search for this track i = iter.Next(); @@ -5286,7 +5271,7 @@ void AudacityProject::HandleTrackSolo(Track *t, const bool alternate) { // Normal click solo this track only, mute everything else. // OR unmute and unsolo everything. - TrackListIterator iter(mTracks); + TrackListIterator iter(GetTracks()); Track *i = iter.First(); bool bWasSolo = t->GetSolo(); while (i) { @@ -5417,7 +5402,7 @@ bool AudacityProject::SaveFromTimerRecording(wxFileName fnFile) { bool AudacityProject::ProjectHasTracks() { // These two lines test for an 'empty' project. // of course it could still have a history at this stage. - TrackListIterator iter2(mTracks); + TrackListIterator iter2(GetTracks()); bool bHasTracks = (iter2.First() != NULL); return bHasTracks; } diff --git a/src/Project.h b/src/Project.h index 82569c2a4..94ef2b4c9 100644 --- a/src/Project.h +++ b/src/Project.h @@ -166,7 +166,7 @@ class AUDACITY_DLL_API AudacityProject final : public wxFrame, AudioIOStartStreamOptions GetDefaultPlayOptions(); - TrackList *GetTracks() { return mTracks; } + TrackList *GetTracks() { return mTracks.get(); } UndoManager *GetUndoManager() { return mUndoManager.get(); } sampleFormat GetDefaultFormat() { return mDefaultFormat; } @@ -562,14 +562,14 @@ public: std::shared_ptr mTags; // List of tracks and display info - TrackList *mTracks; + std::unique_ptr mTracks{ std::make_unique() }; int mSnapTo; wxString mSelectionFormat; wxString mFrequencySelectionFormatName; wxString mBandwidthSelectionFormatName; - TrackList *mLastSavedTracks; + std::unique_ptr mLastSavedTracks; // Clipboard (static because it is shared by all projects) static std::unique_ptr msClipboard; @@ -592,7 +592,7 @@ public: // Window elements - wxTimer *mTimer; + std::unique_ptr mTimer; long mLastStatusUpdateTime; wxStatusBar *mStatusBar; @@ -600,7 +600,7 @@ public: AdornedRulerPanel *mRuler{}; wxPanel *mTopPanel{}; TrackPanel *mTrackPanel{}; - TrackFactory *mTrackFactory{}; + std::unique_ptr mTrackFactory{}; wxPanel * mMainPanel; wxScrollBar *mHsbar; wxScrollBar *mVsbar; @@ -664,7 +664,7 @@ public: // See AudacityProject::OnActivate() for an explanation of this. wxWindow *mLastFocusedWindow{}; - ImportXMLTagHandler* mImportXMLTagHandler{}; + std::unique_ptr mImportXMLTagHandler; // Last auto-save file name and path (empty if none) wxString mAutoSaveFileName; @@ -679,7 +679,7 @@ public: wxString mRecoveryAutoSaveDataDir; // The handler that handles recovery of tags - RecordingRecoveryHandler* mRecordingRecoveryHandler{}; + std::unique_ptr mRecordingRecoveryHandler; // Dependencies have been imported and a warning should be shown on save bool mImportedDependencies{ false };