From 637ce894c13a18d4191fb5efdf8732959017cc23 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 19 Sep 2020 21:13:45 -0400 Subject: [PATCH] Pass project to TrackShifter factory, which LabelTrackShifter will need --- src/menus/ClipMenus.cpp | 10 +++++----- .../playabletrack/notetrack/ui/NoteTrackView.cpp | 2 +- .../playabletrack/wavetrack/ui/WaveTrackView.cpp | 2 +- src/tracks/ui/TimeShiftHandle.cpp | 9 +++++---- src/tracks/ui/TimeShiftHandle.h | 3 ++- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/menus/ClipMenus.cpp b/src/menus/ClipMenus.cpp index 8bf81d2cf..885de58ca 100644 --- a/src/menus/ClipMenus.cpp +++ b/src/menus/ClipMenus.cpp @@ -627,10 +627,10 @@ void DoCursorClipBoundary } // This function returns the amount moved. Possibly 0.0. -double DoClipMove - ( ViewInfo &viewInfo, Track *track, +double DoClipMove( AudacityProject &project, Track *track, TrackList &trackList, bool syncLocked, bool right ) { + auto &viewInfo = ViewInfo::Get(project); auto &selectedRegion = viewInfo.selectedRegion; if (track) { @@ -642,7 +642,7 @@ double DoClipMove // Find the first channel that has a clip at time t0 for (auto channel : TrackList::Channels(track) ) { - uShifter = MakeTrackShifter::Call( *track ); + uShifter = MakeTrackShifter::Call( *track, project ); if( uShifter->HitTest( t0 ) == TrackShifter::HitTestResult::Miss ) uShifter.reset(); else @@ -653,7 +653,7 @@ double DoClipMove return 0.0; auto pShifter = uShifter.get(); - state.Init( *track, std::move( uShifter ), + state.Init( project, *track, std::move( uShifter ), t0, viewInfo, trackList, syncLocked ); auto desiredT0 = viewInfo.OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); @@ -700,7 +700,7 @@ void DoClipLeftOrRight auto &tracks = TrackList::Get( project ); auto isSyncLocked = settings.IsSyncLocked(); - auto amount = DoClipMove( viewInfo, trackFocus.Get(), + auto amount = DoClipMove( project, trackFocus.Get(), tracks, isSyncLocked, right ); window.ScrollIntoView(selectedRegion.t0()); diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp index 096af6e50..ae5753a72 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp @@ -760,7 +760,7 @@ private: using MakeNoteTrackShifter = MakeTrackShifter::Override; template<> template<> auto MakeNoteTrackShifter::Implementation() -> Function { - return [](NoteTrack &track) { + return [](NoteTrack &track, AudacityProject&) { return std::make_unique(track); }; } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index 72520ed34..a5f4c0482 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -1458,7 +1458,7 @@ private: using MakeWaveTrackShifter = MakeTrackShifter::Override; template<> template<> auto MakeWaveTrackShifter::Implementation() -> Function { - return [](WaveTrack &track) { + return [](WaveTrack &track, AudacityProject&) { return std::make_unique(track); }; } diff --git a/src/tracks/ui/TimeShiftHandle.cpp b/src/tracks/ui/TimeShiftHandle.cpp index f4860796e..ff495e2ad 100644 --- a/src/tracks/ui/TimeShiftHandle.cpp +++ b/src/tracks/ui/TimeShiftHandle.cpp @@ -252,12 +252,13 @@ bool CoarseTrackShifter::SyncLocks() } template<> auto MakeTrackShifter::Implementation() -> Function { - return [](Track &track) { + return [](Track &track, AudacityProject&) { return std::make_unique(track); }; } void ClipMoveState::Init( + AudacityProject &project, Track &capturedTrack, std::unique_ptr pHit, double clickTime, @@ -285,7 +286,7 @@ void ClipMoveState::Init( for ( auto track : trackList.Any() ) { auto &pShifter = state.shifters[track]; if (!pShifter) - pShifter = MakeTrackShifter::Call( *track ); + pShifter = MakeTrackShifter::Call( *track, project ); } // Analogy of the steps above, but with TrackShifters, follows below @@ -459,7 +460,7 @@ UIHandle::Result TimeShiftHandle::Click bool captureClips = false; - auto pShifter = MakeTrackShifter::Call( *pTrack ); + auto pShifter = MakeTrackShifter::Call( *pTrack, *pProject ); if (!event.ShiftDown()) { TrackShifter::HitTestParams params{ @@ -481,7 +482,7 @@ UIHandle::Result TimeShiftHandle::Click // As in the default above: just do shifting of one whole track } - mClipMoveState.Init( *pTrack, + mClipMoveState.Init( *pProject, *pTrack, captureClips ? std::move( pShifter ) : nullptr, clickTime, diff --git a/src/tracks/ui/TimeShiftHandle.h b/src/tracks/ui/TimeShiftHandle.h index 76b92f4aa..fde2da10f 100644 --- a/src/tracks/ui/TimeShiftHandle.h +++ b/src/tracks/ui/TimeShiftHandle.h @@ -183,7 +183,7 @@ private: struct MakeTrackShifterTag; using MakeTrackShifter = AttachedVirtualFunction< - MakeTrackShifterTag, std::unique_ptr, Track>; + MakeTrackShifterTag, std::unique_ptr, Track, AudacityProject&>; class ViewInfo; @@ -192,6 +192,7 @@ struct ClipMoveState { //! Will associate a TrackShifter with each track in the list void Init( + AudacityProject &project, Track &capturedTrack, // pHit, /*!< If null, only capturedTrack (with any sister channels) shifts, as a whole */