1 /********************************************************************** 2 3 Audacity: A Digital Audio Editor 4 5 TrackSelectHandle.h 6 7 Paul Licameli split from TrackPanel.cpp 8 9 **********************************************************************/ 10 11 #ifndef __AUDACITY_TRACK_SELECT_HANDLE__ 12 #define __AUDACITY_TRACK_SELECT_HANDLE__ 13 14 #include "../../UIHandle.h" 15 16 class wxMouseEvent; 17 class Track; 18 19 class TrackSelectHandle final : public UIHandle 20 { 21 TrackSelectHandle(const TrackSelectHandle&) = delete; 22 23 public: 24 explicit TrackSelectHandle( const std::shared_ptr<Track> &pTrack ); 25 26 TrackSelectHandle &operator=(const TrackSelectHandle&) = default; 27 28 static UIHandlePtr HitAnywhere 29 (std::weak_ptr<TrackSelectHandle> &holder, 30 const std::shared_ptr<Track> &pTrack); 31 32 virtual ~TrackSelectHandle(); 33 34 Result Click 35 (const TrackPanelMouseEvent &event, AudacityProject *pProject) override; 36 37 Result Drag 38 (const TrackPanelMouseEvent &event, AudacityProject *pProject) override; 39 40 HitTestPreview Preview 41 (const TrackPanelMouseState &state, AudacityProject *pProject) 42 override; 43 44 Result Release 45 (const TrackPanelMouseEvent &event, AudacityProject *pProject, 46 wxWindow *pParent) override; 47 48 Result Cancel(AudacityProject *) override; 49 StopsOnKeystroke()50 bool StopsOnKeystroke() override { return true; } 51 52 private: 53 std::shared_ptr<Track> mpTrack; 54 bool mClicked{}; 55 56 // JH: if the user is dragging a track, at what y 57 // coordinate should the dragging track move up or down? 58 int mMoveUpThreshold {}; 59 int mMoveDownThreshold {}; 60 int mRearrangeCount {}; 61 62 void CalculateRearrangingThresholds( 63 const wxMouseEvent & event, AudacityProject *project); 64 }; 65 66 #endif 67