diff --git a/src/Track.h b/src/Track.h index 7675fd3bc..edc82f986 100644 --- a/src/Track.h +++ b/src/Track.h @@ -263,8 +263,8 @@ class AUDACITY_DLL_API Track /* not final */ // Return another, associated TrackPanelCell object that implements // click and drag and keystrokes in the track contents. - std::shared_ptr GetTrackView(); - std::shared_ptr GetTrackView() const; + std::shared_ptr GetTrackView(); + std::shared_ptr GetTrackView() const; // Return another, associated TrackPanelCell object that implements the // drop-down, close and minimize buttons, etc. @@ -704,7 +704,7 @@ public: bool HandleCommonXMLAttribute(const wxChar *attr, const wxChar *value); protected: - std::shared_ptr mpView; + std::shared_ptr mpView; std::shared_ptr mpControls; }; diff --git a/src/tracks/labeltrack/ui/LabelTrackView.cpp b/src/tracks/labeltrack/ui/LabelTrackView.cpp index 620a22e87..2550ed99b 100644 --- a/src/tracks/labeltrack/ui/LabelTrackView.cpp +++ b/src/tracks/labeltrack/ui/LabelTrackView.cpp @@ -97,7 +97,7 @@ void LabelTrackView::UnbindFrom( LabelTrack *pParent ) EVT_LABELTRACK_PERMUTED, &LabelTrackView::OnLabelPermuted, this ); } -void LabelTrackView::Copy( const TrackView &other ) +void LabelTrackView::Copy( const CommonTrackCell &other ) { TrackView::Copy( other ); diff --git a/src/tracks/labeltrack/ui/LabelTrackView.h b/src/tracks/labeltrack/ui/LabelTrackView.h index 4a25aabb7..dbcb631cb 100644 --- a/src/tracks/labeltrack/ui/LabelTrackView.h +++ b/src/tracks/labeltrack/ui/LabelTrackView.h @@ -82,7 +82,7 @@ private: std::shared_ptr DoGetVRulerControls() override; // Preserve some view state too for undo/redo purposes - void Copy( const TrackView &other ) override; + void Copy( const CommonTrackCell &other ) override; public: static void DoEditLabels( diff --git a/src/tracks/ui/CommonTrackPanelCell.cpp b/src/tracks/ui/CommonTrackPanelCell.cpp index e3b280e6f..e0ac5ff8f 100644 --- a/src/tracks/ui/CommonTrackPanelCell.cpp +++ b/src/tracks/ui/CommonTrackPanelCell.cpp @@ -57,6 +57,10 @@ CommonTrackCell::CommonTrackCell( const std::shared_ptr< Track > &parent ) CommonTrackCell::~CommonTrackCell() = default; +void CommonTrackCell::Copy( const CommonTrackCell & ) +{ +} + void CommonTrackCell::Reparent( const std::shared_ptr &parent ) { mwTrack = parent; diff --git a/src/tracks/ui/CommonTrackPanelCell.h b/src/tracks/ui/CommonTrackPanelCell.h index ace3520fe..a2db5d54d 100644 --- a/src/tracks/ui/CommonTrackPanelCell.h +++ b/src/tracks/ui/CommonTrackPanelCell.h @@ -62,6 +62,9 @@ public: ~CommonTrackCell(); + // Copy state, for undo/redo purposes + virtual void Copy( const CommonTrackCell &other ); + std::shared_ptr DoFindTrack() override; virtual void Reparent( const std::shared_ptr &parent ); diff --git a/src/tracks/ui/TrackView.cpp b/src/tracks/ui/TrackView.cpp index 0deb266c1..7e6080827 100644 --- a/src/tracks/ui/TrackView.cpp +++ b/src/tracks/ui/TrackView.cpp @@ -46,8 +46,13 @@ int TrackView::GetTotalHeight( const TrackList &list ) return GetCumulativeHeight( *list.Any().rbegin() ); } -void TrackView::Copy( const TrackView &other ) +void TrackView::Copy( const CommonTrackCell &otherCell ) { + auto pOther = dynamic_cast< const TrackView* >( &otherCell ); + if ( !pOther ) + return; + auto &other = *pOther; + mMinimized = other.mMinimized; // Let mY remain 0 -- TrackPositioner corrects it later @@ -57,12 +62,12 @@ void TrackView::Copy( const TrackView &other ) TrackView &TrackView::Get( Track &track ) { - return *track.GetTrackView(); + return static_cast( *track.GetTrackView() ); } const TrackView &TrackView::Get( const Track &track ) { - return *track.GetTrackView(); + return static_cast( *track.GetTrackView() ); } void TrackView::SetMinimized(bool isMinimized) @@ -105,7 +110,7 @@ void TrackView::DoSetMinimized(bool isMinimized) mMinimized = isMinimized; } -std::shared_ptr Track::GetTrackView() +std::shared_ptr Track::GetTrackView() { if (!mpView) // create on demand @@ -113,7 +118,7 @@ std::shared_ptr Track::GetTrackView() return mpView; } -std::shared_ptr Track::GetTrackView() const +std::shared_ptr Track::GetTrackView() const { return const_cast(this)->GetTrackView(); } diff --git a/src/tracks/ui/TrackView.h b/src/tracks/ui/TrackView.h index 3c339c78b..0a57decae 100644 --- a/src/tracks/ui/TrackView.h +++ b/src/tracks/ui/TrackView.h @@ -42,7 +42,7 @@ public: static int GetTotalHeight( const TrackList &list ); // Copy view state, for undo/redo purposes - virtual void Copy( const TrackView &other ); + void Copy( const CommonTrackCell &other ) override; static TrackView &Get( Track & ); static const TrackView &Get( const Track & );