From 62fe78b0ef2b1185963b35499a7e75fff67665b6 Mon Sep 17 00:00:00 2001 From: Vitaly Sverchinsky Date: Thu, 19 Aug 2021 20:46:48 +0300 Subject: [PATCH] Affordance cell reference removed from TrackView Subclasses should provide instances instead (cherry picked from audacity commit bc8c6d4ccc6ffffa1fb1b30f3a9a5fe578f74ec1) Signed-off-by: akleja --- .../playabletrack/notetrack/ui/NoteTrackView.cpp | 8 ++++++-- src/tracks/playabletrack/notetrack/ui/NoteTrackView.h | 4 +++- .../playabletrack/wavetrack/ui/WaveTrackView.cpp | 11 +++++++++-- src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h | 7 ++++++- src/tracks/ui/TrackView.cpp | 9 +-------- src/tracks/ui/TrackView.h | 9 +++------ 6 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp index 9ca3ac9b8..452cf1bff 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp @@ -76,9 +76,13 @@ std::shared_ptr NoteTrackView::DoGetVRulerControls() #define TIME_TO_X(t) (zoomInfo.TimeToPosition((t), rect.x)) #define X_TO_TIME(xx) (zoomInfo.PositionToTime((xx), rect.x)) -std::shared_ptr NoteTrackView::DoGetAffordanceControls() +std::shared_ptr NoteTrackView::GetAffordanceControls() { - return std::make_shared(DoFindTrack()); + if (mpAffordanceCellControl == nullptr) + { + mpAffordanceCellControl = std::make_shared(DoFindTrack()); + } + return mpAffordanceCellControl; } namespace { diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.h b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.h index a43c10fec..2e41b8c98 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.h +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.h @@ -25,7 +25,7 @@ public: private: std::shared_ptr DoGetVRulerControls() override; - std::shared_ptr DoGetAffordanceControls() override; + std::shared_ptr GetAffordanceControls() override; std::vector DetailedHitTest (const TrackPanelMouseState &state, @@ -36,5 +36,7 @@ private: void Draw( TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass ) override; + + std::shared_ptr mpAffordanceCellControl; }; #endif diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index be53838b5..76d52d85a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -1085,9 +1085,9 @@ WaveTrackView::GetAllSubViews() return results; } -std::shared_ptr WaveTrackView::DoGetAffordanceControls() +std::shared_ptr WaveTrackView::GetAffordanceControls() { - return std::make_shared(FindTrack()); + return DoGetAffordance(FindTrack()); } void WaveTrackView::DoSetMinimized( bool minimized ) @@ -1101,6 +1101,13 @@ void WaveTrackView::DoSetMinimized( bool minimized ) } ); } +std::shared_ptr WaveTrackView::DoGetAffordance(const std::shared_ptr& track) +{ + if (mpAffordanceCellControl == nullptr) + mpAffordanceCellControl = std::make_shared(track); + return mpAffordanceCellControl; +} + using DoGetWaveTrackView = DoGetView::Override< WaveTrack >; template<> template<> auto DoGetWaveTrackView::Implementation() -> Function { return [](WaveTrack &track) { diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h index cc6fe2db0..17a3fb65c 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h @@ -158,7 +158,7 @@ private: Refinement GetSubViews(const wxRect& rect) override; protected: - std::shared_ptr DoGetAffordanceControls() override; + std::shared_ptr GetAffordanceControls() override; void DoSetMinimized( bool minimized ) override; @@ -169,6 +169,11 @@ protected: mutable wxCoord mLastHeight{}; bool mMultiView{ false }; + +private: + std::shared_ptr DoGetAffordance(const std::shared_ptr& track); + + std::shared_ptr mpAffordanceCellControl; }; // Helper for drawing routines diff --git a/src/tracks/ui/TrackView.cpp b/src/tracks/ui/TrackView.cpp index b11fb31e2..963419022 100644 --- a/src/tracks/ui/TrackView.cpp +++ b/src/tracks/ui/TrackView.cpp @@ -141,13 +141,6 @@ std::shared_ptr TrackView::GetVRulerControls() const return const_cast< TrackView* >( this )->GetVRulerControls(); } -std::shared_ptr TrackView::GetAffordanceControls() -{ - if (!mpAffordanceCellControl) - mpAffordanceCellControl = DoGetAffordanceControls(); - return mpAffordanceCellControl; -} - void TrackView::DoSetY(int y) { mY = y; @@ -172,7 +165,7 @@ void TrackView::DoSetHeight(int h) mHeight = h; } -std::shared_ptr TrackView::DoGetAffordanceControls() +std::shared_ptr TrackView::GetAffordanceControls() { return {}; } diff --git a/src/tracks/ui/TrackView.h b/src/tracks/ui/TrackView.h index b49ca33e9..6b5d1ec6d 100644 --- a/src/tracks/ui/TrackView.h +++ b/src/tracks/ui/TrackView.h @@ -85,9 +85,9 @@ public: std::shared_ptr GetVRulerControls(); std::shared_ptr GetVRulerControls() const; - // by default returns nullptr, meaning that track has no drag controls area - std::shared_ptr GetAffordanceControls(); - + // Returns cell that would be used at affordance area, by default returns nullptr, + // meaning that track has no such area. + virtual std::shared_ptr GetAffordanceControls(); void WriteXMLAttributes( XMLWriter & ) const override; bool HandleXMLAttribute( const wxChar *attr, const wxChar *value ) override; @@ -116,11 +116,8 @@ protected: // Private factory to make appropriate object; class TrackView handles // memory management thereafter virtual std::shared_ptr DoGetVRulerControls() = 0; - // May return nullptr (which is default) if track does not need affordance area - virtual std::shared_ptr DoGetAffordanceControls(); std::shared_ptr mpVRulerControls; - std::shared_ptr mpAffordanceCellControl; private: bool mMinimized{ false };