diff --git a/src/CellularPanel.cpp b/src/CellularPanel.cpp index b99481ef6..f6d1c2f1e 100644 --- a/src/CellularPanel.cpp +++ b/src/CellularPanel.cpp @@ -539,7 +539,7 @@ void CellularPanel::OnCaptureKey(wxCommandEvent & event) const auto t = GetFocusedCell(); if (t) { const unsigned refreshResult = - t->CaptureKey(*kevent, *mViewInfo, this); + t->CaptureKey(*kevent, *mViewInfo, this, GetProject()); ProcessUIHandleResult(t, t, refreshResult); event.Skip(kevent->GetSkipped()); } @@ -597,7 +597,7 @@ void CellularPanel::OnKeyDown(wxKeyEvent & event) if (t) { const unsigned refreshResult = - t->KeyDown(event, *mViewInfo, this); + t->KeyDown(event, *mViewInfo, this, GetProject()); ProcessUIHandleResult(t, t, refreshResult); } else @@ -620,7 +620,7 @@ void CellularPanel::OnChar(wxKeyEvent & event) const auto t = GetFocusedCell(); if (t) { const unsigned refreshResult = - t->Char(event, *mViewInfo, this); + t->Char(event, *mViewInfo, this, GetProject()); ProcessUIHandleResult(t, t, refreshResult); } else @@ -652,7 +652,7 @@ void CellularPanel::OnKeyUp(wxKeyEvent & event) const auto t = GetFocusedCell(); if (t) { const unsigned refreshResult = - t->KeyUp(event, *mViewInfo, this); + t->KeyUp(event, *mViewInfo, this, GetProject()); ProcessUIHandleResult(t, t, refreshResult); return; } diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 3e5511a12..4d1cc315f 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1476,25 +1476,29 @@ unsigned TrackPanelCell::DoContextMenu return RefreshCode::RefreshNone; } -unsigned TrackPanelCell::CaptureKey(wxKeyEvent &event, ViewInfo &, wxWindow *) +unsigned TrackPanelCell::CaptureKey( + wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *) { event.Skip(); return RefreshCode::RefreshNone; } -unsigned TrackPanelCell::KeyDown(wxKeyEvent &event, ViewInfo &, wxWindow *) +unsigned TrackPanelCell::KeyDown( + wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *) { event.Skip(); return RefreshCode::RefreshNone; } -unsigned TrackPanelCell::KeyUp(wxKeyEvent &event, ViewInfo &, wxWindow *) +unsigned TrackPanelCell::KeyUp( + wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *) { event.Skip(); return RefreshCode::RefreshNone; } -unsigned TrackPanelCell::Char(wxKeyEvent &event, ViewInfo &, wxWindow *) +unsigned TrackPanelCell::Char( + wxKeyEvent &event, ViewInfo &, wxWindow *, AudacityProject *) { event.Skip(); return RefreshCode::RefreshNone; diff --git a/src/TrackPanelCell.h b/src/TrackPanelCell.h index ff22e887b..826e846de 100644 --- a/src/TrackPanelCell.h +++ b/src/TrackPanelCell.h @@ -110,22 +110,26 @@ public: // Return value is a bitwise OR of RefreshCode values // Default skips the event and does nothing 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 // Default skips the event and does nothing 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 // Default skips the event and does nothing 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 // Default skips the event and does nothing virtual unsigned Char - (wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent); + (wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *pParent, + AudacityProject *project); }; #endif diff --git a/src/tracks/labeltrack/ui/LabelTrackView.cpp b/src/tracks/labeltrack/ui/LabelTrackView.cpp index 66a8bec5a..6117f92ad 100644 --- a/src/tracks/labeltrack/ui/LabelTrackView.cpp +++ b/src/tracks/labeltrack/ui/LabelTrackView.cpp @@ -1208,7 +1208,8 @@ static bool IsGoodLabelEditKey(const wxKeyEvent & evt) } // 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 int mods = event.GetModifiers(); @@ -1233,7 +1234,6 @@ bool LabelTrackView::DoCaptureKey(wxKeyEvent & event) bool typeToCreateLabel; gPrefs->Read(wxT("/GUI/TypeToCreateLabel"), &typeToCreateLabel, false); if (IsGoodLabelFirstKey(event) && typeToCreateLabel) { - AudacityProject * pProj = GetActiveProject(); // The commented out code can prevent label creation, causing bug 1551 @@ -1257,7 +1257,7 @@ bool LabelTrackView::DoCaptureKey(wxKeyEvent & event) #endif // 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(), selectedRegion.t1()) != wxNOT_FOUND ) { return false; @@ -1270,24 +1270,24 @@ bool LabelTrackView::DoCaptureKey(wxKeyEvent & event) 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; } unsigned LabelTrackView::KeyDown( - wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *WXUNUSED(pParent)) + wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *WXUNUSED(pParent), + AudacityProject *project) { double bkpSel0 = viewInfo.selectedRegion.t0(), bkpSel1 = viewInfo.selectedRegion.t1(); - AudacityProject *const pProj = GetActiveProject(); - // Pass keystroke to labeltrack's handler and add to history if any // updates were done - if (DoKeyDown(viewInfo.selectedRegion, event)) { - ProjectHistory::Get( *pProj ).PushState(_("Modified Label"), + if (DoKeyDown( *project, viewInfo.selectedRegion, event )) { + ProjectHistory::Get( *project ).PushState(_("Modified Label"), _("Label Edit"), UndoPush::CONSOLIDATE); } @@ -1295,7 +1295,7 @@ unsigned LabelTrackView::KeyDown( // Make sure caret is in view int x; if (CalcCursorX(&x)) - TrackPanel::Get( *pProj ).ScrollIntoView(x); + TrackPanel::Get( *project ).ScrollIntoView(x); // If selection modified, refresh // Otherwise, refresh track display if the keystroke was handled @@ -1309,17 +1309,15 @@ unsigned LabelTrackView::KeyDown( } unsigned LabelTrackView::Char( - wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *) + wxKeyEvent & event, ViewInfo &viewInfo, wxWindow *, AudacityProject *project) { double bkpSel0 = viewInfo.selectedRegion.t0(), bkpSel1 = viewInfo.selectedRegion.t1(); // Pass keystroke to labeltrack's handler and add to history if any // updates were done - AudacityProject *const pProj = GetActiveProject(); - - if (DoChar(viewInfo.selectedRegion, event)) - ProjectHistory::Get( *pProj ).PushState(_("Modified Label"), + if (DoChar( *project, viewInfo.selectedRegion, event )) + ProjectHistory::Get( *project ).PushState(_("Modified Label"), _("Label Edit"), UndoPush::CONSOLIDATE); @@ -1335,7 +1333,8 @@ unsigned LabelTrackView::Char( } /// 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 bool updated = false; @@ -1467,10 +1466,10 @@ bool LabelTrackView::DoKeyDown(SelectedRegion &newSel, wxKeyEvent & event) case WXK_ESCAPE: if (mRestoreFocus >= 0) { - auto track = *TrackList::Get( *GetActiveProject() ).Any() + auto track = *TrackList::Get( project ).Any() .begin().advance(mRestoreFocus); if (track) - TrackPanel::Get( *GetActiveProject() ).SetFocusedTrack(track); + TrackPanel::Get( project ).SetFocusedTrack(track); mRestoreFocus = -2; } 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 /// 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. // @@ -1595,25 +1595,24 @@ bool LabelTrackView::DoChar(SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event return false; } bool useDialog; - AudacityProject *p = GetActiveProject(); gPrefs->Read(wxT("/GUI/DialogForNameNewLabel"), &useDialog, false); - auto &selectedRegion = ViewInfo::Get( *p ).selectedRegion; + auto &selectedRegion = ViewInfo::Get( project ).selectedRegion; if (useDialog) { wxString title; if (DialogForLabelName( - *p, selectedRegion, charCode, title) == + project, selectedRegion, charCode, title) == wxID_CANCEL) { return false; } pTrack->SetSelected(true); pTrack->AddLabel(selectedRegion, title); - ProjectHistory::Get( *p ).PushState(_("Added label"), _("Label")); + ProjectHistory::Get( project ).PushState(_("Added label"), _("Label")); return false; } else { pTrack->SetSelected(true); AddLabel( selectedRegion ); - ProjectHistory::Get( *p ).PushState(_("Added label"), _("Label")); + ProjectHistory::Get( project ).PushState(_("Added label"), _("Label")); } } diff --git a/src/tracks/labeltrack/ui/LabelTrackView.h b/src/tracks/labeltrack/ui/LabelTrackView.h index 658d49e2a..b394d03b7 100644 --- a/src/tracks/labeltrack/ui/LabelTrackView.h +++ b/src/tracks/labeltrack/ui/LabelTrackView.h @@ -52,9 +52,11 @@ public: static LabelTrackView &Get( LabelTrack& ); static const LabelTrackView &Get( const LabelTrack& ); - bool DoCaptureKey(wxKeyEvent &event); - bool DoKeyDown(SelectedRegion &sel, wxKeyEvent & event); - bool DoChar(SelectedRegion &sel, wxKeyEvent & event); + bool DoCaptureKey(const AudacityProject &project, wxKeyEvent &event); + bool DoKeyDown( + AudacityProject &project, SelectedRegion &sel, wxKeyEvent & event); + bool DoChar( + AudacityProject &project, SelectedRegion &sel, wxKeyEvent & event); //This returns the index of the label we just added. int AddLabel(const SelectedRegion ®ion, @@ -71,13 +73,16 @@ private: override; unsigned CaptureKey - (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent) override; + (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, + AudacityProject *project) override; unsigned KeyDown - (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent) override; + (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, + AudacityProject *project) override; unsigned Char - (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent) override; + (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, + AudacityProject *project) override; std::shared_ptr DoGetVRulerControls() override;