diff --git a/src/AudacityApp.cpp b/src/AudacityApp.cpp index 8bd4158a7..9d9b9ffae 100644 --- a/src/AudacityApp.cpp +++ b/src/AudacityApp.cpp @@ -1174,7 +1174,11 @@ bool AudacityApp::OnInit() // Ensure we have an event loop during initialization wxEventLoopGuarantor eventLoop; - std::unique_ptr < wxLog > { wxLog::SetActiveTarget(new AudacityLogger) }; // DELETE + // wxWidgets will clean up the logger for the main thread, so we can say + // safenew. See: + // http://docs.wxwidgets.org/3.0/classwx_log.html#a2525bf54fa3f31dc50e6e3cd8651e71d + std::unique_ptr < wxLog > + { wxLog::SetActiveTarget(safenew AudacityLogger) }; // DELETE old mLocale = NULL; diff --git a/src/AudacityLogger.cpp b/src/AudacityLogger.cpp index 480b3934f..92bd0f3df 100644 --- a/src/AudacityLogger.cpp +++ b/src/AudacityLogger.cpp @@ -51,7 +51,6 @@ AudacityLogger::AudacityLogger() : wxEvtHandler(), wxLog() { - mFrame = NULL; mText = NULL; mUpdated = false; } @@ -97,48 +96,44 @@ void AudacityLogger::DoLogText(const wxString & str) void AudacityLogger::Destroy() { if (mFrame) { - wxFrame *frame = mFrame; - mFrame = NULL; - mText = NULL; - - frame->Disconnect(LoggerID_Save, + mFrame->Disconnect(LoggerID_Save, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudacityLogger::OnSave), NULL, this); - frame->Disconnect(LoggerID_Clear, + mFrame->Disconnect(LoggerID_Clear, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudacityLogger::OnClear), NULL, this); - frame->Disconnect(LoggerID_Close, + mFrame->Disconnect(LoggerID_Close, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudacityLogger::OnClose), NULL, this); - frame->Disconnect(LoggerID_Save, + mFrame->Disconnect(LoggerID_Save, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(AudacityLogger::OnSave), NULL, this); - frame->Disconnect(LoggerID_Clear, + mFrame->Disconnect(LoggerID_Clear, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(AudacityLogger::OnClear), NULL, this); - frame->Disconnect(LoggerID_Close, + mFrame->Disconnect(LoggerID_Close, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(AudacityLogger::OnClose), NULL, this); - frame->Disconnect(wxEVT_CLOSE_WINDOW, + mFrame->Disconnect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(AudacityLogger::OnCloseWindow), NULL, this); - frame->Destroy(); + mFrame.reset(); } } @@ -165,7 +160,8 @@ void AudacityLogger::Show(bool show) } // This is the first use, so create the frame - wxFrame *frame = new wxFrame(NULL, wxID_ANY, _("Audacity Log")); + Destroy_ptr frame + { safenew wxFrame(NULL, wxID_ANY, _("Audacity Log")) }; frame->SetName(frame->GetTitle()); frame->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); @@ -185,7 +181,7 @@ void AudacityLogger::Show(bool show) } // Log text - ShuttleGui S(frame, eIsCreating); + ShuttleGui S(frame.get(), eIsCreating); S.SetStyle(wxNO_BORDER | wxTAB_TRAVERSAL); S.Prop(true).StartPanel(); @@ -254,7 +250,7 @@ void AudacityLogger::Show(bool show) NULL, this); - mFrame = frame; + mFrame = std::move( frame ); mFrame->Show(); @@ -302,7 +298,7 @@ void AudacityLogger::OnSave(wxCommandEvent & WXUNUSED(e)) wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxRESIZE_BORDER, - mFrame); + mFrame.get()); if (fName == wxEmptyString) { return; @@ -312,7 +308,7 @@ void AudacityLogger::OnSave(wxCommandEvent & WXUNUSED(e)) wxMessageBox(_("Couldn't save log to file: ") + fName, _("Warning"), wxICON_EXCLAMATION, - mFrame); + mFrame.get()); return; } } diff --git a/src/AudacityLogger.h b/src/AudacityLogger.h index 120403e0c..473460d94 100644 --- a/src/AudacityLogger.h +++ b/src/AudacityLogger.h @@ -16,6 +16,7 @@ #include "Audacity.h" +#include "MemoryX.h" #include #include #include @@ -46,7 +47,7 @@ class AudacityLogger final : public wxEvtHandler, public wxLog { void OnClear(wxCommandEvent & e); void OnSave(wxCommandEvent & e); - wxFrame *mFrame; + Destroy_ptr mFrame; wxTextCtrl *mText; wxString mBuffer; bool mUpdated; diff --git a/src/WaveClip.cpp b/src/WaveClip.cpp index 7f371fa79..b1bc64667 100644 --- a/src/WaveClip.cpp +++ b/src/WaveClip.cpp @@ -1416,7 +1416,8 @@ bool WaveClip::Paste(double t0, const WaveClip* other) if (clipNeedsResampling || clipNeedsNewFormat) { - newClip.reset(new WaveClip(*other, mSequence->GetDirManager())); + newClip = + std::make_unique(*other, mSequence->GetDirManager()); if (clipNeedsResampling) // The other clip's rate is different from ours, so resample if (!newClip->Resample(mRate)) @@ -1502,7 +1503,7 @@ bool WaveClip::Clear(double t0, double t1) if (clip_t1 > GetEndTime()) clip_t1 = GetEndTime(); - // May delete as we iterate, so don't use range-for + // May DELETE as we iterate, so don't use range-for for (auto it = mCutLines.begin(); it != mCutLines.end();) { WaveClip* clip = it->get(); @@ -1554,7 +1555,7 @@ bool WaveClip::ClearAndAddCutLine(double t0, double t1) newClip->SetOffset(clip_t0-mOffset); // Sort out cutlines that belong to the NEW cutline - // May delete as we iterate, so don't use range-for + // May DELETE as we iterate, so don't use range-for for (auto it = mCutLines.begin(); it != mCutLines.end();) { WaveClip* clip = it->get(); diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 7663fc443..2e5127a25 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -413,7 +413,6 @@ private: CommandManager::CommandManager(): mCurrentID(17000), mCurrentMenuName(COMMAND), - mCurrentMenu(NULL), mDefaultFlags(AlwaysEnabledFlag), mDefaultMask(AlwaysEnabledFlag) { @@ -442,7 +441,6 @@ void CommandManager::PurgeData() mCommandKeyHash.clear(); mCommandIDHash.clear(); - mCurrentMenu = NULL; mCurrentMenuName = COMMAND; mCurrentID = 0; } @@ -504,9 +502,7 @@ wxMenuBar * CommandManager::CurrentMenuBar() const /// void CommandManager::BeginMenu(const wxString & tName) { - wxMenu *tmpMenu = new wxMenu(); - - mCurrentMenu = tmpMenu; + mCurrentMenu = std::make_unique(); mCurrentMenuName = tName; } @@ -519,8 +515,7 @@ void CommandManager::EndMenu() // Add the menu to the menubar after all menu items have been // added to the menu to allow OSX to rearrange special menu // items like Preferences, About, and Quit. - CurrentMenuBar()->Append(mCurrentMenu, mCurrentMenuName); - mCurrentMenu = NULL; + CurrentMenuBar()->Append(mCurrentMenu.release(), mCurrentMenuName); mCurrentMenuName = COMMAND; } @@ -530,14 +525,10 @@ void CommandManager::EndMenu() /// the function's argument. wxMenu* CommandManager::BeginSubMenu(const wxString & tName) { - const auto result = new wxMenu{}; -#ifdef __AUDACITY_OLD_STD__ - mSubMenuList.push_back(SubMenuListEntry{ tName, result }); -#else - mSubMenuList.emplace_back(tName, result); -#endif + mSubMenuList.push_back + (make_movable< SubMenuListEntry > ( tName, std::make_unique() )); mbSeparatorAllowed = false; - return result; + return mSubMenuList.back()->menu.get(); } @@ -548,13 +539,14 @@ wxMenu* CommandManager::BeginSubMenu(const wxString & tName) void CommandManager::EndSubMenu() { //Save the submenu's information - SubMenuListEntry tmpSubMenu = mSubMenuList.back(); + SubMenuListEntry tmpSubMenu { std::move( *mSubMenuList.back() ) }; //Pop off the NEW submenu so CurrentMenu returns the parent of the submenu mSubMenuList.pop_back(); //Add the submenu to the current menu - CurrentMenu()->Append(0, tmpSubMenu.name, tmpSubMenu.menu, tmpSubMenu.name); + CurrentMenu()->Append + (0, tmpSubMenu.name, tmpSubMenu.menu.release(), tmpSubMenu.name); mbSeparatorAllowed = true; } @@ -567,7 +559,7 @@ wxMenu * CommandManager::CurrentSubMenu() const if(mSubMenuList.empty()) return NULL; - return mSubMenuList.back().menu; + return mSubMenuList.back()->menu.get(); } /// @@ -583,7 +575,7 @@ wxMenu * CommandManager::CurrentMenu() const if(!tmpCurrentSubMenu) { - return mCurrentMenu; + return mCurrentMenu.get(); } return tmpCurrentSubMenu; @@ -834,7 +826,7 @@ CommandListEntry *CommandManager::NewIdentifier(const wxString & name, wxString labelPrefix; if (!mSubMenuList.empty()) { - labelPrefix = mSubMenuList.back().name; + labelPrefix = mSubMenuList.back()->name; } // wxMac 2.5 and higher will do special things with the diff --git a/src/commands/CommandManager.h b/src/commands/CommandManager.h index cbecef758..ae0460052 100644 --- a/src/commands/CommandManager.h +++ b/src/commands/CommandManager.h @@ -40,12 +40,14 @@ struct MenuBarListEntry struct SubMenuListEntry { - SubMenuListEntry(const wxString &name_, wxMenu *menu_) - : name(name_), menu(menu_) + SubMenuListEntry(const wxString &name_, std::unique_ptr &&menu_) + : name(name_), menu( std::move(menu_) ) {} + // SubMenuListEntry( SubMenuListEntry&& ) = default; + wxString name; - wxMenu *menu; + std::unique_ptr menu; }; struct CommandListEntry @@ -71,7 +73,9 @@ struct CommandListEntry }; using MenuBarList = std::vector < MenuBarListEntry >; -using SubMenuList = std::vector < SubMenuListEntry >; + +// to do: remove the extra indirection when Mac compiler moves to newer version +using SubMenuList = std::vector < movable_ptr >; // This is an array of pointers, not structures, because the hash maps also point to them, // so we don't want the structures to relocate with vector operations. @@ -109,9 +113,6 @@ class AUDACITY_DLL_API CommandManager final : public XMLTagHandler wxMenu* BeginSubMenu(const wxString & tName); void EndSubMenu(); - void SetToMenu( wxMenu * menu ){ - mCurrentMenu = menu; - }; void InsertItem(const wxString & name, const wxString & label, @@ -311,7 +312,7 @@ private: bool mbSeparatorAllowed; // false at the start of a menu and immediately after a separator. wxString mCurrentMenuName; - wxMenu * mCurrentMenu; + std::unique_ptr mCurrentMenu; CommandFlag mDefaultFlags; CommandMask mDefaultMask; diff --git a/src/effects/AutoDuck.cpp b/src/effects/AutoDuck.cpp index 96dfc26d1..c62d92f90 100644 --- a/src/effects/AutoDuck.cpp +++ b/src/effects/AutoDuck.cpp @@ -384,7 +384,7 @@ bool EffectAutoDuck::Process() if (!cancel) { CopyInputTracks(); // Set up mOutputTracks. - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); Track *iterTrack = iter.First(); int trackNumber = 0; diff --git a/src/effects/ChangeSpeed.cpp b/src/effects/ChangeSpeed.cpp index 8c1cf8c25..422766dab 100644 --- a/src/effects/ChangeSpeed.cpp +++ b/src/effects/ChangeSpeed.cpp @@ -218,7 +218,7 @@ bool EffectChangeSpeed::Process() CopyInputTracks(Track::All); // Set up mOutputTracks. bool bGoodResult = true; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t; mCurTrackNum = 0; mMaxNewLength = 0.0; diff --git a/src/effects/ClickRemoval.cpp b/src/effects/ClickRemoval.cpp index 1c5587f36..c300c6336 100644 --- a/src/effects/ClickRemoval.cpp +++ b/src/effects/ClickRemoval.cpp @@ -162,7 +162,7 @@ bool EffectClickRemoval::Process() bool bGoodResult = true; mbDidSomething = false; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 485aefedc..39438add7 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -94,7 +94,6 @@ Effect::Effect() mWarper = NULL; mTracks = NULL; - mOutputTracks = NULL; mOutputTracksType = Track::None; mT0 = 0.0; mT1 = 0.0; @@ -136,11 +135,6 @@ Effect::Effect() Effect::~Effect() { - if (mOutputTracks) - { - delete mOutputTracks; - } - if (mUIDialog) { mUIDialog->Close(); @@ -1168,11 +1162,7 @@ bool Effect::DoEffect(wxWindow *parent, { wxASSERT(selectedRegion->duration() >= 0.0); - if (mOutputTracks) - { - delete mOutputTracks; - mOutputTracks = NULL; - } + mOutputTracks.reset(); mFactory = factory; mProjectRate = projectRate; @@ -1244,11 +1234,7 @@ bool Effect::DoEffect(wxWindow *parent, End(); - if (mOutputTracks) - { - delete mOutputTracks; - mOutputTracks = NULL; - } + mOutputTracks.reset(); if (returnVal) { @@ -1327,7 +1313,7 @@ bool Effect::ProcessPass() mBufferSize = 0; mBlockSize = 0; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); int count = 0; bool clear = false; Track* t = iter.First(); @@ -2079,7 +2065,7 @@ void Effect::CopyInputTracks(int trackType) mIMap.Clear(); mOMap.Clear(); - mOutputTracks = new TrackList(); + mOutputTracks = std::make_unique(); mOutputTracksType = trackType; //iterate over tracks of type trackType (All types if Track::All) @@ -2201,7 +2187,7 @@ auto Effect::ModifyAnalysisTrack // Else clear and DELETE mOutputTracks copies. void Effect::ReplaceProcessedTracks(const bool bGoodResult) { - wxASSERT(mOutputTracks != NULL); // Make sure we at least did the CopyInputTracks(). + wxASSERT(mOutputTracks); // Make sure we at least did the CopyInputTracks(). if (!bGoodResult) { // Processing failed or was cancelled so throw away the processed tracks. @@ -2277,8 +2263,7 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult) wxASSERT(mOutputTracks->empty()); // The output list is no longer needed - delete mOutputTracks; - mOutputTracks = NULL; + mOutputTracks.reset(); mOutputTracksType = Track::None; } @@ -2665,8 +2650,7 @@ void Effect::Preview(bool dryOnly) FocusDialog->SetFocus(); } - delete mOutputTracks; - mOutputTracks = NULL; + mOutputTracks.reset(); mTracks->Clear(); delete mTracks; diff --git a/src/effects/Effect.h b/src/effects/Effect.h index bf350d5da..9debae0ca 100644 --- a/src/effects/Effect.h +++ b/src/effects/Effect.h @@ -439,7 +439,7 @@ protected: double mSampleRate; TrackFactory *mFactory; TrackList *mTracks; // the complete list of all tracks - TrackList *mOutputTracks; // used only if CopyInputTracks() is called. + std::unique_ptr mOutputTracks; // used only if CopyInputTracks() is called. double mT0; double mT1; #ifdef EXPERIMENTAL_SPECTRAL_EDITING diff --git a/src/effects/Equalization.cpp b/src/effects/Equalization.cpp index 80252128a..f527bfd60 100644 --- a/src/effects/Equalization.cpp +++ b/src/effects/Equalization.cpp @@ -538,7 +538,7 @@ bool EffectEqualization::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Equalization48x.cpp b/src/effects/Equalization48x.cpp index b7799d7da..8be27a314 100644 --- a/src/effects/Equalization48x.cpp +++ b/src/effects/Equalization48x.cpp @@ -353,7 +353,10 @@ bool EffectEqualization48x::TrackCompare() } for(int i=0;i<2;i++) { - SelectedTrackListOfKindIterator iter(Track::Wave, i ? mEffectEqualization->mOutputTracks : &SecondOutputTracks); + SelectedTrackListOfKindIterator iter + (Track::Wave, i + ? mEffectEqualization->mOutputTracks.get() + : &SecondOutputTracks); i?sMathPath=sMathPath:sMathPath=0; WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; @@ -375,7 +378,8 @@ bool EffectEqualization48x::TrackCompare() count++; } } - SelectedTrackListOfKindIterator iter(Track::Wave, mEffectEqualization->mOutputTracks); + SelectedTrackListOfKindIterator + iter(Track::Wave, mEffectEqualization->mOutputTracks.get()); SelectedTrackListOfKindIterator iter2(Track::Wave, &SecondOutputTracks); WaveTrack *track = (WaveTrack *) iter.First(); WaveTrack *track2 = (WaveTrack *) iter2.First(); @@ -440,7 +444,8 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization) if(sMathPath) // !!! Filter MUST BE QUAD WORD ALIGNED !!!! mEffectEqualization->mM=(mEffectEqualization->mM&(~15))+1; AllocateBuffersWorkers(MATH_FUNCTION_THREADED); - SelectedTrackListOfKindIterator iter(Track::Wave, mEffectEqualization->mOutputTracks); + SelectedTrackListOfKindIterator + iter(Track::Wave, mEffectEqualization->mOutputTracks.get()); long times[] = { 0,0,0,0,0 }; wxStopWatch timer; mBenching=true; diff --git a/src/effects/Generator.cpp b/src/effects/Generator.cpp index d36f131cb..4d70e284f 100644 --- a/src/effects/Generator.cpp +++ b/src/effects/Generator.cpp @@ -37,7 +37,7 @@ bool Generator::Process() // Iterate over the tracks bool bGoodResult = true; int ntrack = 0; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t = iter.First(); while (t != NULL) diff --git a/src/effects/NoiseReduction.cpp b/src/effects/NoiseReduction.cpp index e3e28bb1e..15a1b1396 100644 --- a/src/effects/NoiseReduction.cpp +++ b/src/effects/NoiseReduction.cpp @@ -600,7 +600,7 @@ bool EffectNoiseReduction::Process() this->CopyInputTracks(); // Set up mOutputTracks. - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); if (!track) return false; diff --git a/src/effects/NoiseRemoval.cpp b/src/effects/NoiseRemoval.cpp index a4ff604f6..793fe7360 100644 --- a/src/effects/NoiseRemoval.cpp +++ b/src/effects/NoiseRemoval.cpp @@ -212,7 +212,7 @@ bool EffectNoiseRemoval::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Normalize.cpp b/src/effects/Normalize.cpp index bb572b042..481515d1a 100644 --- a/src/effects/Normalize.cpp +++ b/src/effects/Normalize.cpp @@ -159,7 +159,7 @@ bool EffectNormalize::Process() //Iterate over each track this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); WaveTrack *prevTrack; prevTrack = track; diff --git a/src/effects/Paulstretch.cpp b/src/effects/Paulstretch.cpp index 384da80ef..9b33ff252 100644 --- a/src/effects/Paulstretch.cpp +++ b/src/effects/Paulstretch.cpp @@ -150,7 +150,7 @@ double EffectPaulstretch::CalcPreviewInputLength(double previewLength) bool EffectPaulstretch::Process() { CopyInputTracks(); - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); m_t1=mT1; int count=0; diff --git a/src/effects/Repair.cpp b/src/effects/Repair.cpp index 80b57d2ed..6b1167305 100644 --- a/src/effects/Repair.cpp +++ b/src/effects/Repair.cpp @@ -74,7 +74,7 @@ bool EffectRepair::Process() this->CopyInputTracks(); // Set up mOutputTracks. //v This may be too much copying for EffectRepair. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Repeat.cpp b/src/effects/Repeat.cpp index e5cf0534c..dbfa6ba70 100644 --- a/src/effects/Repeat.cpp +++ b/src/effects/Repeat.cpp @@ -104,7 +104,7 @@ bool EffectRepeat::Process() bool bGoodResult = true; double maxDestLen = 0.0; // used to change selection to generated bit - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); for (Track *t = iter.First(); t && bGoodResult; t = iter.Next()) { diff --git a/src/effects/Reverse.cpp b/src/effects/Reverse.cpp index d5f246416..4333efdd9 100644 --- a/src/effects/Reverse.cpp +++ b/src/effects/Reverse.cpp @@ -68,7 +68,7 @@ bool EffectReverse::Process() this->CopyInputTracks(Track::All); // Set up mOutputTracks. bool bGoodResult = true; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track *t = iter.First(); int count = 0; while (t) { diff --git a/src/effects/SBSMSEffect.cpp b/src/effects/SBSMSEffect.cpp index 0cd4e72bf..27279dbb2 100644 --- a/src/effects/SBSMSEffect.cpp +++ b/src/effects/SBSMSEffect.cpp @@ -209,7 +209,7 @@ bool EffectSBSMS::Process() //Iterate over each track //Track::All is needed because this effect needs to introduce silence in the group tracks to keep sync this->CopyInputTracks(Track::All); // Set up mOutputTracks. - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t; mCurTrackNum = 0; diff --git a/src/effects/SimpleMono.cpp b/src/effects/SimpleMono.cpp index 72f8d33a1..25468ff33 100644 --- a/src/effects/SimpleMono.cpp +++ b/src/effects/SimpleMono.cpp @@ -32,7 +32,7 @@ bool EffectSimpleMono::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack* pOutWaveTrack = (WaveTrack*)(iter.First()); mCurTrackNum = 0; while (pOutWaveTrack != NULL) diff --git a/src/effects/SoundTouchEffect.cpp b/src/effects/SoundTouchEffect.cpp index 333c0074c..6f7dc52eb 100644 --- a/src/effects/SoundTouchEffect.cpp +++ b/src/effects/SoundTouchEffect.cpp @@ -64,7 +64,7 @@ bool EffectSoundTouch::Process() this->CopyInputTracks(Track::All); bool bGoodResult = true; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t; mCurTrackNum = 0; m_maxNewLength = 0.0; diff --git a/src/effects/StereoToMono.cpp b/src/effects/StereoToMono.cpp index 31debcd97..288ac17c0 100644 --- a/src/effects/StereoToMono.cpp +++ b/src/effects/StereoToMono.cpp @@ -75,7 +75,7 @@ bool EffectStereoToMono::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); mLeftTrack = (WaveTrack *)iter.First(); bool refreshIter = false; diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index 1be71cfa2..c97d8b266 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -305,7 +305,7 @@ bool EffectTruncSilence::ProcessIndependently() { unsigned iGroup = 0; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); for (Track *track = iter.First(); track; ++iGroup, track = iter.Next(true) // skip linked tracks ) { @@ -314,12 +314,12 @@ bool EffectTruncSilence::ProcessIndependently() RegionList silences; - if (!FindSilences(silences, mOutputTracks, track, last)) + if (!FindSilences(silences, mOutputTracks.get(), track, last)) return false; // Treat tracks in the sync lock group only Track *groupFirst, *groupLast; if (syncLock) { - SyncLockedTracksIterator syncIter(mOutputTracks); + SyncLockedTracksIterator syncIter(mOutputTracks.get()); groupFirst = syncIter.StartWith(track); groupLast = syncIter.Last(); } @@ -350,7 +350,7 @@ bool EffectTruncSilence::ProcessAll() SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); if (FindSilences(silences, mTracks, iter.First(), iter.Last())) { - TrackListIterator iterOut(mOutputTracks); + TrackListIterator iterOut(mOutputTracks.get()); double totalCutLen = 0.0; Track *const first = iterOut.First(); if (DoRemoval(silences, 0, 1, first, iterOut.Last(), totalCutLen)) { @@ -469,7 +469,7 @@ bool EffectTruncSilence::DoRemoval double cutLen = inLength - outLength; totalCutLen += cutLen; - TrackListIterator iterOut(mOutputTracks); + TrackListIterator iterOut(mOutputTracks.get()); bool lastSeen = false; for (Track *t = iterOut.StartWith(firstTrack); t && !lastSeen; t = iterOut.Next()) { diff --git a/src/effects/TwoPassSimpleMono.cpp b/src/effects/TwoPassSimpleMono.cpp index d1dbefd6e..4c3362d2f 100644 --- a/src/effects/TwoPassSimpleMono.cpp +++ b/src/effects/TwoPassSimpleMono.cpp @@ -47,7 +47,7 @@ bool EffectTwoPassSimpleMono::Process() bool EffectTwoPassSimpleMono::ProcessPass() { //Iterate over each track - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); mCurTrackNum = 0; while (track) { diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 796636deb..54e68c804 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -456,7 +456,7 @@ bool NyquistEffect::Process() // correct sync-lock group behavior when the timeline is affected; then we just want // to operate on the selected wave tracks CopyInputTracks(Track::All); - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); mCurTrack[0] = (WaveTrack *) iter.First(); mOutputTime = 0; mCount = 0; @@ -472,7 +472,7 @@ bool NyquistEffect::Process() mTrackIndex = 0; mNumSelectedChannels = 0; - SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks.get()); for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) { mNumSelectedChannels++; if (mT1 >= mT0) { @@ -620,7 +620,7 @@ bool NyquistEffect::Process() } // Check whether we're in the same group as the last selected track - SyncLockedTracksIterator gIter(mOutputTracks); + SyncLockedTracksIterator gIter(mOutputTracks.get()); Track *gt = gIter.StartWith(mCurTrack[0]); mFirstInGroup = !gtLast || (gtLast != gt); gtLast = gt; @@ -1110,7 +1110,7 @@ bool NyquistEffect::ProcessOne() unsigned int l; LabelTrack *ltrack = NULL; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); for (Track *t = iter.First(); t; t = iter.Next()) { if (t->GetKind() == Track::Label) { ltrack = (LabelTrack *)t; @@ -1225,7 +1225,7 @@ bool NyquistEffect::ProcessOne() // If we were first in the group adjust non-selected group tracks if (mFirstInGroup) { - SyncLockedTracksIterator git(mOutputTracks); + SyncLockedTracksIterator git(mOutputTracks.get()); Track *t; for (t = git.StartWith(mCurTrack[i]); t; t = git.Next()) {