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:
@@ -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:
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user