Audacity 3.2.0
NoteTrackButtonHandle.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3Audacity: A Digital Audio Editor
4
5NoteTrackButtonHandle.cpp
6
7Paul Licameli split from TrackPanel.cpp
8
9**********************************************************************/
10
11
12
13#ifdef USE_MIDI
15
16#include "../../../../HitTestResult.h"
17#include "NoteTrackControls.h"
18#include "../../../../TrackPanelMouseEvent.h"
19#include "../../../../NoteTrack.h"
20#include "ProjectHistory.h"
21#include "../../../../RefreshCode.h"
22#include "../../../../TrackInfo.h"
23
24#include <wx/event.h>
25
27( const std::shared_ptr<NoteTrack> &pTrack,
28 int channel, const wxRect &rect )
29 : mpTrack{ pTrack }
30 , mChannel{ channel }
31 , mRect{ rect }
32{
33}
34
36{
38}
39
41{
42}
43
45(const NoteTrackButtonHandle &oldState, const NoteTrackButtonHandle &newState)
46{
47 if (oldState.GetChannel() != newState.GetChannel())
48 // Repaint whenever the highlighted button is different
50 return 0;
51}
52
54 (std::weak_ptr<NoteTrackButtonHandle> &holder,
55 const wxMouseState &state, const wxRect &rect,
56 const std::shared_ptr<NoteTrack> &pTrack)
57{
58 wxRect midiRect;
60 if ( TrackInfo::HideTopItem( rect, midiRect ) )
61 return {};
62 if (midiRect.Contains(state.m_x, state.m_y)) {
63 auto channel = pTrack->FindChannel(midiRect, state.m_x, state.m_y);
64 auto result = std::make_shared<NoteTrackButtonHandle>(
65 pTrack, channel, midiRect );
66 result = AssignUIHandlePtr(holder, result);
67 return result;
68 }
69 else
70 return {};
71}
72
75{
77}
78
81{
83}
84
87{
88 // auto pTrack = pProject->GetTracks()->Lock(mpTrack);
89 auto pTrack = mpTrack.lock();
90 if ( !pTrack )
91 return {};
92 // No special message or cursor
93 return {};
94}
95
97(const TrackPanelMouseEvent &evt, AudacityProject *pProject, wxWindow *)
98{
99 using namespace RefreshCode;
100
101 auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
102 if (!pTrack)
103 return Cancelled;
104
105 const wxMouseEvent &event = evt.event;
106 if (pTrack->LabelClick(mRect, event.m_x, event.m_y,
107 event.Button(wxMOUSE_BTN_RIGHT))) {
108 // No undo items needed??
109 ProjectHistory::Get( *pProject ).ModifyState(false);
110 return RefreshAll;
111 }
112 return RefreshNone;
113}
114
116{
118}
119
120#endif
std::shared_ptr< UIHandle > UIHandlePtr
Definition: CellularPanel.h:28
std::shared_ptr< Subclass > AssignUIHandlePtr(std::weak_ptr< Subclass > &holder, const std::shared_ptr< Subclass > &pNew)
Definition: UIHandle.h:151
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
static UIHandle::Result NeedChangeHighlight(const NoteTrackButtonHandle &oldState, const NoteTrackButtonHandle &newState)
Result Release(const TrackPanelMouseEvent &event, AudacityProject *pProject, wxWindow *pParent) override
HitTestPreview Preview(const TrackPanelMouseState &state, AudacityProject *pProject) override
Result Drag(const TrackPanelMouseEvent &event, AudacityProject *pProject) override
Result Click(const TrackPanelMouseEvent &event, AudacityProject *pProject) override
void Enter(bool forward, AudacityProject *) override
std::weak_ptr< NoteTrack > mpTrack
Result Cancel(AudacityProject *pProject) override
static UIHandlePtr HitTest(std::weak_ptr< NoteTrackButtonHandle > &holder, const wxMouseState &state, const wxRect &rect, const std::shared_ptr< NoteTrack > &pTrack)
static void GetMidiControlsRect(const wxRect &rect, wxRect &dest)
void ModifyState(bool bWantsAutoSave)
static ProjectHistory & Get(AudacityProject &project)
std::shared_ptr< Subclass > Lock(const std::weak_ptr< Subclass > &wTrack)
Definition: Track.h:1606
static TrackList & Get(AudacityProject &project)
Definition: Track.cpp:487
Result mChangeHighlight
Definition: UIHandle.h:139
unsigned Result
Definition: UIHandle.h:38
Namespace containing an enum 'what to do on a refresh?'.
Definition: RefreshCode.h:16
AUDACITY_DLL_API bool HideTopItem(const wxRect &rect, const wxRect &subRect, int allowance=0)
Definition: TrackInfo.cpp:208