1 /********************************************************************** 2 3 Audacity: A Digital Audio Editor 4 5 SampleHandle.h 6 7 Paul Licameli 8 9 **********************************************************************/ 10 11 #ifndef __AUDACITY_SAMPLE_HANDLE__ 12 #define __AUDACITY_SAMPLE_HANDLE__ 13 14 #include "../../../../UIHandle.h" 15 #include "SampleCount.h" 16 17 class wxMouseEvent; 18 class wxMouseState; 19 20 class Track; 21 class ViewInfo; 22 class WaveTrack; 23 24 class SampleHandle final : public UIHandle 25 { 26 SampleHandle(const SampleHandle&) = delete; 27 static HitTestPreview HitPreview 28 (const wxMouseState &state, const AudacityProject *pProject, bool unsafe); 29 30 public: 31 explicit SampleHandle( const std::shared_ptr<WaveTrack> &pTrack ); 32 33 SampleHandle &operator=(const SampleHandle&) = default; 34 35 static UIHandlePtr HitAnywhere 36 (std::weak_ptr<SampleHandle> &holder, 37 const wxMouseState &state, const std::shared_ptr<WaveTrack> &pTrack); 38 static UIHandlePtr HitTest 39 (std::weak_ptr<SampleHandle> &holder, 40 const wxMouseState &state, const wxRect &rect, 41 const AudacityProject *pProject, const std::shared_ptr<WaveTrack> &pTrack); 42 43 virtual ~SampleHandle(); 44 GetTrack()45 std::shared_ptr<WaveTrack> GetTrack() const { return mClickedTrack; } 46 47 void Enter(bool forward, AudacityProject *) override; 48 49 Result Click 50 (const TrackPanelMouseEvent &event, AudacityProject *pProject) override; 51 52 Result Drag 53 (const TrackPanelMouseEvent &event, AudacityProject *pProject) override; 54 55 HitTestPreview Preview 56 (const TrackPanelMouseState &state, AudacityProject *pProject) 57 override; 58 59 Result Release 60 (const TrackPanelMouseEvent &event, AudacityProject *pProject, 61 wxWindow *pParent) override; 62 63 Result Cancel(AudacityProject *pProject) override; 64 StopsOnKeystroke()65 bool StopsOnKeystroke() override { return true; } 66 67 private: 68 float FindSampleEditingLevel 69 (const wxMouseEvent &event, const ViewInfo &viewInfo, double t0); 70 71 std::shared_ptr<WaveTrack> mClickedTrack; 72 wxRect mRect{}; 73 74 sampleCount mClickedStartSample{}; 75 sampleCount mLastDragSample{}; 76 float mLastDragSampleValue{}; 77 bool mAltKey{}; 78 }; 79 80 #endif 81