diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumVRulerControls.h b/src/tracks/playabletrack/wavetrack/ui/SpectrumVRulerControls.h index eb3f11463..b51a4fabc 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumVRulerControls.h +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumVRulerControls.h @@ -49,8 +49,6 @@ private: static void DoUpdateVRuler( const wxRect &rect, const WaveTrack *wt ); - friend class WaveTrackVRulerControls; - std::weak_ptr mVZoomHandle; }; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp index 3a9b24e83..708fd6b51 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp @@ -11,10 +11,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../../../Audacity.h" #include "WaveTrackVRulerControls.h" -#include "SpectrumVRulerControls.h" -#include "WaveformVRulerControls.h" -#include "WaveformVZoomHandle.h" - #include "../../../../Experimental.h" #include "../../../../RefreshCode.h" @@ -28,60 +24,12 @@ Paul Licameli split from TrackPanel.cpp #include "../../../../widgets/Ruler.h" /////////////////////////////////////////////////////////////////////////////// -WaveTrackVRulerControls::~WaveTrackVRulerControls() -{ -} - -std::vector WaveTrackVRulerControls::HitTest -(const TrackPanelMouseState &st, - const AudacityProject *pProject) -{ - std::vector results; - - if ( st.state.GetX() <= st.rect.GetRight() - kGuard ) { - auto pTrack = FindTrack()->SharedPointer( ); - if (pTrack) { - auto result = std::make_shared( - pTrack, st.rect, st.state.m_y ); - result = AssignUIHandlePtr(mVZoomHandle, result); - results.push_back(result); - } - } - - auto more = TrackVRulerControls::HitTest(st, pProject); - std::copy(more.begin(), more.end(), std::back_inserter(results)); - - return results; -} - -unsigned WaveTrackVRulerControls::HandleWheelRotation -(const TrackPanelMouseEvent &evt, AudacityProject *pProject) -{ - using namespace RefreshCode; - const auto pTrack = FindTrack(); - if (!pTrack) - return RefreshNone; - const auto wt = static_cast(pTrack.get()); - if (wt->GetDisplay() == WaveTrackViewConstants::Spectrum) - return SpectrumVRulerControls::DoHandleWheelRotation( evt, pProject, wt ); - else - return WaveformVRulerControls::DoHandleWheelRotation( evt, pProject, wt ); -} - Ruler &WaveTrackVRulerControls::ScratchRuler() { static Ruler theRuler; return theRuler; } -void WaveTrackVRulerControls::Draw( - TrackPanelDrawingContext &context, - const wxRect &rect_, unsigned iPass ) -{ - TrackVRulerControls::Draw( context, rect_, iPass ); - DoDraw( *this, context, rect_, iPass ); -} - void WaveTrackVRulerControls::DoDraw( TrackVRulerControls &controls, TrackPanelDrawingContext &context, const wxRect &rect_, unsigned iPass ) @@ -131,17 +79,3 @@ void WaveTrackVRulerControls::DoDraw( TrackVRulerControls &controls, vruler.Draw(*dc); } } - -void WaveTrackVRulerControls::UpdateRuler( const wxRect &rect ) -{ - const auto wt = std::static_pointer_cast< WaveTrack >( FindTrack() ); - if (!wt) - return; - - const int display = wt->GetDisplay(); - - if (display == WaveTrackViewConstants::Waveform) - WaveformVRulerControls::DoUpdateVRuler( rect, wt.get() ); - else - SpectrumVRulerControls::DoUpdateVRuler( rect, wt.get() ); -} diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h index 2d4462de9..cc6c5562f 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h @@ -15,44 +15,14 @@ Paul Licameli split from TrackPanel.cpp class Ruler; class WaveTrack; -class WaveTrackVZoomHandle; -class WaveTrackVRulerControls final : public TrackVRulerControls +namespace WaveTrackVRulerControls { - static Ruler &ScratchRuler(); + Ruler &ScratchRuler(); - WaveTrackVRulerControls(const WaveTrackVRulerControls&) = delete; - WaveTrackVRulerControls &operator=(const WaveTrackVRulerControls&) = delete; - -public: - explicit - WaveTrackVRulerControls( const std::shared_ptr &pTrackView ) - : TrackVRulerControls( pTrackView ) {} - ~WaveTrackVRulerControls(); - - std::vector HitTest - (const TrackPanelMouseState &state, - const AudacityProject *) override; - - unsigned HandleWheelRotation - (const TrackPanelMouseEvent &event, - AudacityProject *pProject) override; -private: - // TrackPanelDrawable implementation - void Draw( - TrackPanelDrawingContext &context, - const wxRect &rect, unsigned iPass ) override; - static void DoDraw( TrackVRulerControls &controls, + void DoDraw( TrackVRulerControls &controls, TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass ); - - // TrackVRulerControls implementation - void UpdateRuler( const wxRect &rect ) override; - - std::weak_ptr mVZoomHandle; - - friend class SpectrumVRulerControls; - friend class WaveformVRulerControls; }; #endif diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp index f1bef302f..0a443496c 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp @@ -11,9 +11,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../../../Audacity.h" #include "WaveTrackVZoomHandle.h" -#include "SpectrumVZoomHandle.h" -#include "WaveformVZoomHandle.h" - #include "../../../../Experimental.h" #include "../../../ui/TrackVRulerControls.h" @@ -34,19 +31,6 @@ bool WaveTrackVZoomHandle::IsDragZooming(int zoomStart, int zoomEnd) return bVZoom && (abs(zoomEnd - zoomStart) > DragThreshold); } -WaveTrackVZoomHandle::WaveTrackVZoomHandle -(const std::shared_ptr &pTrack, const wxRect &rect, int y) - : mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect) -{ -} - -void WaveTrackVZoomHandle::Enter(bool) -{ -#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING - mChangeHighlight = RefreshCode::RefreshCell; -#endif -} - /////////////////////////////////////////////////////////////////////////////// // Table class @@ -91,26 +75,6 @@ HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state) }; } -WaveTrackVZoomHandle::~WaveTrackVZoomHandle() -{ -} - -UIHandle::Result WaveTrackVZoomHandle::Click -(const TrackPanelMouseEvent &, AudacityProject *) -{ - return RefreshCode::RefreshNone; -} - -UIHandle::Result WaveTrackVZoomHandle::Drag -(const TrackPanelMouseEvent &evt, AudacityProject *pProject) -{ - using namespace RefreshCode; - auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack); - if (!pTrack) - return Cancelled; - return DoDrag( evt, pProject, mZoomStart, mZoomEnd ); -} - UIHandle::Result WaveTrackVZoomHandle::DoDrag( const TrackPanelMouseEvent &evt, AudacityProject *pProject, const int zoomStart, int &zoomEnd) @@ -126,29 +90,6 @@ UIHandle::Result WaveTrackVZoomHandle::DoDrag( return RefreshNone; } -HitTestPreview WaveTrackVZoomHandle::Preview -(const TrackPanelMouseState &st, const AudacityProject *) -{ - return HitPreview(st.state); -} - -UIHandle::Result WaveTrackVZoomHandle::Release -(const TrackPanelMouseEvent &evt, AudacityProject *pProject, - wxWindow *pParent) -{ - auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack); - auto doZoom = (pTrack->GetDisplay() == WaveTrackViewConstants::Spectrum) - ? SpectrumVZoomHandle::DoZoom - : WaveformVZoomHandle::DoZoom; - return DoRelease( - evt, pProject, pParent, pTrack.get(), mRect, - doZoom, - (pTrack->GetDisplay() == WaveTrackViewConstants::Spectrum) - ? SpectrumVRulerMenuTable::Instance() - : WaveformVRulerMenuTable::Instance(), - mZoomStart, mZoomEnd ); -} - UIHandle::Result WaveTrackVZoomHandle::DoRelease( const TrackPanelMouseEvent &evt, AudacityProject *pProject, wxWindow *pParent, WaveTrack *pTrack, const wxRect &rect, @@ -219,22 +160,6 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease( return UpdateVRuler | RefreshAll; } -UIHandle::Result WaveTrackVZoomHandle::Cancel(AudacityProject*) -{ - // Cancel is implemented! And there is no initial state to restore, - // so just return a code. - return RefreshCode::RefreshAll; -} - -void WaveTrackVZoomHandle::Draw( - TrackPanelDrawingContext &context, - const wxRect &rect, unsigned iPass ) -{ - if (!mpTrack.lock()) //? TrackList::Lock() - return; - return DoDraw( context, rect, iPass, mZoomStart, mZoomEnd ); -} - void WaveTrackVZoomHandle::DoDraw( TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass, const int zoomStart, const int zoomEnd ) @@ -246,12 +171,6 @@ void WaveTrackVZoomHandle::DoDraw( } } -wxRect WaveTrackVZoomHandle::DrawingArea( - const wxRect &rect, const wxRect &panelRect, unsigned iPass ) -{ - return DoDrawingArea( rect, panelRect, iPass ); -} - wxRect WaveTrackVZoomHandle::DoDrawingArea( const wxRect &rect, const wxRect &panelRect, unsigned iPass ) { diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h index c347adf6d..6ad50bd50 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h @@ -18,18 +18,14 @@ class WaveTrack; #include "../../../../UIHandle.h" -class WaveTrackVZoomHandle : public UIHandle +namespace WaveTrackVZoomHandle { - WaveTrackVZoomHandle(const WaveTrackVZoomHandle&); - static HitTestPreview HitPreview(const wxMouseState &state); + // See RefreshCode.h for bit flags: + using Result = unsigned; -public: - explicit WaveTrackVZoomHandle - (const std::shared_ptr &pTrack, const wxRect &rect, int y); + HitTestPreview HitPreview(const wxMouseState &state); - WaveTrackVZoomHandle &operator=(const WaveTrackVZoomHandle&) = default; - - static bool IsDragZooming(int zoomStart, int zoomEnd); + bool IsDragZooming(int zoomStart, int zoomEnd); using DoZoomFunction = void (*)( AudacityProject *pProject, WaveTrack *pTrack, @@ -37,58 +33,22 @@ public: const wxRect &rect, int zoomStart, int zoomEnd, bool fixedMousePoint); - virtual ~WaveTrackVZoomHandle(); - - std::shared_ptr GetTrack() const { return mpTrack.lock(); } - - void Enter(bool forward) override; - - Result Click - (const TrackPanelMouseEvent &event, AudacityProject *pProject) override; - - Result Drag - (const TrackPanelMouseEvent &event, AudacityProject *pProject) override; - static Result DoDrag( + Result DoDrag( const TrackPanelMouseEvent &event, AudacityProject *pProject, int zoomStart, int &zoomEnd ); - HitTestPreview Preview - (const TrackPanelMouseState &state, const AudacityProject *pProject) - override; - - Result Release - (const TrackPanelMouseEvent &event, AudacityProject *pProject, - wxWindow *pParent) override; - static Result DoRelease( + Result DoRelease( const TrackPanelMouseEvent &event, AudacityProject *pProject, wxWindow *pParent, WaveTrack *pTrack, const wxRect &mRect, DoZoomFunction doZoom, PopupMenuTable &table, int zoomStart, int zoomEnd ); - Result Cancel(AudacityProject *pProject) override; - -private: - - // TrackPanelDrawable implementation - void Draw( - TrackPanelDrawingContext &context, - const wxRect &rect, unsigned iPass ) override; - static void DoDraw( + void DoDraw( TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass, int zoomStart, int zoomEnd ); - wxRect DrawingArea( - const wxRect &rect, const wxRect &panelRect, unsigned iPass ) override; - static wxRect DoDrawingArea( + wxRect DoDrawingArea( const wxRect &rect, const wxRect &panelRect, unsigned iPass ); - - std::weak_ptr mpTrack; - - int mZoomStart{}, mZoomEnd{}; - wxRect mRect{}; - - friend class SpectrumVZoomHandle; - friend class WaveformVZoomHandle; }; #include "../../../../widgets/PopupMenuTable.h" // to inherit diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index d4e33a99e..bf681abe2 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -145,8 +145,10 @@ static DoGetWaveTrackView registerDoGetWaveTrackView; std::shared_ptr WaveTrackView::DoGetVRulerControls() { - return - std::make_shared( shared_from_this() ); + // This should never be called because of delegation to the spectrum or + // waveform sub-view + wxASSERT( false ); + return {}; } #undef PROFILE_WAVEFORM diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformVRulerControls.h b/src/tracks/playabletrack/wavetrack/ui/WaveformVRulerControls.h index 0fd2508b5..7537eeb12 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformVRulerControls.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformVRulerControls.h @@ -49,8 +49,6 @@ private: static void DoUpdateVRuler( const wxRect &rect, const WaveTrack *wt ); - friend class WaveTrackVRulerControls; - std::weak_ptr mVZoomHandle; };