diff --git a/src/LabelTrack.cpp b/src/LabelTrack.cpp index e5f3d8944..1d9aa3e1c 100644 --- a/src/LabelTrack.cpp +++ b/src/LabelTrack.cpp @@ -103,7 +103,7 @@ int LabelTrack::mFontHeight=-1; static ProjectFileIORegistry::Entry registerFactory{ wxT( "labeltrack" ), []( AudacityProject &project ){ - auto &trackFactory = *project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto &tracks = TrackList::Get( project ); return tracks.Add(trackFactory.NewLabelTrack()); } @@ -3088,11 +3088,11 @@ void LabelTrack::DoEditLabels auto format = project.GetSelectionFormat(), freqFormat = project.GetFrequencySelectionFormatName(); auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto rate = project.GetRate(); auto &viewInfo = ViewInfo::Get( project ); - LabelDialog dlg(&project, *trackFactory, &tracks, + LabelDialog dlg(&project, trackFactory, &tracks, lt, index, viewInfo, rate, format, freqFormat); diff --git a/src/NoteTrack.cpp b/src/NoteTrack.cpp index e160d6178..a222e8c51 100644 --- a/src/NoteTrack.cpp +++ b/src/NoteTrack.cpp @@ -33,7 +33,6 @@ #include "AColor.h" #include "DirManager.h" #include "Prefs.h" -#include "Project.h" #include "ProjectFileIORegistry.h" #include "InconsistencyException.h" @@ -107,7 +106,7 @@ SONFNS(AutoSave) static ProjectFileIORegistry::Entry registerFactory{ wxT( "notetrack" ), []( AudacityProject &project ){ - auto &trackFactory = *project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto &tracks = TrackList::Get( project ); return tracks.Add(trackFactory.NewNoteTrack()); } diff --git a/src/Project.cpp b/src/Project.cpp index 3482d077c..7af6ec070 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -1352,10 +1352,6 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, #endif mIconized = false; - auto &dirManager = DirManager::Get( project ); - mTrackFactory.reset( - safenew TrackFactory{ dirManager.shared_from_this(), &viewInfo }); - int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -1, 150}; mStatusBar->SetStatusWidths(4, widths); wxString msg = wxString::Format(_("Welcome to Audacity version %s"), @@ -1496,11 +1492,6 @@ void AudacityProject::OnThemeChange(wxCommandEvent& evt) GetRulerPanel()->ReCreateButtons(); } -TrackFactory *AudacityProject::GetTrackFactory() -{ - return mTrackFactory.get(); -} - AdornedRulerPanel *AudacityProject::GetRulerPanel() { return mRuler; @@ -2664,7 +2655,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) DestroyChildren(); - mTrackFactory.reset(); + TrackFactory::Destroy( project ); mTags.reset(); @@ -4107,6 +4098,7 @@ bool AudacityProject::SaveCopyWaveTracks(const FilePath & strProjectPathName, { auto &project = *this; auto &tracks = TrackList::Get( project ); + auto &trackFactory = TrackFactory::Get( project ); wxString extension, fileFormat; #ifdef USE_LIBVORBIS @@ -4134,7 +4126,7 @@ bool AudacityProject::SaveCopyWaveTracks(const FilePath & strProjectPathName, for (auto pWaveTrack : trackRange) { numWaveTracks++; - pSavedTrackList.Add(mTrackFactory->DuplicateWaveTrack(*pWaveTrack)); + pSavedTrackList.Add( trackFactory.DuplicateWaveTrack( *pWaveTrack ) ); } auto cleanup = finally( [&] { // Restore the saved track states and clean up. @@ -4343,7 +4335,7 @@ bool AudacityProject::Import(const FilePath &fileName, WaveTrackArray* pTrackArr mTags ? mTags->Duplicate() : decltype(mTags){} ); bool success = Importer::Get().Import(fileName, - GetTrackFactory(), + &TrackFactory::Get( project ), newTracks, mTags.get(), errorMessage); @@ -5246,7 +5238,7 @@ void AudacityProject::OnAudioIOStopRecording() auto &intervals = gAudioIO->LostCaptureIntervals(); if (intervals.size()) { // Make a track with labels for recording errors - auto uTrack = GetTrackFactory()->NewLabelTrack(); + auto uTrack = TrackFactory::Get( project ).NewLabelTrack(); auto pTrack = uTrack.get(); tracks.Add( uTrack ); /* i18n-hint: A name given to a track, appearing as its menu button. @@ -5363,9 +5355,8 @@ void AudacityProject::ResetProjectToEmpty() { TrackActions::DoRemoveTracks( project ); // A new DirManager. - auto &dirManager = DirManager::Reset( project ); - mTrackFactory.reset( - safenew TrackFactory{ dirManager.shared_from_this(), &viewInfo }); + DirManager::Reset( project ); + TrackFactory::Reset( project ); projectFileIO.ResetProjectFileIO(); diff --git a/src/Project.h b/src/Project.h index ff8046457..7efc204c5 100644 --- a/src/Project.h +++ b/src/Project.h @@ -208,7 +208,6 @@ class AUDACITY_DLL_API AudacityProject final : public wxFrame, void SetPlayRegionLocked(bool value) { mLockPlayRegion = value; } wxString GetProjectName() const; - TrackFactory *GetTrackFactory(); AdornedRulerPanel *GetRulerPanel(); Tags *GetTags(); const Tags *GetTags() const; @@ -569,7 +568,6 @@ private: wxPanel *mTopPanel{}; TrackPanel *mTrackPanel{}; SelectionState mSelectionState{}; - std::unique_ptr mTrackFactory; wxWindow * mMainPage; wxPanel * mMainPanel; wxScrollBar *mHsbar; diff --git a/src/TimeTrack.cpp b/src/TimeTrack.cpp index 9bafbfae3..f2b85f7e1 100644 --- a/src/TimeTrack.cpp +++ b/src/TimeTrack.cpp @@ -44,7 +44,7 @@ std::shared_ptr TrackFactory::NewTimeTrack() static ProjectFileIORegistry::Entry registerFactory{ wxT( "timetrack" ), []( AudacityProject &project ){ - auto &trackFactory = *project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto &tracks = TrackList::Get( project ); return tracks.Add(trackFactory.NewTimeTrack()); } diff --git a/src/Track.cpp b/src/Track.cpp index 9038f9573..5bce3bf32 100644 --- a/src/Track.cpp +++ b/src/Track.cpp @@ -1406,3 +1406,37 @@ TransportTracks GetAllPlaybackTracks(TrackList &trackList, bool selectedOnly, bo #endif return result; } + +#include "ViewInfo.h" +static auto TrackFactoryFactory = []( AudacityProject &project ) { + auto &dirManager = DirManager::Get( project ); + auto &viewInfo = ViewInfo::Get( project ); + return std::make_shared< TrackFactory >( + dirManager.shared_from_this(), &viewInfo ); +}; + +static const AudacityProject::AttachedObjects::RegisteredFactory key2{ + TrackFactoryFactory +}; + +TrackFactory &TrackFactory::Get( AudacityProject &project ) +{ + return project.AttachedObjects::Get< TrackFactory >( key2 ); +} + +const TrackFactory &TrackFactory::Get( const AudacityProject &project ) +{ + return Get( const_cast< AudacityProject & >( project ) ); +} + +TrackFactory &TrackFactory::Reset( AudacityProject &project ) +{ + auto result = TrackFactoryFactory( project ); + project.AttachedObjects::Assign( key2, result ); + return *result; +} + +void TrackFactory::Destroy( AudacityProject &project ) +{ + project.AttachedObjects::Assign( key2, nullptr ); +} diff --git a/src/Track.h b/src/Track.h index 2cc03df02..6442734b8 100644 --- a/src/Track.h +++ b/src/Track.h @@ -1620,15 +1620,22 @@ private: std::vector< Updater > mUpdaters; }; -class AUDACITY_DLL_API TrackFactory +class AUDACITY_DLL_API TrackFactory final + : public ClientData::Base { - private: + public: + static TrackFactory &Get( AudacityProject &project ); + static const TrackFactory &Get( const AudacityProject &project ); + static TrackFactory &Reset( AudacityProject &project ); + static void Destroy( AudacityProject &project ); + TrackFactory(const std::shared_ptr &dirManager, const ZoomInfo *zoomInfo): mDirManager(dirManager) , mZoomInfo(zoomInfo) { } + private: const std::shared_ptr mDirManager; const ZoomInfo *const mZoomInfo; friend class AudacityProject; diff --git a/src/WaveTrack.cpp b/src/WaveTrack.cpp index 7a8ab3e30..bdc78448c 100644 --- a/src/WaveTrack.cpp +++ b/src/WaveTrack.cpp @@ -73,7 +73,7 @@ using std::max; static ProjectFileIORegistry::Entry registerFactory{ wxT( "wavetrack" ), []( AudacityProject &project ){ - auto &trackFactory = *project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto &tracks = TrackList::Get( project ); return tracks.Add(trackFactory.NewWaveTrack()); } @@ -1204,10 +1204,8 @@ void WaveTrack::SyncLockAdjust(double oldT1, double newT1) AudacityProject *p = GetActiveProject(); if (!p) THROW_INCONSISTENCY_EXCEPTION; - TrackFactory *f = p->GetTrackFactory(); - if (!f) - THROW_INCONSISTENCY_EXCEPTION; - auto tmp = f->NewWaveTrack(GetSampleFormat(), GetRate()); + auto &factory = TrackFactory::Get( *p ); + auto tmp = factory.NewWaveTrack( GetSampleFormat(), GetRate() ); tmp->InsertSilence(0.0, newT1 - oldT1); tmp->Flush(); diff --git a/src/effects/Equalization.cpp b/src/effects/Equalization.cpp index e14cbbc4e..1dd056594 100644 --- a/src/effects/Equalization.cpp +++ b/src/effects/Equalization.cpp @@ -1092,7 +1092,7 @@ bool EffectEqualization::ProcessOne(int count, WaveTrack * t, { // create a NEW WaveTrack to hold all of the output, including 'tails' each end AudacityProject *p = GetActiveProject(); - auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); wxASSERT(mM - 1 < windowSize); size_t L = windowSize - (mM - 1); //Process L samples at a go diff --git a/src/effects/Equalization48x.cpp b/src/effects/Equalization48x.cpp index d91a44094..ffa7467e8 100644 --- a/src/effects/Equalization48x.cpp +++ b/src/effects/Equalization48x.cpp @@ -411,7 +411,7 @@ bool EffectEqualization48x::DeltaTrack( Floats buffer2{ trackBlockSize }; AudacityProject *p = GetActiveProject(); - auto output=p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); auto originalLen = len; auto currentSample = start; @@ -628,7 +628,7 @@ bool EffectEqualization48x::ProcessOne1x(int count, WaveTrack * t, auto trackBlockSize = t->GetMaxBlockSize(); AudacityProject *p = GetActiveProject(); - auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); mEffectEqualization->TrackProgress(count, 0.0); int subBufferSize=mBufferCount==8?(mSubBufferSize>>1):mSubBufferSize; // half the buffers if avx is active @@ -815,7 +815,7 @@ bool EffectEqualization48x::ProcessOne4x(int count, WaveTrack * t, auto trackBlockSize = t->GetMaxBlockSize(); AudacityProject *p = GetActiveProject(); - auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); mEffectEqualization->TrackProgress(count, 0.0); auto bigRuns = len/(subBufferSize-mBlockSize); @@ -905,7 +905,7 @@ bool EffectEqualization48x::ProcessOne1x4xThreaded(int count, WaveTrack * t, mEQWorkers[i].mProcessingType=processingType; AudacityProject *p = GetActiveProject(); - auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); auto trackBlockSize = t->GetMaxBlockSize(); mEffectEqualization->TrackProgress(count, 0.0); @@ -1151,7 +1151,7 @@ bool EffectEqualization48x::ProcessOne8x(int count, WaveTrack * t, auto trackBlockSize = t->GetMaxBlockSize(); AudacityProject *p = GetActiveProject(); - auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); mEffectEqualization->TrackProgress(count, 0.0); int bigRuns=len/(mSubBufferSize-mBlockSize); @@ -1203,7 +1203,7 @@ bool EffectEqualization48x::ProcessOne8xThreaded(int count, WaveTrack * t, return ProcessOne4x(count, t, start, len); AudacityProject *p = GetActiveProject(); - auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate()); + auto output = TrackFactory::Get( *p ).NewWaveTrack(floatSample, t->GetRate()); auto trackBlockSize = t->GetMaxBlockSize(); mEffectEqualization->TrackProgress(count, 0.0); diff --git a/src/effects/StereoToMono.cpp b/src/effects/StereoToMono.cpp index 1b4dc4883..0fafb1df7 100644 --- a/src/effects/StereoToMono.cpp +++ b/src/effects/StereoToMono.cpp @@ -135,7 +135,7 @@ bool EffectStereoToMono::ProcessOne(int count) AudacityProject *p = GetActiveProject(); auto outTrack = - p->GetTrackFactory()->NewWaveTrack(floatSample, mLeftTrack->GetRate()); + TrackFactory::Get( *p ).NewWaveTrack(floatSample, mLeftTrack->GetRate()); while (index < mEnd) { bResult &= mLeftTrack->Get((samplePtr)leftBuffer.get(), floatSample, index, idealBlockLen); diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index 57a3aef10..b7ec80860 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -70,7 +70,7 @@ bool DoPasteText(AudacityProject &project) bool DoPasteNothingSelected(AudacityProject &project) { auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto trackPanel = project.GetTrackPanel(); auto &selectedRegion = ViewInfo::Get( project ).selectedRegion; @@ -96,25 +96,25 @@ bool DoPasteNothingSelected(AudacityProject &project) // Cause duplication of block files on disk, when copy is // between projects locker.create(wc); - uNewTrack = trackFactory->NewWaveTrack( + uNewTrack = trackFactory.NewWaveTrack( wc->GetSampleFormat(), wc->GetRate()), pNewTrack = uNewTrack.get(); }, #ifdef USE_MIDI [&](const NoteTrack *) { - uNewTrack = trackFactory->NewNoteTrack(), + uNewTrack = trackFactory.NewNoteTrack(), pNewTrack = uNewTrack.get(); }, #endif [&](const LabelTrack *) { - uNewTrack = trackFactory->NewLabelTrack(), + uNewTrack = trackFactory.NewLabelTrack(), pNewTrack = uNewTrack.get(); }, [&](const TimeTrack *) { // Maintain uniqueness of the time track! pNewTrack = tracks.GetTimeTrack(); if (!pNewTrack) - uNewTrack = trackFactory->NewTimeTrack(), + uNewTrack = trackFactory.NewTimeTrack(), pNewTrack = uNewTrack.get(); } ); @@ -429,7 +429,7 @@ void OnPaste(const CommandContext &context) auto &project = context.project; auto &tracks = TrackList::Get( project ); auto trackPanel = project.GetTrackPanel(); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto &selectedRegion = ViewInfo::Get( project ).selectedRegion; auto isSyncLocked = project.IsSyncLocked(); @@ -643,7 +643,7 @@ void OnPaste(const CommandContext &context) wt->ClearAndPaste(t0, t1, wc, true, true); } else { - auto tmp = trackFactory->NewWaveTrack( + auto tmp = trackFactory.NewWaveTrack( wt->GetSampleFormat(), wt->GetRate()); tmp->InsertSilence( 0.0, // MJS: Is this correct? diff --git a/src/menus/FileMenus.cpp b/src/menus/FileMenus.cpp index 6beacc4e9..706034af8 100644 --- a/src/menus/FileMenus.cpp +++ b/src/menus/FileMenus.cpp @@ -119,7 +119,7 @@ AudacityProject *DoImportMIDI( auto cleanup = finally( [&] { if ( pNewProject ) pNewProject->Close(true); } ); - auto newTrack = pProject->GetTrackFactory()->NewNoteTrack(); + auto newTrack = TrackFactory::Get( *pProject ).NewNoteTrack(); if (::ImportMIDI(fileName, newTrack.get())) { @@ -439,7 +439,7 @@ void OnImport(const CommandContext &context) void OnImportLabels(const CommandContext &context) { auto &project = context.project; - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto &tracks = TrackList::Get( project ); wxString fileName = @@ -462,7 +462,7 @@ void OnImportLabels(const CommandContext &context) return; } - auto newTrack = trackFactory->NewLabelTrack(); + auto newTrack = trackFactory.NewLabelTrack(); wxString sTrackName; wxFileName::SplitPath(fileName, NULL, NULL, &sTrackName, NULL); newTrack->SetName(sTrackName); @@ -502,7 +502,7 @@ void OnImportMIDI(const CommandContext &context) void OnImportRaw(const CommandContext &context) { auto &project = context.project; - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); wxString fileName = FileNames::SelectFile(FileNames::Operation::Open, @@ -519,7 +519,7 @@ void OnImportRaw(const CommandContext &context) TrackHolders newTracks; - ::ImportRaw(&project, fileName, trackFactory, newTracks); + ::ImportRaw(&project, fileName, &trackFactory, newTracks); if (newTracks.size() <= 0) return; diff --git a/src/menus/LabelMenus.cpp b/src/menus/LabelMenus.cpp index 0e7e8ca0c..2fda41c6b 100644 --- a/src/menus/LabelMenus.cpp +++ b/src/menus/LabelMenus.cpp @@ -20,7 +20,7 @@ int DoAddLabel( { auto &tracks = TrackList::Get( project ); auto trackPanel = project.GetTrackPanel(); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); wxString title; // of label @@ -43,7 +43,7 @@ int DoAddLabel( // If none found, start a NEW label track and use it if (!lt) - lt = tracks.Add(trackFactory->NewLabelTrack()); + lt = tracks.Add( trackFactory.NewLabelTrack() ); // LLL: Commented as it seemed a little forceful to remove users // selection when adding the label. This does not happen if @@ -281,7 +281,7 @@ void OnPasteNewLabel(const CommandContext &context) { auto &project = context.project; auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto trackPanel = project.GetTrackPanel(); auto &selectedRegion = ViewInfo::Get( project ).selectedRegion; @@ -298,9 +298,8 @@ void OnPasteNewLabel(const CommandContext &context) .Filter(); // If no match found, add one - if (!t) { - t = tracks.Add(trackFactory->NewLabelTrack()); - } + if (!t) + t = tracks.Add( trackFactory.NewLabelTrack() ); // Select this track so the loop picks it up t->SetSelected(true); diff --git a/src/menus/PluginMenus.cpp b/src/menus/PluginMenus.cpp index 5d820a9c7..c02f230f9 100644 --- a/src/menus/PluginMenus.cpp +++ b/src/menus/PluginMenus.cpp @@ -396,7 +396,7 @@ bool DoEffect( AudacityProject &project = context.project; auto &tracks = TrackList::Get( project ); auto trackPanel = project.GetTrackPanel(); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto rate = project.GetRate(); auto &selectedRegion = ViewInfo::Get( project ).selectedRegion; auto &commandManager = CommandManager::Get( project ); @@ -448,7 +448,7 @@ bool DoEffect( EffectManager & em = EffectManager::Get(); success = em.DoEffect(ID, &project, rate, - &tracks, trackFactory, &selectedRegion, + &tracks, &trackFactory, &selectedRegion, (flags & kConfigured) == 0); if (!success) diff --git a/src/menus/TrackMenus.cpp b/src/menus/TrackMenus.cpp index e1198bdfa..0abbf7f42 100644 --- a/src/menus/TrackMenus.cpp +++ b/src/menus/TrackMenus.cpp @@ -39,7 +39,7 @@ void DoMixAndRender (AudacityProject &project, bool toNewTrack) { auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto rate = project.GetRate(); auto defaultFormat = project.GetDefaultFormat(); auto trackPanel = project.GetTrackPanel(); @@ -48,7 +48,7 @@ void DoMixAndRender WaveTrack::Holder uNewLeft, uNewRight; ::MixAndRender( - &tracks, trackFactory, rate, defaultFormat, 0.0, 0.0, uNewLeft, uNewRight); + &tracks, &trackFactory, rate, defaultFormat, 0.0, 0.0, uNewLeft, uNewRight); if (uNewLeft) { // Remove originals, get stats on what tracks were mixed @@ -796,12 +796,12 @@ void OnNewWaveTrack(const CommandContext &context) { auto &project = context.project; auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto trackPanel = project.GetTrackPanel(); auto defaultFormat = project.GetDefaultFormat(); auto rate = project.GetRate(); - auto t = tracks.Add(trackFactory->NewWaveTrack(defaultFormat, rate)); + auto t = tracks.Add( trackFactory.NewWaveTrack( defaultFormat, rate ) ); SelectActions::SelectNone( project ); t->SetSelected(true); @@ -816,17 +816,17 @@ void OnNewStereoTrack(const CommandContext &context) { auto &project = context.project; auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto trackPanel = project.GetTrackPanel(); auto defaultFormat = project.GetDefaultFormat(); auto rate = project.GetRate(); SelectActions::SelectNone( project ); - auto left = tracks.Add(trackFactory->NewWaveTrack(defaultFormat, rate)); + auto left = tracks.Add( trackFactory.NewWaveTrack( defaultFormat, rate ) ); left->SetSelected(true); - auto right = tracks.Add(trackFactory->NewWaveTrack(defaultFormat, rate)); + auto right = tracks.Add( trackFactory.NewWaveTrack( defaultFormat, rate ) ); right->SetSelected(true); tracks.GroupChannels(*left, 2); @@ -841,10 +841,10 @@ void OnNewLabelTrack(const CommandContext &context) { auto &project = context.project; auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto trackPanel = project.GetTrackPanel(); - auto t = tracks.Add(trackFactory->NewLabelTrack()); + auto t = tracks.Add( trackFactory.NewLabelTrack() ); SelectActions::SelectNone( project ); @@ -860,7 +860,7 @@ void OnNewTimeTrack(const CommandContext &context) { auto &project = context.project; auto &tracks = TrackList::Get( project ); - auto trackFactory = project.GetTrackFactory(); + auto &trackFactory = TrackFactory::Get( project ); auto trackPanel = project.GetTrackPanel(); if (tracks.GetTimeTrack()) { @@ -868,7 +868,7 @@ void OnNewTimeTrack(const CommandContext &context) return; } - auto t = tracks.AddToHead(trackFactory->NewTimeTrack()); + auto t = tracks.AddToHead( trackFactory.NewTimeTrack() ); SelectActions::SelectNone( project ); diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index a4e347668..95693cb88 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -1144,7 +1144,7 @@ bool ControlToolBar::DoRecord(AudacityProject &project, // Pad the recording track with silence, up to the // maximum time. - auto newTrack = p->GetTrackFactory()->NewWaveTrack(); + auto newTrack = TrackFactory::Get( *p ).NewWaveTrack(); newTrack->SetWaveColorIndex( wt->GetWaveColorIndex() ); newTrack->InsertSilence(0.0, t0 - endTime); newTrack->Flush(); @@ -1178,7 +1178,7 @@ bool ControlToolBar::DoRecord(AudacityProject &project, Track *first {}; for (int c = 0; c < recordingChannels; c++) { - auto newTrack = p->GetTrackFactory()->NewWaveTrack(); + auto newTrack = TrackFactory::Get( *p ).NewWaveTrack(); if (!first) first = newTrack.get(); diff --git a/src/toolbars/TranscriptionToolBar.cpp b/src/toolbars/TranscriptionToolBar.cpp index 1d0327efa..4a3313c01 100644 --- a/src/toolbars/TranscriptionToolBar.cpp +++ b/src/toolbars/TranscriptionToolBar.cpp @@ -453,7 +453,7 @@ void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview) { // Create a TimeTrack if we haven't done so already if (!mTimeTrack) { - mTimeTrack = p->GetTrackFactory()->NewTimeTrack(); + mTimeTrack = TrackFactory::Get( *p ).NewTimeTrack(); if (!mTimeTrack) { return; }