Context menu handling is also in CellularPanel
This commit is contained in:
parent
c08c17eafa
commit
7f84e71324
|
@ -165,6 +165,10 @@ class AUDACITY_DLL_API Track /* not final */
|
|||
(const TrackPanelMouseState &, const AudacityProject *pProject)
|
||||
final override;
|
||||
|
||||
// Delegates the handling to the related TCP cell
|
||||
std::shared_ptr<TrackPanelCell> ContextMenuDelegate() override
|
||||
{ return GetTrackControl(); }
|
||||
|
||||
public:
|
||||
|
||||
// Rather override this for subclasses:
|
||||
|
|
|
@ -263,6 +263,7 @@ BEGIN_EVENT_TABLE(CellularPanel, OverlayPanel)
|
|||
EVT_CHAR(CellularPanel::OnChar)
|
||||
EVT_SET_FOCUS(CellularPanel::OnSetFocus)
|
||||
EVT_KILL_FOCUS(CellularPanel::OnKillFocus)
|
||||
EVT_CONTEXT_MENU(CellularPanel::OnContextMenu)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
BEGIN_EVENT_TABLE(TrackPanel, CellularPanel)
|
||||
|
@ -270,7 +271,6 @@ BEGIN_EVENT_TABLE(TrackPanel, CellularPanel)
|
|||
EVT_KEY_DOWN(TrackPanel::OnKeyDown)
|
||||
|
||||
EVT_PAINT(TrackPanel::OnPaint)
|
||||
EVT_CONTEXT_MENU(TrackPanel::OnContextMenu)
|
||||
|
||||
EVT_TIMER(wxID_ANY, TrackPanel::OnTimer)
|
||||
END_EVENT_TABLE()
|
||||
|
@ -1167,9 +1167,9 @@ void TrackPanel::OnTrackListDeletion(wxCommandEvent & e)
|
|||
e.Skip();
|
||||
}
|
||||
|
||||
void TrackPanel::OnContextMenu(wxContextMenuEvent & WXUNUSED(event))
|
||||
void CellularPanel::OnContextMenu(wxContextMenuEvent & WXUNUSED(event))
|
||||
{
|
||||
OnTrackMenu();
|
||||
DoContextMenu();
|
||||
}
|
||||
|
||||
struct TrackInfo::TCPLine {
|
||||
|
@ -2625,17 +2625,27 @@ void TrackPanel::ScrollIntoView(int x)
|
|||
|
||||
void TrackPanel::OnTrackMenu(Track *t)
|
||||
{
|
||||
if(!t) {
|
||||
t = GetFocusedTrack();
|
||||
if(!t)
|
||||
CellularPanel::DoContextMenu( t );
|
||||
}
|
||||
|
||||
void CellularPanel::DoContextMenu( TrackPanelCell *pCell )
|
||||
{
|
||||
if( !pCell ) {
|
||||
pCell = GetFocusedCell();
|
||||
if( !pCell )
|
||||
return;
|
||||
}
|
||||
|
||||
const auto pCell = t->GetTrackControl();
|
||||
const wxRect rect(FindTrackRect(t, true));
|
||||
const auto delegate = pCell->ContextMenuDelegate();
|
||||
if (!delegate)
|
||||
return;
|
||||
|
||||
auto rect = FindRect( *delegate );
|
||||
const UIHandle::Result refreshResult =
|
||||
pCell->DoContextMenu(rect, this, NULL);
|
||||
ProcessUIHandleResult(t, t, refreshResult);
|
||||
delegate->DoContextMenu(rect, this, NULL);
|
||||
|
||||
// To do: use safer shared_ptr to pCell
|
||||
ProcessUIHandleResult(pCell, pCell, refreshResult);
|
||||
}
|
||||
|
||||
Track * TrackPanel::GetFirstSelectedTrack()
|
||||
|
|
|
@ -305,6 +305,7 @@ protected:
|
|||
mTarget = 0;
|
||||
mMouseOverUpdateFlags = 0;
|
||||
}
|
||||
void DoContextMenu( TrackPanelCell *pCell = nullptr );
|
||||
|
||||
private:
|
||||
bool HasRotation();
|
||||
|
@ -320,6 +321,8 @@ private:
|
|||
void OnSetFocus(wxFocusEvent & event);
|
||||
void OnKillFocus(wxFocusEvent & event);
|
||||
|
||||
void OnContextMenu(wxContextMenuEvent & event);
|
||||
|
||||
void HandleInterruptedDrag();
|
||||
void Uncapture( wxMouseState *pState = nullptr );
|
||||
bool HandleEscapeKey(bool down);
|
||||
|
@ -383,8 +386,6 @@ class AUDACITY_DLL_API TrackPanel final : public CellularPanel {
|
|||
void OnMouseEvent(wxMouseEvent & event);
|
||||
void OnKeyDown(wxKeyEvent & event);
|
||||
|
||||
void OnContextMenu(wxContextMenuEvent & event);
|
||||
|
||||
void OnPlayback(wxCommandEvent &);
|
||||
void OnTrackListResizing(wxCommandEvent & event);
|
||||
void OnTrackListDeletion(wxCommandEvent & event);
|
||||
|
|
|
@ -56,6 +56,10 @@ public:
|
|||
(const TrackPanelMouseEvent &event,
|
||||
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
|
||||
// Return value is a bitwise OR of RefreshCode values
|
||||
// Default implementation does nothing
|
||||
|
|
Loading…
Reference in New Issue
Block a user