1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-23 15:50:05 +02: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();
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;
}

View File

@ -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;

View File

@ -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

View File

@ -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"));
}
}

View File

@ -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 &region,
@ -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<TrackVRulerControls> DoGetVRulerControls() override;