From b3d62e2ab6c9e7ef23557e97781867de7017d66f Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 4 Jul 2017 00:48:09 -0400 Subject: [PATCH] Simplify by removing class HitTestResult... ... Because all hit tests returned all fields blank, or else, returned a UIHandle object whose Preview method gives the rest of the information; so the other fields were redundant. --- src/HitTestResult.h | 16 ----- src/LabelTrack.cpp | 2 +- src/LabelTrack.h | 2 +- src/NoteTrack.h | 2 +- src/TimeTrack.h | 2 +- src/Track.h | 4 +- src/TrackPanel.cpp | 15 ++--- src/TrackPanel.h | 11 +--- src/TrackPanelCell.h | 13 ++-- src/TrackPanelResizeHandle.h | 1 - src/TrackPanelResizerCell.cpp | 7 +- src/TrackPanelResizerCell.h | 2 +- src/UIHandle.h | 1 + src/WaveTrack.h | 2 +- .../labeltrack/ui/LabelDefaultClickHandle.h | 1 - src/tracks/labeltrack/ui/LabelGlyphHandle.cpp | 7 +- src/tracks/labeltrack/ui/LabelGlyphHandle.h | 3 +- src/tracks/labeltrack/ui/LabelTextHandle.cpp | 5 +- src/tracks/labeltrack/ui/LabelTextHandle.h | 3 +- .../labeltrack/ui/LabelTrackControls.cpp | 2 +- src/tracks/labeltrack/ui/LabelTrackControls.h | 2 +- src/tracks/labeltrack/ui/LabelTrackUI.cpp | 7 +- .../notetrack/ui/NoteTrackButtonHandle.cpp | 7 +- .../notetrack/ui/NoteTrackButtonHandle.h | 3 +- .../notetrack/ui/NoteTrackControls.cpp | 12 ++-- .../notetrack/ui/NoteTrackControls.h | 2 +- .../notetrack/ui/NoteTrackSliderHandles.cpp | 6 +- .../notetrack/ui/NoteTrackSliderHandles.h | 10 ++- .../notetrack/ui/NoteTrackUI.cpp | 4 +- .../notetrack/ui/NoteTrackVRulerControls.cpp | 4 +- .../notetrack/ui/NoteTrackVRulerControls.h | 2 +- .../notetrack/ui/NoteTrackVZoomHandle.cpp | 4 +- .../notetrack/ui/NoteTrackVZoomHandle.h | 3 +- .../notetrack/ui/StretchHandle.cpp | 7 +- .../notetrack/ui/StretchHandle.h | 3 +- .../ui/PlayableTrackButtonHandles.cpp | 16 ++--- .../ui/PlayableTrackButtonHandles.h | 6 +- .../wavetrack/ui/CutlineHandle.cpp | 15 ++--- .../wavetrack/ui/CutlineHandle.h | 7 +- .../wavetrack/ui/SampleHandle.cpp | 12 ++-- .../playabletrack/wavetrack/ui/SampleHandle.h | 8 +-- .../wavetrack/ui/WaveTrackControls.cpp | 12 ++-- .../wavetrack/ui/WaveTrackControls.h | 2 +- .../wavetrack/ui/WaveTrackSliderHandles.cpp | 18 ++--- .../wavetrack/ui/WaveTrackSliderHandles.h | 10 ++- .../wavetrack/ui/WaveTrackUI.cpp | 20 +++--- .../wavetrack/ui/WaveTrackVRulerControls.cpp | 7 +- .../wavetrack/ui/WaveTrackVRulerControls.h | 2 +- .../wavetrack/ui/WaveTrackVZoomHandle.cpp | 6 -- .../wavetrack/ui/WaveTrackVZoomHandle.h | 4 -- src/tracks/timetrack/ui/TimeTrackControls.cpp | 2 +- src/tracks/timetrack/ui/TimeTrackControls.h | 2 +- src/tracks/timetrack/ui/TimeTrackUI.cpp | 2 +- src/tracks/ui/BackgroundCell.cpp | 12 +--- src/tracks/ui/BackgroundCell.h | 4 +- src/tracks/ui/EnvelopeHandle.cpp | 18 +++-- src/tracks/ui/EnvelopeHandle.h | 12 ++-- src/tracks/ui/SelectHandle.cpp | 65 +------------------ src/tracks/ui/SelectHandle.h | 3 +- src/tracks/ui/TimeShiftHandle.cpp | 11 ++-- src/tracks/ui/TimeShiftHandle.h | 9 +-- src/tracks/ui/TrackButtonHandles.cpp | 21 ++---- src/tracks/ui/TrackButtonHandles.h | 7 +- src/tracks/ui/TrackControls.cpp | 16 ++--- src/tracks/ui/TrackControls.h | 2 +- src/tracks/ui/TrackSelectHandle.cpp | 18 +---- src/tracks/ui/TrackSelectHandle.h | 6 +- src/tracks/ui/TrackUI.cpp | 16 ++--- src/tracks/ui/TrackVRulerControls.cpp | 2 +- src/tracks/ui/TrackVRulerControls.h | 2 +- src/tracks/ui/ZoomHandle.cpp | 13 ++-- src/tracks/ui/ZoomHandle.h | 12 ++-- 72 files changed, 189 insertions(+), 388 deletions(-) diff --git a/src/HitTestResult.h b/src/HitTestResult.h index 295b8bb55..f165cf314 100644 --- a/src/HitTestResult.h +++ b/src/HitTestResult.h @@ -14,11 +14,8 @@ Paul Licameli #include #include "MemoryX.h" -class UIHandle; class wxCursor; -using UIHandlePtr = std::shared_ptr; - struct HitTestPreview { HitTestPreview() @@ -32,17 +29,4 @@ struct HitTestPreview wxCursor *cursor {}; }; -struct HitTestResult -{ - HitTestResult() - {} - - HitTestResult(HitTestPreview preview_, UIHandlePtr handle_) - : preview(preview_), handle(handle_) - {} - - HitTestPreview preview {}; - UIHandlePtr handle {}; -}; - #endif diff --git a/src/LabelTrack.cpp b/src/LabelTrack.cpp index 613f513e4..ab204904c 100644 --- a/src/LabelTrack.cpp +++ b/src/LabelTrack.cpp @@ -765,7 +765,7 @@ namespace { // Fetch the highlighting state auto target = GetActiveProject()->GetTrackPanel()->Target(); if (target) { - auto handle = dynamic_cast( target->handle.get() ); + auto handle = dynamic_cast( target.get() ); if (handle) return &handle->mHit; } diff --git a/src/LabelTrack.h b/src/LabelTrack.h index da4f3067f..581547d83 100644 --- a/src/LabelTrack.h +++ b/src/LabelTrack.h @@ -125,7 +125,7 @@ class AUDACITY_DLL_API LabelTrack final : public Track virtual ~ LabelTrack(); - HitTestResult DetailedHitTest + UIHandlePtr DetailedHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject, int currentTool, bool bMultiTool) override; diff --git a/src/NoteTrack.h b/src/NoteTrack.h index 2e408ab0a..72c0d6435 100644 --- a/src/NoteTrack.h +++ b/src/NoteTrack.h @@ -70,7 +70,7 @@ class AUDACITY_DLL_API NoteTrack final NoteTrack(const std::shared_ptr &projDirManager); virtual ~NoteTrack(); - HitTestResult DetailedHitTest + UIHandlePtr DetailedHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject, int currentTool, bool bMultiTool) override; diff --git a/src/TimeTrack.h b/src/TimeTrack.h index 9a9b558a8..2e02e1499 100644 --- a/src/TimeTrack.h +++ b/src/TimeTrack.h @@ -51,7 +51,7 @@ class TimeTrack final : public Track { void Silence(double t0, double t1) override; void InsertSilence(double t, double len) override; - HitTestResult DetailedHitTest + UIHandlePtr DetailedHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject, int currentTool, bool bMultiTool) override; diff --git a/src/Track.h b/src/Track.h index 137ddd68b..208d532a0 100644 --- a/src/Track.h +++ b/src/Track.h @@ -136,14 +136,14 @@ class AUDACITY_DLL_API Track /* not final */ // Cause certain overriding tool modes (Zoom; future ones?) to behave // uniformly in all tracks, disregarding track contents. // Do not further override this... - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &, const AudacityProject *pProject) final; public: // Rather override this for subclasses: - virtual HitTestResult DetailedHitTest + virtual UIHandlePtr DetailedHitTest (const TrackPanelMouseState &, const AudacityProject *pProject, int currentTool, bool bMultiTool) = 0; diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 7c41daf00..e316eef08 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -867,10 +867,9 @@ void TrackPanel::HandleMotion( wxMouseState *pState ) void TrackPanel::HandleMotion( const TrackPanelMouseState &tpmState ) { - HitTestResult result; auto handle = mUIHandle; - auto oldHandle = mLastHitTest.handle; + auto oldHandle = mLastHitTest; auto oldCell = mLastCell.lock(); auto newCell = tpmState.pCell; @@ -905,12 +904,10 @@ void TrackPanel::HandleMotion( const TrackPanelMouseState &tpmState ) // Now do the // UIHANDLE HIT TEST ! - result = newCell->HitTest(tpmState, GetProject()); - handle = result.handle; + handle = newCell->HitTest(tpmState, GetProject()); mLastCell = newCell; - mLastHitTestValid = true; - mLastHitTest = result; + mLastHitTest = handle; if (!oldCell && oldHandle != handle) // Did not move cell to cell, but did change the target @@ -1603,11 +1600,7 @@ void TrackPanel::HandleClick( const TrackPanelMouseEvent &tpmEvent ) HandleMotion( tpmState ); } - auto target = Target(); - if (target) - mUIHandle = target->handle; - else - mUIHandle = {}; + mUIHandle = Target(); if (mUIHandle) { // UIHANDLE CLICK diff --git a/src/TrackPanel.h b/src/TrackPanel.h index faf1ad724..a09edae41 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -531,17 +531,13 @@ protected: protected: std::weak_ptr mLastCell; - HitTestResult mLastHitTest{}; - bool mLastHitTestValid{}; + UIHandlePtr mLastHitTest; unsigned mMouseOverUpdateFlags{}; public: - HitTestResult *Target() + UIHandlePtr Target() { - if ( mLastHitTestValid ) - return &mLastHitTest; - else - return nullptr; + return mLastHitTest; } protected: @@ -550,7 +546,6 @@ protected: // Forget the rotation of hit test candidates when the mouse moves from // cell to cell or outside of the TrackPanel entirely. mLastCell.reset(); - mLastHitTestValid = false; mLastHitTest = {}; mMouseOverUpdateFlags = 0; } diff --git a/src/TrackPanelCell.h b/src/TrackPanelCell.h index 96abf115e..3ed50eef0 100644 --- a/src/TrackPanelCell.h +++ b/src/TrackPanelCell.h @@ -11,8 +11,9 @@ Paul Licameli #ifndef __AUDACITY_TRACK_PANEL_CELL__ #define __AUDACITY_TRACK_PANEL_CELL__ +#include "MemoryX.h" + class AudacityProject; -struct HitTestResult; struct TrackPanelMouseEvent; struct TrackPanelMouseState; class ViewInfo; @@ -21,6 +22,9 @@ class wxPoint; class wxRect; class wxWindow; +class UIHandle; +using UIHandlePtr = std::shared_ptr; + // Abstract base class defining TrackPanel's access to specialist classes that // implement drawing and user interactions class AUDACITY_DLL_API TrackPanelCell /* not final */ @@ -28,11 +32,12 @@ class AUDACITY_DLL_API TrackPanelCell /* not final */ public: virtual ~TrackPanelCell () = 0; - // Indicate a status bar message, cursor, and click-drag-release handler - // appropriate to the mouse position, modifier keys, and button-down state. + // Return null, or a pointer to an object that can be queried for a status + // bar message and cursor appropriate to the point, and that dispatches + // mouse button events. // The button-down state passed to the function is as it will be at click // time -- not necessarily as it is now. - virtual HitTestResult HitTest + virtual UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) = 0; diff --git a/src/TrackPanelResizeHandle.h b/src/TrackPanelResizeHandle.h index 752722a9c..50071c641 100644 --- a/src/TrackPanelResizeHandle.h +++ b/src/TrackPanelResizeHandle.h @@ -14,7 +14,6 @@ Paul Licameli split from TrackPanel.cpp #include "MemoryX.h" #include "UIHandle.h" -struct HitTestResult; class Track; class TrackPanelCellIterator; diff --git a/src/TrackPanelResizerCell.cpp b/src/TrackPanelResizerCell.cpp index c12ca1b8e..5f3e5ea36 100644 --- a/src/TrackPanelResizerCell.cpp +++ b/src/TrackPanelResizerCell.cpp @@ -21,7 +21,7 @@ TrackPanelResizerCell::TrackPanelResizerCell( std::shared_ptr pTrack ) : mpTrack{ pTrack } {} -HitTestResult TrackPanelResizerCell::HitTest +UIHandlePtr TrackPanelResizerCell::HitTest (const TrackPanelMouseState &st, const AudacityProject *pProject) { auto pTrack = mpTrack.lock(); @@ -29,10 +29,7 @@ HitTestResult TrackPanelResizerCell::HitTest auto result = std::make_shared( pTrack, st.state.m_y, pProject ); result = AssignUIHandlePtr(mResizeHandle, result); - return { - result->Preview(st, pProject), - result - }; + return result; } return {}; } diff --git a/src/TrackPanelResizerCell.h b/src/TrackPanelResizerCell.h index 5d8556a6b..038810204 100644 --- a/src/TrackPanelResizerCell.h +++ b/src/TrackPanelResizerCell.h @@ -24,7 +24,7 @@ public: explicit TrackPanelResizerCell( std::shared_ptr pTrack ); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &, const AudacityProject *) override; std::shared_ptr FindTrack() override { return mpTrack.lock(); }; diff --git a/src/UIHandle.h b/src/UIHandle.h index 08f4f97b9..7903faf68 100644 --- a/src/UIHandle.h +++ b/src/UIHandle.h @@ -12,6 +12,7 @@ Paul Licameli #define __AUDACITY_UI_HANDLE__ #include +#include "MemoryX.h" class wxDC; class wxRect; diff --git a/src/WaveTrack.h b/src/WaveTrack.h index 0ded2945c..006be6291 100644 --- a/src/WaveTrack.h +++ b/src/WaveTrack.h @@ -107,7 +107,7 @@ class AUDACITY_DLL_API WaveTrack final : public PlayableTrack { virtual ~WaveTrack(); - HitTestResult DetailedHitTest + UIHandlePtr DetailedHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject, int currentTool, bool bMultiTool) override; diff --git a/src/tracks/labeltrack/ui/LabelDefaultClickHandle.h b/src/tracks/labeltrack/ui/LabelDefaultClickHandle.h index 15ec85c2c..c5f85ce9a 100644 --- a/src/tracks/labeltrack/ui/LabelDefaultClickHandle.h +++ b/src/tracks/labeltrack/ui/LabelDefaultClickHandle.h @@ -15,7 +15,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../../MemoryX.h" class wxMouseEvent; -struct HitTestResult; class LabelTrack; // Used as a base class. diff --git a/src/tracks/labeltrack/ui/LabelGlyphHandle.cpp b/src/tracks/labeltrack/ui/LabelGlyphHandle.cpp index 214ffc00e..865b1a6eb 100644 --- a/src/tracks/labeltrack/ui/LabelGlyphHandle.cpp +++ b/src/tracks/labeltrack/ui/LabelGlyphHandle.cpp @@ -53,7 +53,7 @@ HitTestPreview LabelGlyphHandle::HitPreview(bool hitCenter) }; } -HitTestResult LabelGlyphHandle::HitTest +UIHandlePtr LabelGlyphHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const std::shared_ptr &pLT, const wxRect &rect) @@ -67,10 +67,7 @@ HitTestResult LabelGlyphHandle::HitTest { auto result = std::make_shared( pLT, rect, hit ); result = AssignUIHandlePtr(holder, result); - return { - HitPreview( hit.mEdge & 4 ), - result - }; + return result; } return {}; diff --git a/src/tracks/labeltrack/ui/LabelGlyphHandle.h b/src/tracks/labeltrack/ui/LabelGlyphHandle.h index 9718f81fd..fddce6dbd 100644 --- a/src/tracks/labeltrack/ui/LabelGlyphHandle.h +++ b/src/tracks/labeltrack/ui/LabelGlyphHandle.h @@ -16,7 +16,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../../MemoryX.h" class wxMouseState; -struct HitTestResult; class LabelTrack; /// mEdge: @@ -49,7 +48,7 @@ public: LabelGlyphHandle &operator=(LabelGlyphHandle&&) = default; - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const std::shared_ptr &pLT, const wxRect &rect); diff --git a/src/tracks/labeltrack/ui/LabelTextHandle.cpp b/src/tracks/labeltrack/ui/LabelTextHandle.cpp index b6afca1aa..18fe53a6a 100644 --- a/src/tracks/labeltrack/ui/LabelTextHandle.cpp +++ b/src/tracks/labeltrack/ui/LabelTextHandle.cpp @@ -34,7 +34,7 @@ HitTestPreview LabelTextHandle::HitPreview() }; } -HitTestResult LabelTextHandle::HitTest +UIHandlePtr LabelTextHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const std::shared_ptr &pLT) { @@ -44,8 +44,7 @@ HitTestResult LabelTextHandle::HitTest (labelNum = pLT->OverATextBox(state.m_x, state.m_y) ) >= 0) { auto result = std::make_shared( pLT, labelNum ); result = AssignUIHandlePtr(holder, result); - // There was no cursor change or status message for mousing over a label text box - return { HitPreview(), result }; + return result; } return {}; diff --git a/src/tracks/labeltrack/ui/LabelTextHandle.h b/src/tracks/labeltrack/ui/LabelTextHandle.h index cd40efb3f..6593fbe8b 100644 --- a/src/tracks/labeltrack/ui/LabelTextHandle.h +++ b/src/tracks/labeltrack/ui/LabelTextHandle.h @@ -17,7 +17,6 @@ Paul Licameli split from TrackPanel.cpp #include class wxMouseState; -struct HitTestResult; class LabelTrack; class SelectionStateChanger; @@ -28,7 +27,7 @@ class LabelTextHandle final : public LabelDefaultClickHandle static HitTestPreview HitPreview(); public: - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const std::shared_ptr &pLT); diff --git a/src/tracks/labeltrack/ui/LabelTrackControls.cpp b/src/tracks/labeltrack/ui/LabelTrackControls.cpp index 79750f944..df1f3f57a 100644 --- a/src/tracks/labeltrack/ui/LabelTrackControls.cpp +++ b/src/tracks/labeltrack/ui/LabelTrackControls.cpp @@ -26,7 +26,7 @@ LabelTrackControls::~LabelTrackControls() { } -HitTestResult LabelTrackControls::HitTest +UIHandlePtr LabelTrackControls::HitTest (const TrackPanelMouseState & state, const AudacityProject *pProject) { diff --git a/src/tracks/labeltrack/ui/LabelTrackControls.h b/src/tracks/labeltrack/ui/LabelTrackControls.h index 73300712c..7966102d7 100644 --- a/src/tracks/labeltrack/ui/LabelTrackControls.h +++ b/src/tracks/labeltrack/ui/LabelTrackControls.h @@ -24,7 +24,7 @@ public: : TrackControls( pTrack ) {} ~LabelTrackControls(); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override; diff --git a/src/tracks/labeltrack/ui/LabelTrackUI.cpp b/src/tracks/labeltrack/ui/LabelTrackUI.cpp index c6798ca66..d0e4ea6ed 100644 --- a/src/tracks/labeltrack/ui/LabelTrackUI.cpp +++ b/src/tracks/labeltrack/ui/LabelTrackUI.cpp @@ -21,22 +21,21 @@ Paul Licameli split from TrackPanel.cpp #include "../../../Project.h" #include "../../../TrackPanelMouseEvent.h" -HitTestResult LabelTrack::DetailedHitTest +UIHandlePtr LabelTrack::DetailedHitTest (const TrackPanelMouseState &st, const AudacityProject *pProject, int, bool) { - HitTestResult result; const wxMouseState &state = st.state; // Try label movement handles first + UIHandlePtr result; result = LabelGlyphHandle::HitTest( mGlyphHandle, state, Pointer(this), st.rect); - if ( !result.handle ) { + if ( !result ) // Missed glyph, try text box result = LabelTextHandle::HitTest( mTextHandle, state, Pointer(this)); - } return result; } diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp index 15fb91435..9a4e1dd1d 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp @@ -30,7 +30,7 @@ NoteTrackButtonHandle::~NoteTrackButtonHandle() { } -HitTestResult NoteTrackButtonHandle::HitTest +UIHandlePtr NoteTrackButtonHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const std::shared_ptr &pTrack) @@ -45,10 +45,7 @@ HitTestResult NoteTrackButtonHandle::HitTest auto result = std::make_shared( pTrack, channel, midiRect ); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview(), - result - }; + return result; } else return {}; diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h b/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h index 7503c8633..bf5b4dbb6 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h @@ -13,7 +13,6 @@ Paul Licameli split from TrackPanel.cpp class wxMouseState; class NoteTrack; -struct HitTestResult; #include #include "../../../../MemoryX.h" @@ -36,7 +35,7 @@ public: virtual ~NoteTrackButtonHandle(); - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const std::shared_ptr &pTrack); diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp index bc19df72a..22dfe27d2 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp @@ -30,7 +30,7 @@ NoteTrackControls::~NoteTrackControls() { } -HitTestResult NoteTrackControls::HitTest +UIHandlePtr NoteTrackControls::HitTest (const TrackPanelMouseState & st, const AudacityProject *pProject) { @@ -39,20 +39,20 @@ HitTestResult NoteTrackControls::HitTest if (state.ButtonIsDown(wxMOUSE_BTN_ANY)) { auto track = std::static_pointer_cast(FindTrack()); if (track && track->GetKind() == Track::Note) { - HitTestResult result; + UIHandlePtr result; if (NULL != (result = MuteButtonHandle::HitTest( - mMuteHandle, state, rect, pProject, track)).handle) + mMuteHandle, state, rect, pProject, track))) return result; if (NULL != (result = SoloButtonHandle::HitTest( - mSoloHandle, state, rect, pProject, track)).handle) + mSoloHandle, state, rect, pProject, track))) return result; #ifdef EXPERIMENTAL_MIDI_OUT if (NULL != (result = VelocitySliderHandle::HitTest( - mVelocityHandle, state, rect, pProject, track)).handle) + mVelocityHandle, state, rect, track))) return result; if (NULL != (result = NoteTrackButtonHandle::HitTest( - mClickHandle, state, rect, track)).handle) + mClickHandle, state, rect, track))) return result; #endif } diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.h b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.h index 9acb56102..24aed2114 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.h +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.h @@ -35,7 +35,7 @@ public: : TrackControls( pTrack ) {} ~NoteTrackControls(); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override; diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp index ec7c2dca5..09ffd1732 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp @@ -63,10 +63,10 @@ UIHandle::Result VelocitySliderHandle::CommitChanges -HitTestResult VelocitySliderHandle::HitTest +UIHandlePtr VelocitySliderHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack) + const std::shared_ptr &pTrack) { if (!state.ButtonIsDown(wxMOUSE_BTN_LEFT)) return {}; @@ -86,7 +86,7 @@ HitTestResult VelocitySliderHandle::HitTest sliderFn, sliderRect, pTrack ); result = AssignUIHandlePtr(holder, result); - return { HitTestPreview{}, result }; + return result; } else return {}; diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.h b/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.h index d2303a854..513b4818c 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.h +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.h @@ -20,8 +20,6 @@ class NoteTrack; class wxMouseState; -struct HitTestResult; - class VelocitySliderHandle final : public SliderHandle { VelocitySliderHandle(const VelocitySliderHandle&) = delete; @@ -47,10 +45,10 @@ protected: bool StopsOnKeystroke () override { return true; } public: - static HitTestResult HitTest - (std::weak_ptr &holder, - const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack); + static UIHandlePtr HitTest + (std::weak_ptr &holder, + const wxMouseState &state, const wxRect &rect, + const std::shared_ptr &pTrack); }; #endif diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp index d292b4a23..c6ad26c89 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp @@ -22,12 +22,12 @@ Paul Licameli split from TrackPanel.cpp #include "../../../ui/SelectHandle.h" #include "StretchHandle.h" -HitTestResult NoteTrack::DetailedHitTest +UIHandlePtr NoteTrack::DetailedHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject, int, bool ) { // Eligible for stretch? - HitTestResult result; + UIHandlePtr result; #ifdef USE_MIDI result = StretchHandle::HitTest( mStretchHandle, state, pProject, Pointer(this) ); diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp index dfffb682d..f686aec1c 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp @@ -27,9 +27,9 @@ NoteTrackVRulerControls::~NoteTrackVRulerControls() { } -HitTestResult NoteTrackVRulerControls::HitTest +UIHandlePtr NoteTrackVRulerControls::HitTest (const TrackPanelMouseState &st, - const AudacityProject *) + const AudacityProject *pProject) { UIHandlePtr result; auto track = std::static_pointer_cast(FindTrack()); diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h b/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h index 0eaf286f4..2c0c0c2b8 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h @@ -26,7 +26,7 @@ public: : TrackVRulerControls( pTrack ) {} ~NoteTrackVRulerControls(); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override; diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp index 7a80b58e2..c2ae46c30 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp @@ -52,7 +52,7 @@ HitTestPreview NoteTrackVZoomHandle::HitPreview(const wxMouseState &state) }; } -HitTestResult NoteTrackVZoomHandle::HitTest +UIHandlePtr NoteTrackVZoomHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const std::shared_ptr &pTrack, const wxRect &rect) @@ -61,7 +61,7 @@ HitTestResult NoteTrackVZoomHandle::HitTest auto result = std::make_shared( pTrack, rect, state.m_y); result = AssignUIHandlePtr(holder, result); - return HitTestResult(HitPreview(state), result); + return result; } return {}; } diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h index ee06d178e..cd17f5a36 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h @@ -12,7 +12,6 @@ Paul Licameli split from TrackPanel.cpp #define __AUDACITY_NOTE_TRACK_VZOOM_HANDLE__ class wxMouseState; -struct HitTestResult; class NoteTrack; #include "../../../../MemoryX.h" @@ -30,7 +29,7 @@ public: NoteTrackVZoomHandle &operator=(const NoteTrackVZoomHandle&) = default; - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const std::shared_ptr &pTrack, const wxRect &rect); diff --git a/src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp b/src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp index f333ff19e..967bb169c 100644 --- a/src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp +++ b/src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp @@ -63,7 +63,7 @@ HitTestPreview StretchHandle::HitPreview( StretchEnum stretchMode, bool unsafe ) } } -HitTestResult StretchHandle::HitTest +UIHandlePtr StretchHandle::HitTest (std::weak_ptr &holder, const TrackPanelMouseState &st, const AudacityProject *pProject, const std::shared_ptr &pTrack) @@ -140,10 +140,7 @@ HitTestResult StretchHandle::HitTest auto result = std::make_shared( pTrack, stretchState ); result = AssignUIHandlePtr(holder, result); - return { - HitPreview( stretchState.mMode, unsafe ), - result - }; + return result; } StretchHandle::~StretchHandle() diff --git a/src/tracks/playabletrack/notetrack/ui/StretchHandle.h b/src/tracks/playabletrack/notetrack/ui/StretchHandle.h index 59f14079e..150caaa7d 100644 --- a/src/tracks/playabletrack/notetrack/ui/StretchHandle.h +++ b/src/tracks/playabletrack/notetrack/ui/StretchHandle.h @@ -16,7 +16,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../../../MemoryX.h" class Alg_seq; -struct HitTestResult; class NoteTrack; class Track; class ViewInfo; @@ -65,7 +64,7 @@ public: StretchHandle &operator=(const StretchHandle&) = default; - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const TrackPanelMouseState &state, const AudacityProject *pProject, const std::shared_ptr &pTrack ); diff --git a/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp b/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp index 55c1ffb0b..541c66753 100644 --- a/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp +++ b/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp @@ -37,7 +37,7 @@ UIHandle::Result MuteButtonHandle::CommitChanges return RefreshCode::RefreshNone; } -HitTestResult MuteButtonHandle::HitTest +UIHandlePtr MuteButtonHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &pTrack) @@ -52,10 +52,7 @@ HitTestResult MuteButtonHandle::HitTest if ( pTrack && buttonRect.Contains(state.m_x, state.m_y) ) { auto result = std::make_shared(pTrack, buttonRect); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview{}, - result - }; + return result; } else return {}; @@ -82,7 +79,7 @@ UIHandle::Result SoloButtonHandle::CommitChanges return RefreshCode::RefreshNone; } -HitTestResult SoloButtonHandle::HitTest +UIHandlePtr SoloButtonHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &pTrack) @@ -98,11 +95,8 @@ HitTestResult SoloButtonHandle::HitTest if ( pTrack && buttonRect.Contains(state.m_x, state.m_y) ) { auto result = std::make_shared( pTrack, buttonRect ); result = AssignUIHandlePtr(holder, result); - return HitTestResult( - HitTestPreview{}, - result - ); + return result; } else - return HitTestResult(); + return {}; } diff --git a/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.h b/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.h index f2b8b5792..fc3da646a 100644 --- a/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.h +++ b/src/tracks/playabletrack/ui/PlayableTrackButtonHandles.h @@ -14,8 +14,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../ui/ButtonHandle.h" #include "../../../TrackPanel.h" -struct HitTestResult; - class wxMouseState; class MuteButtonHandle final : public ButtonHandle @@ -38,7 +36,7 @@ protected: bool StopsOnKeystroke () override { return true; } public: - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &pTrack); @@ -66,7 +64,7 @@ protected: bool StopsOnKeystroke () override { return true; } public: - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &pTrack); diff --git a/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.cpp index f27253ca6..15ba6277d 100644 --- a/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.cpp @@ -42,14 +42,6 @@ HitTestPreview CutlineHandle::HitPreview(bool cutline, bool unsafe) : &arrowCursor) }; } - -HitTestResult CutlineHandle::HitAnywhere -(const AudacityProject *pProject, bool cutline, UIHandlePtr ptr) -{ - const bool unsafe = pProject->IsAudioActive(); - return { HitPreview(cutline, unsafe), ptr }; -} - namespace { int FindMergeLine(WaveTrack *track, double time) @@ -98,9 +90,10 @@ namespace } } -HitTestResult CutlineHandle::HitTest +UIHandlePtr CutlineHandle::HitTest (std::weak_ptr &holder, - const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, + const wxMouseState &state, const wxRect &rect, + const AudacityProject *pProject, const std::shared_ptr &pTrack) { const ViewInfo &viewInfo = pProject->GetViewInfo(); @@ -116,7 +109,7 @@ HitTestResult CutlineHandle::HitTest auto result = std::make_shared( pTrack, location ); result = AssignUIHandlePtr( holder, result ); - return HitAnywhere(pProject, location.typ == WaveTrackLocation::locationCutLine, result); + return result; } CutlineHandle::~CutlineHandle() diff --git a/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.h b/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.h index daf8d9112..720d9197b 100644 --- a/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/CutlineHandle.h @@ -18,11 +18,8 @@ Paul Licameli class wxMouseEvent; class wxMouseState; -struct HitTestResult; class WaveTrack; -using UIHandlePtr = std::shared_ptr; - class CutlineHandle final : public UIHandle { CutlineHandle(const CutlineHandle&) = delete; @@ -35,9 +32,9 @@ public: CutlineHandle &operator=(const CutlineHandle&) = default; - static HitTestResult HitAnywhere + static UIHandlePtr HitAnywhere (const AudacityProject *pProject, bool cutline, UIHandlePtr ptr); - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, diff --git a/src/tracks/playabletrack/wavetrack/ui/SampleHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/SampleHandle.cpp index 68e47febe..b43ca1cb8 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SampleHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/SampleHandle.cpp @@ -57,15 +57,13 @@ HitTestPreview SampleHandle::HitPreview }; } -HitTestResult SampleHandle::HitAnywhere +UIHandlePtr SampleHandle::HitAnywhere (std::weak_ptr &holder, - const wxMouseState &state, const AudacityProject *pProject, - const std::shared_ptr &pTrack) + const wxMouseState &state, const std::shared_ptr &pTrack) { auto result = std::make_shared( pTrack ); result = AssignUIHandlePtr(holder, result); - const bool unsafe = pProject->IsAudioActive(); - return { HitPreview(state, pProject, unsafe), result }; + return result; } namespace { @@ -97,7 +95,7 @@ namespace { } } -HitTestResult SampleHandle::HitTest +UIHandlePtr SampleHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &pTrack) @@ -149,7 +147,7 @@ HitTestResult SampleHandle::HitTest if (abs(yValue - yMouse) >= yTolerance) return {}; - return HitAnywhere(holder, state, pProject, pTrack); + return HitAnywhere(holder, state, pTrack); } SampleHandle::~SampleHandle() diff --git a/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h b/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h index 08458ca1c..b2f29af3a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h @@ -19,7 +19,6 @@ class wxMouseEvent; class wxMouseState; #include -struct HitTestResult; class Track; class ViewInfo; class WaveTrack; @@ -35,11 +34,10 @@ public: SampleHandle &operator=(const SampleHandle&) = default; - static HitTestResult HitAnywhere + static UIHandlePtr HitAnywhere (std::weak_ptr &holder, - const wxMouseState &state, const AudacityProject *pProject, - const std::shared_ptr &pTrack); - static HitTestResult HitTest + const wxMouseState &state, const std::shared_ptr &pTrack); + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &pTrack); diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index bd71f9435..28229d06f 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -53,7 +53,7 @@ WaveTrackControls::~WaveTrackControls() } -HitTestResult WaveTrackControls::HitTest +UIHandlePtr WaveTrackControls::HitTest (const TrackPanelMouseState & st, const AudacityProject *pProject) { @@ -62,21 +62,21 @@ HitTestResult WaveTrackControls::HitTest if (state.ButtonIsDown(wxMOUSE_BTN_LEFT)) { auto track = FindTrack(); if (track && track->GetKind() == Track::Wave) { - HitTestResult result; + UIHandlePtr result; if (NULL != (result = MuteButtonHandle::HitTest( - mMuteHandle, state, rect, pProject, track)).handle) + mMuteHandle, state, rect, pProject, track))) return result; if (NULL != (result = SoloButtonHandle::HitTest( - mSoloHandle, state, rect, pProject, track)).handle) + mSoloHandle, state, rect, pProject, track))) return result; if (NULL != (result = GainSliderHandle::HitTest( - mGainHandle, state, rect, pProject, track)).handle) + mGainHandle, state, rect, track))) return result; if (NULL != (result = PanSliderHandle::HitTest( - mPanHandle, state, rect, pProject, track)).handle) + mPanHandle, state, rect, track))) return result; } } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.h index 84cefabca..6a6292af2 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.h @@ -29,7 +29,7 @@ public: : TrackControls( pTrack ) {} ~WaveTrackControls(); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp index da821ae1d..206eddf0b 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp @@ -63,10 +63,10 @@ UIHandle::Result GainSliderHandle::CommitChanges return RefreshCode::RefreshCell; } -HitTestResult GainSliderHandle::HitTest +UIHandlePtr GainSliderHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *, const std::shared_ptr &pTrack) + const std::shared_ptr &pTrack) { if (!state.ButtonIsDown(wxMOUSE_BTN_LEFT)) return {}; @@ -88,10 +88,7 @@ HitTestResult GainSliderHandle::HitTest std::make_shared( sliderFn, sliderRect, pTrack ); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview{}, - result - }; + return result; } else return {}; @@ -155,10 +152,10 @@ UIHandle::Result PanSliderHandle::CommitChanges return RefreshCode::RefreshCell; } -HitTestResult PanSliderHandle::HitTest +UIHandlePtr PanSliderHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack) + const std::shared_ptr &pTrack) { if (!state.ButtonIsDown(wxMOUSE_BTN_LEFT)) return {}; @@ -178,10 +175,7 @@ HitTestResult PanSliderHandle::HitTest sliderFn, sliderRect, pTrack ); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview{}, - result - }; + return result; } else return {}; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h index fb3e1f512..8f108275a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h @@ -16,8 +16,6 @@ Paul Licameli split from TrackPanel.cpp class wxMouseState; class WaveTrack; -struct HitTestResult; - class GainSliderHandle final : public SliderHandle { GainSliderHandle(const GainSliderHandle&) = delete; @@ -43,10 +41,10 @@ protected: bool StopsOnKeystroke () override { return true; } public: - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack); + const std::shared_ptr &pTrack); }; //////////////////////////////////////////////////////////////////////////////// @@ -75,10 +73,10 @@ protected: bool StopsOnKeystroke () override { return true; } public: - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack); + const std::shared_ptr &pTrack); }; #endif diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp index 2501b7d7c..e0402933f 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp @@ -23,7 +23,7 @@ Paul Licameli split from TrackPanel.cpp #include "SampleHandle.h" #include "../../../ui/TimeShiftHandle.h" -HitTestResult WaveTrack::DetailedHitTest +UIHandlePtr WaveTrack::DetailedHitTest (const TrackPanelMouseState &st, const AudacityProject *pProject, int currentTool, bool bMultiTool) { @@ -40,15 +40,15 @@ HitTestResult WaveTrack::DetailedHitTest // (But this does not do the time shift constrained to the vertical only, // which is what happens when you hold Ctrl in the Time Shift tool mode) return TimeShiftHandle::HitAnywhere( - mTimeShiftHandle, pProject, Pointer(this), false); + mTimeShiftHandle, Pointer(this), false); // Some special targets are not drawn in spectrogram, // so don't hit them in such views. else if (isWaveform) { - HitTestResult result; + UIHandlePtr result; if (NULL != (result = CutlineHandle::HitTest( mCutlineHandle, st.state, st.rect, - pProject, Pointer(this))).preview.cursor) + pProject, Pointer(this)))) // This overriding test applies in all tools return result; else if (bMultiTool) { @@ -58,18 +58,16 @@ HitTestResult WaveTrack::DetailedHitTest // point, seems arbitrary if (NULL != (result = EnvelopeHandle::WaveTrackHitTest( mEnvelopeHandle, st.state, st.rect, - pProject, Pointer(this))) - .preview.cursor) + pProject, Pointer(this)))) ; else if (NULL != (result = TimeShiftHandle::HitTest( - mTimeShiftHandle, st.state, st.rect, - pProject, Pointer(this))).preview.cursor) + mTimeShiftHandle, st.state, st.rect, Pointer(this)))) // This is the hit test on the "grips" drawn left and // right in Multi only ; else if (NULL != (result = SampleHandle::HitTest( mSampleHandle, st.state, st.rect, - pProject, Pointer(this))).preview.cursor) + pProject, Pointer(this)))) ; return result; } @@ -79,11 +77,11 @@ HitTestResult WaveTrack::DetailedHitTest case envelopeTool: { auto envelope = GetEnvelopeAtX( st.state.m_x ); return EnvelopeHandle::HitAnywhere( - mEnvelopeHandle, pProject, envelope); + mEnvelopeHandle, envelope); } case drawTool: return SampleHandle::HitAnywhere( - mSampleHandle, st.state, pProject, Pointer(this)); + mSampleHandle, st.state, Pointer(this)); default: break; } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp index 1b6f89ba0..b458bf03a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp @@ -21,15 +21,12 @@ Paul Licameli split from TrackPanel.cpp #include "../../../../TrackPanelMouseEvent.h" #include "../../../../WaveTrack.h" -#include - - /////////////////////////////////////////////////////////////////////////////// WaveTrackVRulerControls::~WaveTrackVRulerControls() { } -HitTestResult WaveTrackVRulerControls::HitTest +UIHandlePtr WaveTrackVRulerControls::HitTest (const TrackPanelMouseState &st, const AudacityProject *) { @@ -38,7 +35,7 @@ HitTestResult WaveTrackVRulerControls::HitTest auto result = std::make_shared( pTrack, st.rect, st.state.m_y ); result = AssignUIHandlePtr(mVZoomHandle, result); - return WaveTrackVZoomHandle::HitTest(st.state, result); + return result; } return {}; } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h index 011c2daaa..188b4f1a7 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h @@ -26,7 +26,7 @@ public: : TrackVRulerControls( pTrack ) {} ~WaveTrackVRulerControls(); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *) override; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp index be2b08723..5ab0fb7ef 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp @@ -498,12 +498,6 @@ HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state) }; } -HitTestResult WaveTrackVZoomHandle::HitTest -(const wxMouseState &state, UIHandlePtr result) -{ - return { HitPreview(state), result }; -} - WaveTrackVZoomHandle::~WaveTrackVZoomHandle() { } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h index 04c47ebd4..88f5a9db5 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h @@ -17,8 +17,6 @@ class WaveTrack; #include "../../../../MemoryX.h" #include "../../../../UIHandle.h" -struct HitTestResult; - class WaveTrackVZoomHandle : public UIHandle { WaveTrackVZoomHandle(const WaveTrackVZoomHandle&); @@ -30,8 +28,6 @@ public: WaveTrackVZoomHandle &operator=(const WaveTrackVZoomHandle&) = default; - static HitTestResult HitTest(const wxMouseState &state, UIHandlePtr result); - static void DoZoom (AudacityProject *pProject, WaveTrack *pTrack, bool shiftDown, bool rightUp, diff --git a/src/tracks/timetrack/ui/TimeTrackControls.cpp b/src/tracks/timetrack/ui/TimeTrackControls.cpp index 3e6a52342..17d4fb5ed 100644 --- a/src/tracks/timetrack/ui/TimeTrackControls.cpp +++ b/src/tracks/timetrack/ui/TimeTrackControls.cpp @@ -21,7 +21,7 @@ TimeTrackControls::~TimeTrackControls() { } -HitTestResult TimeTrackControls::HitTest +UIHandlePtr TimeTrackControls::HitTest (const TrackPanelMouseState & state, const AudacityProject *pProject) { diff --git a/src/tracks/timetrack/ui/TimeTrackControls.h b/src/tracks/timetrack/ui/TimeTrackControls.h index afa59b25b..ba738d2d7 100644 --- a/src/tracks/timetrack/ui/TimeTrackControls.h +++ b/src/tracks/timetrack/ui/TimeTrackControls.h @@ -24,7 +24,7 @@ public: : TrackControls( pTrack ) {} ~TimeTrackControls(); - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override; diff --git a/src/tracks/timetrack/ui/TimeTrackUI.cpp b/src/tracks/timetrack/ui/TimeTrackUI.cpp index 1d724c2d7..bb5230e9a 100644 --- a/src/tracks/timetrack/ui/TimeTrackUI.cpp +++ b/src/tracks/timetrack/ui/TimeTrackUI.cpp @@ -18,7 +18,7 @@ Paul Licameli split from TrackPanel.cpp #include "../../ui/EnvelopeHandle.h" -HitTestResult TimeTrack::DetailedHitTest +UIHandlePtr TimeTrack::DetailedHitTest (const TrackPanelMouseState &st, const AudacityProject *pProject, int, bool) { diff --git a/src/tracks/ui/BackgroundCell.cpp b/src/tracks/ui/BackgroundCell.cpp index c5acb34d7..b63f8b058 100644 --- a/src/tracks/ui/BackgroundCell.cpp +++ b/src/tracks/ui/BackgroundCell.cpp @@ -36,14 +36,6 @@ public: return { {}, &arrowCursor }; } - static HitTestResult HitAnywhere(UIHandlePtr result) - { - return { - HitPreview(), - result - }; - } - virtual ~BackgroundHandle() {} @@ -87,14 +79,14 @@ BackgroundCell::~BackgroundCell() { } -HitTestResult BackgroundCell::HitTest +UIHandlePtr BackgroundCell::HitTest (const TrackPanelMouseState &, const AudacityProject *) { auto result = mHandle.lock(); if (!result) result = std::make_shared(); - return BackgroundHandle::HitAnywhere(result); + return result; } std::shared_ptr BackgroundCell::FindTrack() diff --git a/src/tracks/ui/BackgroundCell.h b/src/tracks/ui/BackgroundCell.h index a821026fb..d39ea04ad 100644 --- a/src/tracks/ui/BackgroundCell.h +++ b/src/tracks/ui/BackgroundCell.h @@ -29,9 +29,9 @@ public: virtual ~BackgroundCell(); protected: - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, - const AudacityProject *pProject) override; + const AudacityProject *) override; std::shared_ptr FindTrack() override; diff --git a/src/tracks/ui/EnvelopeHandle.cpp b/src/tracks/ui/EnvelopeHandle.cpp index bd46eabf8..f6dfb3450 100644 --- a/src/tracks/ui/EnvelopeHandle.cpp +++ b/src/tracks/ui/EnvelopeHandle.cpp @@ -48,13 +48,11 @@ HitTestPreview EnvelopeHandle::HitPreview(const AudacityProject *pProject, bool }; } -HitTestResult EnvelopeHandle::HitAnywhere -(std::weak_ptr &holder, - const AudacityProject *pProject, Envelope *envelope) +UIHandlePtr EnvelopeHandle::HitAnywhere +(std::weak_ptr &holder, Envelope *envelope) { - const bool unsafe = pProject->IsAudioActive(); - UIHandlePtr result = std::make_shared( envelope ); - return { HitPreview(pProject, unsafe), result }; + auto result = std::make_shared( envelope ); + return result; } namespace { @@ -74,7 +72,7 @@ namespace { } } -HitTestResult EnvelopeHandle::TimeTrackHitTest +UIHandlePtr EnvelopeHandle::TimeTrackHitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &tt) @@ -90,7 +88,7 @@ HitTestResult EnvelopeHandle::TimeTrackHitTest (holder, state, rect, pProject, envelope, zoomMin, zoomMax, dB, dBRange); } -HitTestResult EnvelopeHandle::WaveTrackHitTest +UIHandlePtr EnvelopeHandle::WaveTrackHitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &wt) @@ -120,7 +118,7 @@ HitTestResult EnvelopeHandle::WaveTrackHitTest (holder, state, rect, pProject, envelope, zoomMin, zoomMax, dB, dBRange); } -HitTestResult EnvelopeHandle::HitEnvelope +UIHandlePtr EnvelopeHandle::HitEnvelope (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, Envelope *envelope, float zoomMin, float zoomMax, @@ -170,7 +168,7 @@ HitTestResult EnvelopeHandle::HitEnvelope if (distance >= yTolerance) return {}; - return HitAnywhere(holder, pProject, envelope); + return HitAnywhere(holder, envelope); } UIHandle::Result EnvelopeHandle::Click diff --git a/src/tracks/ui/EnvelopeHandle.h b/src/tracks/ui/EnvelopeHandle.h index 4ac3de630..236781faf 100644 --- a/src/tracks/ui/EnvelopeHandle.h +++ b/src/tracks/ui/EnvelopeHandle.h @@ -20,7 +20,6 @@ class wxMouseState; class Envelope; class EnvelopeEditor; -struct HitTestResult; class ViewInfo; class TimeTrack; class WaveTrack; @@ -31,7 +30,7 @@ class EnvelopeHandle final : public UIHandle EnvelopeHandle &operator=(const EnvelopeHandle&) = delete; static HitTestPreview HitPreview(const AudacityProject *pProject, bool unsafe); - static HitTestResult HitEnvelope + static UIHandlePtr HitEnvelope (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, @@ -43,14 +42,13 @@ public: virtual ~EnvelopeHandle(); - static HitTestResult HitAnywhere - (std::weak_ptr &holder, - const AudacityProject *pProject, Envelope *envelope); - static HitTestResult TimeTrackHitTest + static UIHandlePtr HitAnywhere + (std::weak_ptr &holder, Envelope *envelope); + static UIHandlePtr TimeTrackHitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &tt); - static HitTestResult WaveTrackHitTest + static UIHandlePtr WaveTrackHitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr &wt); diff --git a/src/tracks/ui/SelectHandle.cpp b/src/tracks/ui/SelectHandle.cpp index e53dd4774..fbdc63f99 100644 --- a/src/tracks/ui/SelectHandle.cpp +++ b/src/tracks/ui/SelectHandle.cpp @@ -418,7 +418,7 @@ namespace } } -HitTestResult SelectHandle::HitTest +UIHandlePtr SelectHandle::HitTest (std::weak_ptr &holder, const TrackPanelMouseState &st, const AudacityProject *pProject, const std::shared_ptr &pTrack) @@ -447,29 +447,6 @@ HitTestResult SelectHandle::HitTest const wxMouseState &state = st.state; const wxRect &rect = st.rect; - wxCursor *pCursor = SelectCursor(); - const bool bMultiToolMode = pProject->GetToolsToolBar()->IsDown(multiTool); - wxString tip; - - //In Multi-tool mode, give multitool prompt if no-special-hit. - if (bMultiToolMode) { - // Look up the current key binding for Preferences. - // (Don't assume it's the default!) - wxString keyStr - (pProject->GetCommandManager()->GetKeyFromName(wxT("Preferences"))); - if (keyStr.IsEmpty()) - // No keyboard preference defined for opening Preferences dialog - /* i18n-hint: These are the names of a menu and a command in that menu */ - keyStr = _("Edit, Preferences..."); - else - keyStr = KeyStringDisplay(keyStr); - /* i18n-hint: %s is usually replaced by "Ctrl+P" for Windows/Linux, "Command+," for Mac */ - tip = wxString::Format( - _("Multi-Tool Mode: %s for Mouse and Keyboard Preferences."), - keyStr.c_str()); - // Later in this function we may point to some other string instead. - } - const ViewInfo &viewInfo = pProject->GetViewInfo(); //Make sure we are within the selected track @@ -477,8 +454,7 @@ HitTestResult SelectHandle::HitTest // the preferences... if (!pTrack->GetSelected() || !viewInfo.bAdjustSelectionEdges) { - MaySetOnDemandTip(pTrack.get(), tip); - return { { tip, pCursor }, result }; + return result; } { @@ -488,42 +464,7 @@ HitTestResult SelectHandle::HitTest wxASSERT(!(rightSel < leftSel)); } - const bool bShiftDown = state.ShiftDown(); - const bool bCtrlDown = state.ControlDown(); - const bool bModifierDown = bShiftDown || bCtrlDown; - -#if 0 - // This is a vestige of an idea in the prototype version. - // Center would snap without mouse button down, click would pin the center - // and drag width. -#ifdef EXPERIMENTAL_SPECTRAL_EDITING - if ((mFreqSelMode == FREQ_SEL_SNAPPING_CENTER) && - isSpectralSelectionTrack(pTrack)) { - // Not shift-down, but center frequency snapping toggle is on - tip = _("Click and drag to set frequency bandwidth."); - pCursor = &*envelopeCursor; - return {}; - } -#endif -#endif - - // If not shift-down and not snapping center, then - // choose boundaries only in snapping tolerance, - // and may choose center. - SelectionBoundary boundary = - ChooseBoundary(viewInfo, state, pTrack.get(), rect, !bModifierDown, !bModifierDown); - - SetTipAndCursorForBoundary(boundary, !bShiftDown, tip, pCursor); - - MaySetOnDemandTip(pTrack.get(), tip); - - if (tip == "") { - const auto ttb = pProject->GetToolsToolBar(); - if (ttb) - tip = ttb->GetMessageForTool(selectTool); - } - - return HitTestResult{ { tip, pCursor }, result }; + return result; } SelectHandle::SelectHandle( const std::shared_ptr &pTrack ) diff --git a/src/tracks/ui/SelectHandle.h b/src/tracks/ui/SelectHandle.h index 8bdeac78a..79d610ab8 100644 --- a/src/tracks/ui/SelectHandle.h +++ b/src/tracks/ui/SelectHandle.h @@ -20,7 +20,6 @@ Paul Licameli split from TrackPanel.cpp #include #include -struct HitTestResult; class SelectionStateChanger; class SnapManager; class SpectrumAnalyst; @@ -38,7 +37,7 @@ public: // This always hits, but details of the hit vary with mouse position and // key state. - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const TrackPanelMouseState &state, const AudacityProject *pProject, const std::shared_ptr &pTrack); diff --git a/src/tracks/ui/TimeShiftHandle.cpp b/src/tracks/ui/TimeShiftHandle.cpp index bf246a92e..0c62d4481 100644 --- a/src/tracks/ui/TimeShiftHandle.cpp +++ b/src/tracks/ui/TimeShiftHandle.cpp @@ -45,23 +45,20 @@ HitTestPreview TimeShiftHandle::HitPreview }; } -HitTestResult TimeShiftHandle::HitAnywhere +UIHandlePtr TimeShiftHandle::HitAnywhere (std::weak_ptr &holder, - const AudacityProject *pProject, const std::shared_ptr &pTrack, bool gripHit) { // After all that, it still may be unsafe to drag. // Even if so, make an informative cursor change from default to "banned." - const bool unsafe = pProject->IsAudioActive(); auto result = std::make_shared( pTrack, gripHit ); result = AssignUIHandlePtr(holder, result); - return { HitPreview(pProject, unsafe), result }; + return result; } -HitTestResult TimeShiftHandle::HitTest +UIHandlePtr TimeShiftHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack) { /// method that tells us if the mouse event landed on a @@ -81,7 +78,7 @@ HitTestResult TimeShiftHandle::HitTest state.m_x + hotspotOffset >= rect.x + rect.width - adjustedDragHandleWidth)) return {}; - return HitAnywhere( holder, pProject, pTrack, true ); + return HitAnywhere( holder, pTrack, true ); } TimeShiftHandle::~TimeShiftHandle() diff --git a/src/tracks/ui/TimeShiftHandle.h b/src/tracks/ui/TimeShiftHandle.h index f925414a4..232a4ac41 100644 --- a/src/tracks/ui/TimeShiftHandle.h +++ b/src/tracks/ui/TimeShiftHandle.h @@ -18,11 +18,8 @@ Paul Licameli #include "../../Snap.h" #include "../../Track.h" -struct HitTestResult; class WaveClip; -using UIHandlePtr = std::shared_ptr; - struct ClipMoveState { // non-NULL only if click was in a WaveTrack and without Shift key: WaveClip *capturedClip {}; @@ -68,14 +65,12 @@ public: static void DoSlideHorizontal ( ClipMoveState &state, TrackList &trackList, Track &capturedTrack ); - static HitTestResult HitAnywhere + static UIHandlePtr HitAnywhere (std::weak_ptr &holder, - const AudacityProject *pProject, const std::shared_ptr &pTrack, bool gripHit); - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, - const AudacityProject *pProject, const std::shared_ptr &pTrack); virtual ~TimeShiftHandle(); diff --git a/src/tracks/ui/TrackButtonHandles.cpp b/src/tracks/ui/TrackButtonHandles.cpp index ae19c21f3..13fb0913f 100644 --- a/src/tracks/ui/TrackButtonHandles.cpp +++ b/src/tracks/ui/TrackButtonHandles.cpp @@ -48,7 +48,7 @@ UIHandle::Result MinimizeButtonHandle::CommitChanges return RefreshNone; } -HitTestResult MinimizeButtonHandle::HitTest +UIHandlePtr MinimizeButtonHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, TrackPanelCell *pCell) { @@ -59,10 +59,7 @@ HitTestResult MinimizeButtonHandle::HitTest auto pTrack = static_cast(pCell)->FindTrack(); auto result = std::make_shared( pTrack, buttonRect ); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview{}, - result - }; + return result; } else return {}; @@ -102,7 +99,7 @@ UIHandle::Result CloseButtonHandle::CommitChanges return result; } -HitTestResult CloseButtonHandle::HitTest +UIHandlePtr CloseButtonHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, TrackPanelCell *pCell) { @@ -113,10 +110,7 @@ HitTestResult CloseButtonHandle::HitTest auto pTrack = static_cast(pCell)->FindTrack(); auto result = std::make_shared( pTrack, buttonRect ); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview{}, - result - }; + return result; } else return {}; @@ -144,7 +138,7 @@ UIHandle::Result MenuButtonHandle::CommitChanges return pCell->DoContextMenu(mRect, pParent, NULL); } -HitTestResult MenuButtonHandle::HitTest +UIHandlePtr MenuButtonHandle::HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const std::shared_ptr &pCell) @@ -156,10 +150,7 @@ HitTestResult MenuButtonHandle::HitTest auto pTrack = static_cast(pCell.get())->FindTrack(); auto result = std::make_shared( pCell, pTrack, buttonRect ); result = AssignUIHandlePtr(holder, result); - return { - HitTestPreview{}, - result - }; + return result; } else return {}; diff --git a/src/tracks/ui/TrackButtonHandles.h b/src/tracks/ui/TrackButtonHandles.h index 2f7fb9a78..a9aa2bb2a 100644 --- a/src/tracks/ui/TrackButtonHandles.h +++ b/src/tracks/ui/TrackButtonHandles.h @@ -15,7 +15,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../TrackPanel.h" class wxMouseState; -struct HitTestResult; class MinimizeButtonHandle final : public ButtonHandle { @@ -34,7 +33,7 @@ public: virtual ~MinimizeButtonHandle(); - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, TrackPanelCell *pCell); }; @@ -60,7 +59,7 @@ public: virtual ~CloseButtonHandle(); - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, TrackPanelCell *pCell); }; @@ -88,7 +87,7 @@ public: virtual ~MenuButtonHandle(); - static HitTestResult HitTest + static UIHandlePtr HitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const std::shared_ptr &pCell); diff --git a/src/tracks/ui/TrackControls.cpp b/src/tracks/ui/TrackControls.cpp index a959f4aef..7fb64140e 100644 --- a/src/tracks/ui/TrackControls.cpp +++ b/src/tracks/ui/TrackControls.cpp @@ -16,9 +16,9 @@ Paul Licameli split from TrackPanel.cpp #include "../../RefreshCode.h" #include "../../MixerBoard.h" #include "../../Project.h" -#include "../../TrackPanel.h" +#include "../../TrackPanel.h" // for TrackInfo #include "../../TrackPanelMouseEvent.h" -#include "../../WaveTrack.h" +#include "../../Track.h" #include int TrackControls::gCaptureState; @@ -37,32 +37,32 @@ std::shared_ptr TrackControls::FindTrack() return mwTrack.lock(); } -HitTestResult TrackControls::HitTest +UIHandlePtr TrackControls::HitTest (const TrackPanelMouseState &st, const AudacityProject *project) { const wxMouseState &state = st.state; const wxRect &rect = st.rect; - HitTestResult result; + UIHandlePtr result; auto pTrack = FindTrack(); // shared pointer to this: auto sThis = pTrack->GetTrackControl(); if (NULL != (result = CloseButtonHandle::HitTest( - mCloseHandle, state, rect, this)).handle) + mCloseHandle, state, rect, this))) return result; if (NULL != (result = MenuButtonHandle::HitTest( - mMenuHandle, state, rect, sThis)).handle) + mMenuHandle, state, rect, sThis))) return result; if (NULL != (result = MinimizeButtonHandle::HitTest( - mMinimizeHandle, state, rect, this)).handle) + mMinimizeHandle, state, rect, this))) return result; return TrackSelectHandle::HitAnywhere( - mSelectHandle, pTrack, project->GetTrackPanel()->GetTrackCount()); + mSelectHandle, pTrack); } enum diff --git a/src/tracks/ui/TrackControls.h b/src/tracks/ui/TrackControls.h index 67a32388d..99b2cc106 100644 --- a/src/tracks/ui/TrackControls.h +++ b/src/tracks/ui/TrackControls.h @@ -48,7 +48,7 @@ public: protected: // An override is supplied for derived classes to call through but it is // still marked pure virtual - virtual HitTestResult HitTest + virtual UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *) override = 0; diff --git a/src/tracks/ui/TrackSelectHandle.cpp b/src/tracks/ui/TrackSelectHandle.cpp index 8d04e2dbf..2df73bb66 100644 --- a/src/tracks/ui/TrackSelectHandle.cpp +++ b/src/tracks/ui/TrackSelectHandle.cpp @@ -53,25 +53,13 @@ TrackSelectHandle::TrackSelectHandle( const std::shared_ptr &pTrack ) : mpTrack( pTrack ) {} -HitTestPreview TrackSelectHandle::HitPreview(unsigned trackCount) -{ - static wxCursor arrowCursor{ wxCURSOR_ARROW }; - return { - Message(trackCount), - &arrowCursor - }; -} - -HitTestResult TrackSelectHandle::HitAnywhere +UIHandlePtr TrackSelectHandle::HitAnywhere (std::weak_ptr &holder, - const std::shared_ptr &pTrack, unsigned trackCount) + const std::shared_ptr &pTrack) { auto result = std::make_shared(pTrack); result = AssignUIHandlePtr(holder, result); - return { - HitPreview(trackCount), - result - }; + return result; } TrackSelectHandle::~TrackSelectHandle() diff --git a/src/tracks/ui/TrackSelectHandle.h b/src/tracks/ui/TrackSelectHandle.h index 6301e1737..20c1fe6e0 100644 --- a/src/tracks/ui/TrackSelectHandle.h +++ b/src/tracks/ui/TrackSelectHandle.h @@ -15,22 +15,20 @@ Paul Licameli split from TrackPanel.cpp #include "../../MemoryX.h" class wxMouseEvent; -struct HitTestResult; class Track; class TrackSelectHandle final : public UIHandle { TrackSelectHandle(const TrackSelectHandle&) = delete; - static HitTestPreview HitPreview(unsigned trackCount); public: explicit TrackSelectHandle( const std::shared_ptr &pTrack ); TrackSelectHandle &operator=(const TrackSelectHandle&) = default; - static HitTestResult HitAnywhere + static UIHandlePtr HitAnywhere (std::weak_ptr &holder, - const std::shared_ptr &pTrack, unsigned trackCount); + const std::shared_ptr &pTrack); virtual ~TrackSelectHandle(); diff --git a/src/tracks/ui/TrackUI.cpp b/src/tracks/ui/TrackUI.cpp index 4c27314a4..8f5f58865 100644 --- a/src/tracks/ui/TrackUI.cpp +++ b/src/tracks/ui/TrackUI.cpp @@ -25,7 +25,7 @@ Paul Licameli split from TrackPanel.cpp #include "../../TrackPanelResizerCell.h" #include "BackgroundCell.h" -HitTestResult Track::HitTest +UIHandlePtr Track::HitTest (const TrackPanelMouseState &st, const AudacityProject *pProject) { @@ -37,28 +37,28 @@ HitTestResult Track::HitTest // Zoom tool is a non-selecting tool that takes precedence in all tracks // over all other tools, no matter what detail you point at. return ZoomHandle::HitAnywhere( - pProject->GetBackgroundCell()->mZoomHandle, st.state, pProject); + pProject->GetBackgroundCell()->mZoomHandle); // In other tools, let subclasses determine detailed hits. - HitTestResult result = + auto result = DetailedHitTest( st, pProject, currentTool, isMultiTool ); // If there is no detailed hit for the subclass, there are still some // general cases. // Sliding applies in more than one track type. - if ( !result.handle && !isMultiTool && currentTool == slideTool ) + if ( !result && !isMultiTool && currentTool == slideTool ) result = TimeShiftHandle::HitAnywhere( - mTimeShiftHandle, pProject, Pointer(this), false); + mTimeShiftHandle, Pointer(this), false); // Let the multi-tool right-click handler apply only in default of all // other detailed hits. - if ( !result.handle && isMultiTool ) + if ( !result && isMultiTool ) result = ZoomHandle::HitTest( - pProject->GetBackgroundCell()->mZoomHandle, st.state, pProject); + pProject->GetBackgroundCell()->mZoomHandle, st.state); // Finally, default of all is adjustment of the selection box. - if ( !result.handle && ( isMultiTool || currentTool == selectTool) ) + if ( !result && ( isMultiTool || currentTool == selectTool) ) result = SelectHandle::HitTest( mSelectHandle, st, pProject, Pointer(this)); diff --git a/src/tracks/ui/TrackVRulerControls.cpp b/src/tracks/ui/TrackVRulerControls.cpp index c9aa42735..39e699e53 100644 --- a/src/tracks/ui/TrackVRulerControls.cpp +++ b/src/tracks/ui/TrackVRulerControls.cpp @@ -32,7 +32,7 @@ std::shared_ptr TrackVRulerControls::FindTrack() return mwTrack.lock(); } -HitTestResult TrackVRulerControls::HitTest +UIHandlePtr TrackVRulerControls::HitTest (const TrackPanelMouseState &, const AudacityProject *) { return {}; diff --git a/src/tracks/ui/TrackVRulerControls.h b/src/tracks/ui/TrackVRulerControls.h index 141a9d17a..bf7536b04 100644 --- a/src/tracks/ui/TrackVRulerControls.h +++ b/src/tracks/ui/TrackVRulerControls.h @@ -28,7 +28,7 @@ public: std::shared_ptr FindTrack() override; // Define a default hit test method, just for message and cursor - HitTestResult HitTest + UIHandlePtr HitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override; diff --git a/src/tracks/ui/ZoomHandle.cpp b/src/tracks/ui/ZoomHandle.cpp index 9cf47bf29..6ee012553 100644 --- a/src/tracks/ui/ZoomHandle.cpp +++ b/src/tracks/ui/ZoomHandle.cpp @@ -54,21 +54,20 @@ HitTestPreview ZoomHandle::HitPreview }; } -HitTestResult ZoomHandle::HitAnywhere -(std::weak_ptr &holder, - const wxMouseState &state, const AudacityProject *pProject) +UIHandlePtr ZoomHandle::HitAnywhere +(std::weak_ptr &holder) { auto result = std::make_shared(); result = AssignUIHandlePtr(holder, result); - return { HitPreview(state, pProject), result }; + return result; } -HitTestResult ZoomHandle::HitTest +UIHandlePtr ZoomHandle::HitTest (std::weak_ptr &holder, - const wxMouseState &state, const AudacityProject *pProject) + const wxMouseState &state) { if (state.ButtonIsDown(wxMOUSE_BTN_RIGHT)) - return HitAnywhere(holder, state, pProject); + return HitAnywhere(holder); else return {}; } diff --git a/src/tracks/ui/ZoomHandle.h b/src/tracks/ui/ZoomHandle.h index 1ac0e3949..b9927b3a7 100644 --- a/src/tracks/ui/ZoomHandle.h +++ b/src/tracks/ui/ZoomHandle.h @@ -16,8 +16,6 @@ Paul Licameli split from TrackPanel.cpp class wxMouseState; #include -struct HitTestResult; - // This handle class, unlike most, doesn't associate with any particular cell. class ZoomHandle final : public UIHandle { @@ -30,12 +28,10 @@ public: ZoomHandle &operator=(const ZoomHandle&) = default; - static HitTestResult HitAnywhere - (std::weak_ptr &holder, - const wxMouseState &state, const AudacityProject *pProject); - static HitTestResult HitTest - (std::weak_ptr &holder, - const wxMouseState &state, const AudacityProject *pProject); + static UIHandlePtr HitAnywhere + (std::weak_ptr &holder); + static UIHandlePtr HitTest + (std::weak_ptr &holder, const wxMouseState &state); virtual ~ZoomHandle();