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

Pass AudacityProject as context into TrackPanelCell key handlers...

... as was done for mouse events.

This eliminates some need for GetActiveProject(), which is good, and prepares
for the fix for bug 2141
This commit is contained in:
Paul Licameli
2019-06-28 13:05:22 -04:00
parent c50acea328
commit 30715e4fe2
5 changed files with 55 additions and 43 deletions

View File

@@ -539,7 +539,7 @@ void CellularPanel::OnCaptureKey(wxCommandEvent & event)
const auto t = GetFocusedCell(); const auto t = GetFocusedCell();
if (t) { if (t) {
const unsigned refreshResult = const unsigned refreshResult =
t->CaptureKey(*kevent, *mViewInfo, this); t->CaptureKey(*kevent, *mViewInfo, this, GetProject());
ProcessUIHandleResult(t, t, refreshResult); ProcessUIHandleResult(t, t, refreshResult);
event.Skip(kevent->GetSkipped()); event.Skip(kevent->GetSkipped());
} }
@@ -597,7 +597,7 @@ void CellularPanel::OnKeyDown(wxKeyEvent & event)
if (t) { if (t) {
const unsigned refreshResult = const unsigned refreshResult =
t->KeyDown(event, *mViewInfo, this); t->KeyDown(event, *mViewInfo, this, GetProject());
ProcessUIHandleResult(t, t, refreshResult); ProcessUIHandleResult(t, t, refreshResult);
} }
else else
@@ -620,7 +620,7 @@ void CellularPanel::OnChar(wxKeyEvent & event)
const auto t = GetFocusedCell(); const auto t = GetFocusedCell();
if (t) { if (t) {
const unsigned refreshResult = const unsigned refreshResult =
t->Char(event, *mViewInfo, this); t->Char(event, *mViewInfo, this, GetProject());
ProcessUIHandleResult(t, t, refreshResult); ProcessUIHandleResult(t, t, refreshResult);
} }
else else
@@ -652,7 +652,7 @@ void CellularPanel::OnKeyUp(wxKeyEvent & event)
const auto t = GetFocusedCell(); const auto t = GetFocusedCell();
if (t) { if (t) {
const unsigned refreshResult = const unsigned refreshResult =
t->KeyUp(event, *mViewInfo, this); t->KeyUp(event, *mViewInfo, this, GetProject());
ProcessUIHandleResult(t, t, refreshResult); ProcessUIHandleResult(t, t, refreshResult);
return; return;
} }

View File

@@ -1476,25 +1476,29 @@ unsigned TrackPanelCell::DoContextMenu
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;
} }
unsigned TrackPanelCell::CaptureKey(wxKeyEvent &event, ViewInfo &, wxWindow *) unsigned TrackPanelCell::CaptureKey(
wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *)
{ {
event.Skip(); event.Skip();
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;
} }
unsigned TrackPanelCell::KeyDown(wxKeyEvent &event, ViewInfo &, wxWindow *) unsigned TrackPanelCell::KeyDown(
wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *)
{ {
event.Skip(); event.Skip();
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;
} }
unsigned TrackPanelCell::KeyUp(wxKeyEvent &event, ViewInfo &, wxWindow *) unsigned TrackPanelCell::KeyUp(
wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *)
{ {
event.Skip(); event.Skip();
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;
} }
unsigned TrackPanelCell::Char(wxKeyEvent &event, ViewInfo &, wxWindow *) unsigned TrackPanelCell::Char(
wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *)
{ {
event.Skip(); event.Skip();
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;

View File

@@ -110,22 +110,26 @@ public:
// Return value is a bitwise OR of RefreshCode values // Return value is a bitwise OR of RefreshCode values
// Default skips the event and does nothing // Default skips the event and does nothing
virtual unsigned CaptureKey virtual unsigned CaptureKey
(wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent); (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project);
// Return value is a bitwise OR of RefreshCode values // Return value is a bitwise OR of RefreshCode values
// Default skips the event and does nothing // Default skips the event and does nothing
virtual unsigned KeyDown virtual unsigned KeyDown
(wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent); (wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project);
// Return value is a bitwise OR of RefreshCode values // Return value is a bitwise OR of RefreshCode values
// Default skips the event and does nothing // Default skips the event and does nothing
virtual unsigned KeyUp virtual unsigned KeyUp
(wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent); (wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project);
// Return value is a bitwise OR of RefreshCode values // Return value is a bitwise OR of RefreshCode values
// Default skips the event and does nothing // Default skips the event and does nothing
virtual unsigned Char virtual unsigned Char
(wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent); (wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project);
}; };
#endif #endif

View File

@@ -1208,7 +1208,8 @@ static bool IsGoodLabelEditKey(const wxKeyEvent & evt)
} }
// Check for keys that we will process // Check for keys that we will process
bool LabelTrackView::DoCaptureKey(wxKeyEvent & event) bool LabelTrackView::DoCaptureKey(
const AudacityProject &project, wxKeyEvent & event )
{ {
// Check for modifiers and only allow shift // Check for modifiers and only allow shift
int mods = event.GetModifiers(); int mods = event.GetModifiers();
@@ -1233,7 +1234,6 @@ bool LabelTrackView::DoCaptureKey(wxKeyEvent & event)
bool typeToCreateLabel; bool typeToCreateLabel;
gPrefs->Read(wxT("/GUI/TypeToCreateLabel"), &typeToCreateLabel, false); gPrefs->Read(wxT("/GUI/TypeToCreateLabel"), &typeToCreateLabel, false);
if (IsGoodLabelFirstKey(event) && typeToCreateLabel) { if (IsGoodLabelFirstKey(event) && typeToCreateLabel) {
AudacityProject * pProj = GetActiveProject();
// The commented out code can prevent label creation, causing bug 1551 // The commented out code can prevent label creation, causing bug 1551
@@ -1257,7 +1257,7 @@ bool LabelTrackView::DoCaptureKey(wxKeyEvent & event)
#endif #endif
// If there's a label there already don't capture // If there's a label there already don't capture
auto &selectedRegion = ViewInfo::Get( *pProj ).selectedRegion; auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
if( GetLabelIndex(selectedRegion.t0(), if( GetLabelIndex(selectedRegion.t0(),
selectedRegion.t1()) != wxNOT_FOUND ) { selectedRegion.t1()) != wxNOT_FOUND ) {
return false; return false;
@@ -1270,24 +1270,24 @@ bool LabelTrackView::DoCaptureKey(wxKeyEvent & event)
return false; return false;
} }
unsigned LabelTrackView::CaptureKey(wxKeyEvent & event, ViewInfo &, wxWindow *) unsigned LabelTrackView::CaptureKey(
wxKeyEvent & event, ViewInfo &, wxWindow *, AudacityProject *project )
{ {
event.Skip(!DoCaptureKey(event)); event.Skip(!DoCaptureKey( *project, event ));
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;
} }
unsigned LabelTrackView::KeyDown( unsigned LabelTrackView::KeyDown(
wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *WXUNUSED(pParent)) wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *WXUNUSED(pParent),
AudacityProject *project)
{ {
double bkpSel0 = viewInfo.selectedRegion.t0(), double bkpSel0 = viewInfo.selectedRegion.t0(),
bkpSel1 = viewInfo.selectedRegion.t1(); bkpSel1 = viewInfo.selectedRegion.t1();
AudacityProject *const pProj = GetActiveProject();
// Pass keystroke to labeltrack's handler and add to history if any // Pass keystroke to labeltrack's handler and add to history if any
// updates were done // updates were done
if (DoKeyDown(viewInfo.selectedRegion, event)) { if (DoKeyDown( *project, viewInfo.selectedRegion, event )) {
ProjectHistory::Get( *pProj ).PushState(_("Modified Label"), ProjectHistory::Get( *project ).PushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
UndoPush::CONSOLIDATE); UndoPush::CONSOLIDATE);
} }
@@ -1295,7 +1295,7 @@ unsigned LabelTrackView::KeyDown(
// Make sure caret is in view // Make sure caret is in view
int x; int x;
if (CalcCursorX(&x)) if (CalcCursorX(&x))
TrackPanel::Get( *pProj ).ScrollIntoView(x); TrackPanel::Get( *project ).ScrollIntoView(x);
// If selection modified, refresh // If selection modified, refresh
// Otherwise, refresh track display if the keystroke was handled // Otherwise, refresh track display if the keystroke was handled
@@ -1309,17 +1309,15 @@ unsigned LabelTrackView::KeyDown(
} }
unsigned LabelTrackView::Char( unsigned LabelTrackView::Char(
wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *) wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *, AudacityProject *project)
{ {
double bkpSel0 = viewInfo.selectedRegion.t0(), double bkpSel0 = viewInfo.selectedRegion.t0(),
bkpSel1 = viewInfo.selectedRegion.t1(); bkpSel1 = viewInfo.selectedRegion.t1();
// Pass keystroke to labeltrack's handler and add to history if any // Pass keystroke to labeltrack's handler and add to history if any
// updates were done // updates were done
AudacityProject *const pProj = GetActiveProject(); if (DoChar( *project, viewInfo.selectedRegion, event ))
ProjectHistory::Get( *project ).PushState(_("Modified Label"),
if (DoChar(viewInfo.selectedRegion, event))
ProjectHistory::Get( *pProj ).PushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
UndoPush::CONSOLIDATE); UndoPush::CONSOLIDATE);
@@ -1335,7 +1333,8 @@ unsigned LabelTrackView::Char(
} }
/// KeyEvent is called for every keypress when over the label track. /// KeyEvent is called for every keypress when over the label track.
bool LabelTrackView::DoKeyDown(SelectedRegion &newSel, wxKeyEvent & event) bool LabelTrackView::DoKeyDown(
AudacityProject &project, SelectedRegion &newSel, wxKeyEvent & event)
{ {
// Only track true changes to the label // Only track true changes to the label
bool updated = false; bool updated = false;
@@ -1467,10 +1466,10 @@ bool LabelTrackView::DoKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
case WXK_ESCAPE: case WXK_ESCAPE:
if (mRestoreFocus >= 0) { if (mRestoreFocus >= 0) {
auto track = *TrackList::Get( *GetActiveProject() ).Any() auto track = *TrackList::Get( project ).Any()
.begin().advance(mRestoreFocus); .begin().advance(mRestoreFocus);
if (track) if (track)
TrackPanel::Get( *GetActiveProject() ).SetFocusedTrack(track); TrackPanel::Get( project ).SetFocusedTrack(track);
mRestoreFocus = -2; mRestoreFocus = -2;
} }
mSelIndex = -1; mSelIndex = -1;
@@ -1562,7 +1561,8 @@ bool LabelTrackView::DoKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
/// OnChar is called for incoming characters -- that's any keypress not handled /// OnChar is called for incoming characters -- that's any keypress not handled
/// by OnKeyDown. /// by OnKeyDown.
bool LabelTrackView::DoChar(SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event) bool LabelTrackView::DoChar(
AudacityProject &project, SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event)
{ {
// Check for modifiers and only allow shift. // Check for modifiers and only allow shift.
// //
@@ -1595,25 +1595,24 @@ bool LabelTrackView::DoChar(SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event
return false; return false;
} }
bool useDialog; bool useDialog;
AudacityProject *p = GetActiveProject();
gPrefs->Read(wxT("/GUI/DialogForNameNewLabel"), &useDialog, false); gPrefs->Read(wxT("/GUI/DialogForNameNewLabel"), &useDialog, false);
auto &selectedRegion = ViewInfo::Get( *p ).selectedRegion; auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
if (useDialog) { if (useDialog) {
wxString title; wxString title;
if (DialogForLabelName( if (DialogForLabelName(
*p, selectedRegion, charCode, title) == project, selectedRegion, charCode, title) ==
wxID_CANCEL) { wxID_CANCEL) {
return false; return false;
} }
pTrack->SetSelected(true); pTrack->SetSelected(true);
pTrack->AddLabel(selectedRegion, title); pTrack->AddLabel(selectedRegion, title);
ProjectHistory::Get( *p ).PushState(_("Added label"), _("Label")); ProjectHistory::Get( project ).PushState(_("Added label"), _("Label"));
return false; return false;
} }
else { else {
pTrack->SetSelected(true); pTrack->SetSelected(true);
AddLabel( selectedRegion ); AddLabel( selectedRegion );
ProjectHistory::Get( *p ).PushState(_("Added label"), _("Label")); ProjectHistory::Get( project ).PushState(_("Added label"), _("Label"));
} }
} }

View File

@@ -52,9 +52,11 @@ public:
static LabelTrackView &Get( LabelTrack& ); static LabelTrackView &Get( LabelTrack& );
static const LabelTrackView &Get( const LabelTrack& ); static const LabelTrackView &Get( const LabelTrack& );
bool DoCaptureKey(wxKeyEvent &event); bool DoCaptureKey(const AudacityProject &project, wxKeyEvent &event);
bool DoKeyDown(SelectedRegion &sel, wxKeyEvent & event); bool DoKeyDown(
bool DoChar(SelectedRegion &sel, wxKeyEvent & event); AudacityProject &project, SelectedRegion &sel, wxKeyEvent & event);
bool DoChar(
AudacityProject &project, SelectedRegion &sel, wxKeyEvent & event);
//This returns the index of the label we just added. //This returns the index of the label we just added.
int AddLabel(const SelectedRegion &region, int AddLabel(const SelectedRegion &region,
@@ -71,13 +73,16 @@ private:
override; override;
unsigned CaptureKey unsigned CaptureKey
(wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent) override; (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project) override;
unsigned KeyDown unsigned KeyDown
(wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent) override; (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project) override;
unsigned Char unsigned Char
(wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent) override; (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent,
AudacityProject *project) override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override; std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;