1 /*!******************************************************************** 2 * 3 Audacity: A Digital Audio Editor 4 5 WaveTrackAffordanceControls.h 6 7 Vitaly Sverchinsky 8 9 **********************************************************************/ 10 11 #pragma once 12 13 #include <wx/font.h> 14 #include <wx/event.h> 15 16 #include "../../../ui/CommonTrackPanelCell.h" 17 #include "../../../ui/TextEditHelper.h" 18 19 20 struct TrackListEvent; 21 22 class AffordanceHandle; 23 class SelectHandle; 24 class WaveClip; 25 class TrackPanelResizeHandle; 26 class WaveClipTitleEditHandle; 27 class WaveTrackAffordanceHandle; 28 class WaveClipTrimHandle; 29 class TrackList; 30 31 //Handles clip movement, selection, navigation and 32 //allow name change 33 class AUDACITY_DLL_API WaveTrackAffordanceControls : 34 public CommonTrackCell, 35 public TextEditDelegate, 36 public wxEvtHandler, 37 public std::enable_shared_from_this<WaveTrackAffordanceControls> 38 { 39 std::weak_ptr<WaveClip> mFocusClip; 40 std::weak_ptr<WaveTrackAffordanceHandle> mAffordanceHandle; 41 std::weak_ptr<TrackPanelResizeHandle> mResizeHandle; 42 std::weak_ptr<WaveClipTitleEditHandle> mTitleEditHandle; 43 std::weak_ptr<SelectHandle> mSelectHandle; 44 std::weak_ptr<WaveClipTrimHandle> mClipTrimHandle; 45 46 std::weak_ptr<WaveClip> mEditedClip; 47 std::shared_ptr<TextEditHelper> mTextEditHelper; 48 49 wxFont mClipNameFont; 50 51 public: 52 WaveTrackAffordanceControls(const std::shared_ptr<Track>& pTrack); 53 54 std::vector<UIHandlePtr> HitTest(const TrackPanelMouseState& state, const AudacityProject* pProject) override; 55 56 void Draw(TrackPanelDrawingContext& context, const wxRect& rect, unsigned iPass) override; 57 58 //Invokes name editing for a clip that currently is 59 //in focus(as a result of hit testing), returns true on success 60 //false if there is no focus 61 bool StartEditClipName(AudacityProject* project); 62 63 std::weak_ptr<WaveClip> GetSelectedClip() const; 64 65 unsigned CaptureKey 66 (wxKeyEvent& event, ViewInfo& viewInfo, wxWindow* pParent, 67 AudacityProject* project) override; 68 69 unsigned KeyDown (wxKeyEvent& event, ViewInfo& viewInfo, wxWindow* pParent, 70 AudacityProject* project) override; 71 72 unsigned Char 73 (wxKeyEvent& event, ViewInfo& viewInfo, wxWindow* pParent, 74 AudacityProject* project) override; 75 76 unsigned LoseFocus(AudacityProject *project) override; 77 78 void OnTextEditFinished(AudacityProject* project, const wxString& text) override; 79 void OnTextEditCancelled(AudacityProject* project) override; 80 void OnTextModified(AudacityProject* project, const wxString& text) override; 81 void OnTextContextMenu(AudacityProject* project, const wxPoint& position) override; 82 83 bool StartEditNameOfMatchingClip( AudacityProject &project, 84 std::function<bool(WaveClip&)> test /*!< 85 Edit the first clip in the track's list satisfying the test */ 86 ); 87 88 unsigned OnAffordanceClick(const TrackPanelMouseEvent& event, AudacityProject* project); 89 90 bool OnTextCopy(AudacityProject& project); 91 bool OnTextCut(AudacityProject& project); 92 bool OnTextPaste(AudacityProject& project); 93 bool OnTextSelect(AudacityProject& project); 94 95 private: 96 void ResetClipNameEdit(); 97 98 void OnTrackChanged(TrackListEvent& evt); 99 100 unsigned ExitTextEditing(); 101 102 std::shared_ptr<TextEditHelper> MakeTextEditHelper(const wxString& text); 103 }; 104