1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-12-11 07:06:33 +01:00

Context menu handling is also in CellularPanel

This commit is contained in:
Paul Licameli
2018-06-26 22:43:04 -04:00
parent c08c17eafa
commit 7f84e71324
4 changed files with 31 additions and 12 deletions

View File

@@ -165,6 +165,10 @@ class AUDACITY_DLL_API Track /* not final */
(const TrackPanelMouseState &, const AudacityProject *pProject) (const TrackPanelMouseState &, const AudacityProject *pProject)
final override; final override;
// Delegates the handling to the related TCP cell
std::shared_ptr<TrackPanelCell> ContextMenuDelegate() override
{ return GetTrackControl(); }
public: public:
// Rather override this for subclasses: // Rather override this for subclasses:

View File

@@ -263,6 +263,7 @@ BEGIN_EVENT_TABLE(CellularPanel, OverlayPanel)
EVT_CHAR(CellularPanel::OnChar) EVT_CHAR(CellularPanel::OnChar)
EVT_SET_FOCUS(CellularPanel::OnSetFocus) EVT_SET_FOCUS(CellularPanel::OnSetFocus)
EVT_KILL_FOCUS(CellularPanel::OnKillFocus) EVT_KILL_FOCUS(CellularPanel::OnKillFocus)
EVT_CONTEXT_MENU(CellularPanel::OnContextMenu)
END_EVENT_TABLE() END_EVENT_TABLE()
BEGIN_EVENT_TABLE(TrackPanel, CellularPanel) BEGIN_EVENT_TABLE(TrackPanel, CellularPanel)
@@ -270,7 +271,6 @@ BEGIN_EVENT_TABLE(TrackPanel, CellularPanel)
EVT_KEY_DOWN(TrackPanel::OnKeyDown) EVT_KEY_DOWN(TrackPanel::OnKeyDown)
EVT_PAINT(TrackPanel::OnPaint) EVT_PAINT(TrackPanel::OnPaint)
EVT_CONTEXT_MENU(TrackPanel::OnContextMenu)
EVT_TIMER(wxID_ANY, TrackPanel::OnTimer) EVT_TIMER(wxID_ANY, TrackPanel::OnTimer)
END_EVENT_TABLE() END_EVENT_TABLE()
@@ -1167,9 +1167,9 @@ void TrackPanel::OnTrackListDeletion(wxCommandEvent & e)
e.Skip(); e.Skip();
} }
void TrackPanel::OnContextMenu(wxContextMenuEvent & WXUNUSED(event)) void CellularPanel::OnContextMenu(wxContextMenuEvent & WXUNUSED(event))
{ {
OnTrackMenu(); DoContextMenu();
} }
struct TrackInfo::TCPLine { struct TrackInfo::TCPLine {
@@ -2625,17 +2625,27 @@ void TrackPanel::ScrollIntoView(int x)
void TrackPanel::OnTrackMenu(Track *t) void TrackPanel::OnTrackMenu(Track *t)
{ {
if(!t) { CellularPanel::DoContextMenu( t );
t = GetFocusedTrack(); }
if(!t)
void CellularPanel::DoContextMenu( TrackPanelCell *pCell )
{
if( !pCell ) {
pCell = GetFocusedCell();
if( !pCell )
return; return;
} }
const auto pCell = t->GetTrackControl(); const auto delegate = pCell->ContextMenuDelegate();
const wxRect rect(FindTrackRect(t, true)); if (!delegate)
return;
auto rect = FindRect( *delegate );
const UIHandle::Result refreshResult = const UIHandle::Result refreshResult =
pCell->DoContextMenu(rect, this, NULL); delegate->DoContextMenu(rect, this, NULL);
ProcessUIHandleResult(t, t, refreshResult);
// To do: use safer shared_ptr to pCell
ProcessUIHandleResult(pCell, pCell, refreshResult);
} }
Track * TrackPanel::GetFirstSelectedTrack() Track * TrackPanel::GetFirstSelectedTrack()

View File

@@ -305,6 +305,7 @@ protected:
mTarget = 0; mTarget = 0;
mMouseOverUpdateFlags = 0; mMouseOverUpdateFlags = 0;
} }
void DoContextMenu( TrackPanelCell *pCell = nullptr );
private: private:
bool HasRotation(); bool HasRotation();
@@ -320,6 +321,8 @@ private:
void OnSetFocus(wxFocusEvent & event); void OnSetFocus(wxFocusEvent & event);
void OnKillFocus(wxFocusEvent & event); void OnKillFocus(wxFocusEvent & event);
void OnContextMenu(wxContextMenuEvent & event);
void HandleInterruptedDrag(); void HandleInterruptedDrag();
void Uncapture( wxMouseState *pState = nullptr ); void Uncapture( wxMouseState *pState = nullptr );
bool HandleEscapeKey(bool down); bool HandleEscapeKey(bool down);
@@ -383,8 +386,6 @@ class AUDACITY_DLL_API TrackPanel final : public CellularPanel {
void OnMouseEvent(wxMouseEvent & event); void OnMouseEvent(wxMouseEvent & event);
void OnKeyDown(wxKeyEvent & event); void OnKeyDown(wxKeyEvent & event);
void OnContextMenu(wxContextMenuEvent & event);
void OnPlayback(wxCommandEvent &); void OnPlayback(wxCommandEvent &);
void OnTrackListResizing(wxCommandEvent & event); void OnTrackListResizing(wxCommandEvent & event);
void OnTrackListDeletion(wxCommandEvent & event); void OnTrackListDeletion(wxCommandEvent & event);

View File

@@ -56,6 +56,10 @@ public:
(const TrackPanelMouseEvent &event, (const TrackPanelMouseEvent &event,
AudacityProject *pProject); AudacityProject *pProject);
// A cell may delegate context menu handling to another one
virtual std::shared_ptr<TrackPanelCell> ContextMenuDelegate()
{ return {}; }
// The pPosition parameter indicates mouse position but may be NULL // The pPosition parameter indicates mouse position but may be NULL
// Return value is a bitwise OR of RefreshCode values // Return value is a bitwise OR of RefreshCode values
// Default implementation does nothing // Default implementation does nothing