1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-10 17:11:17 +02:00

Affordance cell reference removed from TrackView

Subclasses should provide instances instead

(cherry picked from audacity commit bc8c6d4ccc6ffffa1fb1b30f3a9a5fe578f74ec1)

Signed-off-by: akleja <storspov@gmail.com>
This commit is contained in:
Vitaly Sverchinsky 2021-08-19 20:46:48 +03:00 committed by akleja
parent f969701756
commit 62fe78b0ef
6 changed files with 28 additions and 20 deletions

View File

@ -76,9 +76,13 @@ std::shared_ptr<TrackVRulerControls> NoteTrackView::DoGetVRulerControls()
#define TIME_TO_X(t) (zoomInfo.TimeToPosition((t), rect.x)) #define TIME_TO_X(t) (zoomInfo.TimeToPosition((t), rect.x))
#define X_TO_TIME(xx) (zoomInfo.PositionToTime((xx), rect.x)) #define X_TO_TIME(xx) (zoomInfo.PositionToTime((xx), rect.x))
std::shared_ptr<CommonTrackCell> NoteTrackView::DoGetAffordanceControls() std::shared_ptr<CommonTrackCell> NoteTrackView::GetAffordanceControls()
{ {
return std::make_shared<NoteTrackAffordanceControls>(DoFindTrack()); if (mpAffordanceCellControl == nullptr)
{
mpAffordanceCellControl = std::make_shared<NoteTrackAffordanceControls>(DoFindTrack());
}
return mpAffordanceCellControl;
} }
namespace { namespace {

View File

@ -25,7 +25,7 @@ public:
private: private:
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override; std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
std::shared_ptr<CommonTrackCell> DoGetAffordanceControls() override; std::shared_ptr<CommonTrackCell> GetAffordanceControls() override;
std::vector<UIHandlePtr> DetailedHitTest std::vector<UIHandlePtr> DetailedHitTest
(const TrackPanelMouseState &state, (const TrackPanelMouseState &state,
@ -36,5 +36,7 @@ private:
void Draw( void Draw(
TrackPanelDrawingContext &context, TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass ) override; const wxRect &rect, unsigned iPass ) override;
std::shared_ptr<CommonTrackCell> mpAffordanceCellControl;
}; };
#endif #endif

View File

@ -1085,9 +1085,9 @@ WaveTrackView::GetAllSubViews()
return results; return results;
} }
std::shared_ptr<CommonTrackCell> WaveTrackView::DoGetAffordanceControls() std::shared_ptr<CommonTrackCell> WaveTrackView::GetAffordanceControls()
{ {
return std::make_shared<WaveTrackAffordanceControls>(FindTrack()); return DoGetAffordance(FindTrack());
} }
void WaveTrackView::DoSetMinimized( bool minimized ) void WaveTrackView::DoSetMinimized( bool minimized )
@ -1101,6 +1101,13 @@ void WaveTrackView::DoSetMinimized( bool minimized )
} ); } );
} }
std::shared_ptr<CommonTrackCell> WaveTrackView::DoGetAffordance(const std::shared_ptr<Track>& track)
{
if (mpAffordanceCellControl == nullptr)
mpAffordanceCellControl = std::make_shared<WaveTrackAffordanceControls>(track);
return mpAffordanceCellControl;
}
using DoGetWaveTrackView = DoGetView::Override< WaveTrack >; using DoGetWaveTrackView = DoGetView::Override< WaveTrack >;
template<> template<> auto DoGetWaveTrackView::Implementation() -> Function { template<> template<> auto DoGetWaveTrackView::Implementation() -> Function {
return [](WaveTrack &track) { return [](WaveTrack &track) {

View File

@ -158,7 +158,7 @@ private:
Refinement GetSubViews(const wxRect& rect) override; Refinement GetSubViews(const wxRect& rect) override;
protected: protected:
std::shared_ptr<CommonTrackCell> DoGetAffordanceControls() override; std::shared_ptr<CommonTrackCell> GetAffordanceControls() override;
void DoSetMinimized( bool minimized ) override; void DoSetMinimized( bool minimized ) override;
@ -169,6 +169,11 @@ protected:
mutable wxCoord mLastHeight{}; mutable wxCoord mLastHeight{};
bool mMultiView{ false }; bool mMultiView{ false };
private:
std::shared_ptr<CommonTrackCell> DoGetAffordance(const std::shared_ptr<Track>& track);
std::shared_ptr<CommonTrackCell> mpAffordanceCellControl;
}; };
// Helper for drawing routines // Helper for drawing routines

View File

@ -141,13 +141,6 @@ std::shared_ptr<const TrackVRulerControls> TrackView::GetVRulerControls() const
return const_cast< TrackView* >( this )->GetVRulerControls(); return const_cast< TrackView* >( this )->GetVRulerControls();
} }
std::shared_ptr<CommonTrackCell> TrackView::GetAffordanceControls()
{
if (!mpAffordanceCellControl)
mpAffordanceCellControl = DoGetAffordanceControls();
return mpAffordanceCellControl;
}
void TrackView::DoSetY(int y) void TrackView::DoSetY(int y)
{ {
mY = y; mY = y;
@ -172,7 +165,7 @@ void TrackView::DoSetHeight(int h)
mHeight = h; mHeight = h;
} }
std::shared_ptr<CommonTrackCell> TrackView::DoGetAffordanceControls() std::shared_ptr<CommonTrackCell> TrackView::GetAffordanceControls()
{ {
return {}; return {};
} }

View File

@ -85,9 +85,9 @@ public:
std::shared_ptr<TrackVRulerControls> GetVRulerControls(); std::shared_ptr<TrackVRulerControls> GetVRulerControls();
std::shared_ptr<const TrackVRulerControls> GetVRulerControls() const; std::shared_ptr<const TrackVRulerControls> GetVRulerControls() const;
// by default returns nullptr, meaning that track has no drag controls area // Returns cell that would be used at affordance area, by default returns nullptr,
std::shared_ptr<CommonTrackCell> GetAffordanceControls(); // meaning that track has no such area.
virtual std::shared_ptr<CommonTrackCell> GetAffordanceControls();
void WriteXMLAttributes( XMLWriter & ) const override; void WriteXMLAttributes( XMLWriter & ) const override;
bool HandleXMLAttribute( const wxChar *attr, const wxChar *value ) override; bool HandleXMLAttribute( const wxChar *attr, const wxChar *value ) override;
@ -116,11 +116,8 @@ protected:
// Private factory to make appropriate object; class TrackView handles // Private factory to make appropriate object; class TrackView handles
// memory management thereafter // memory management thereafter
virtual std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() = 0; virtual std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() = 0;
// May return nullptr (which is default) if track does not need affordance area
virtual std::shared_ptr<CommonTrackCell> DoGetAffordanceControls();
std::shared_ptr<TrackVRulerControls> mpVRulerControls; std::shared_ptr<TrackVRulerControls> mpVRulerControls;
std::shared_ptr<CommonTrackCell> mpAffordanceCellControl;
private: private:
bool mMinimized{ false }; bool mMinimized{ false };