From fce85d0e5657452945d63a25433743d1960968bb Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 21 May 2019 11:43:20 -0400 Subject: [PATCH] Don't use GetActiveProject in track panel pop-up menu handlers --- .../notetrack/ui/NoteTrackControls.cpp | 2 +- .../notetrack/ui/NoteTrackVZoomHandle.cpp | 6 ++-- .../wavetrack/ui/SpectrumVZoomHandle.cpp | 4 +-- .../wavetrack/ui/WaveTrackControls.cpp | 30 +++++++++---------- .../wavetrack/ui/WaveTrackVZoomHandle.cpp | 3 +- .../wavetrack/ui/WaveTrackVZoomHandle.h | 1 + .../wavetrack/ui/WaveformVZoomHandle.cpp | 5 ++-- src/tracks/timetrack/ui/TimeTrackControls.cpp | 8 ++--- src/tracks/ui/CommonTrackControls.cpp | 23 +++++++------- src/tracks/ui/CommonTrackControls.h | 1 + 10 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp index f5c211997..86dd2d565 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp @@ -120,7 +120,7 @@ void NoteTrackMenuTable::OnChangeOctave(wxCommandEvent &event) const bool bDown = (OnDownOctaveID == event.GetId()); pTrack->ShiftNoteRange((bDown) ? -12 : 12); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; ProjectHistory::Get( *project ) .ModifyState(false); mpData->result = RefreshCode::RefreshAll; diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp index c94b1ade6..321094907 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp @@ -35,6 +35,7 @@ namespace struct InitMenuData { public: + AudacityProject &project; NoteTrack *pTrack; wxRect rect; unsigned result; @@ -244,7 +245,8 @@ void NoteTrackVRulerMenuTable::OnZoom( int iZoomCode ){ mpData->pTrack->ShiftNoteRange(-12); break; } - ProjectHistory::Get( *GetActiveProject() ).ModifyState(false); + AudacityProject *const project = &mpData->project; + ProjectHistory::Get( *project ).ModifyState(false); using namespace RefreshCode; mpData->result = UpdateVRuler | RefreshAll; } @@ -290,7 +292,7 @@ UIHandle::Result NoteTrackVZoomHandle::Release !(event.ShiftDown() || event.CmdDown())) { InitMenuData data { - pTrack.get(), mRect, RefreshCode::RefreshNone, event.m_y + *pProject, pTrack.get(), mRect, RefreshNone, event.m_y }; PopupMenuTable *const pTable = diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp index 9b2059eb4..113b5d740 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp @@ -292,8 +292,6 @@ POPUP_MENU_SEPARATOR() POPUP_MENU_ITEM(OnZoomOutVerticalID, XO("Zoom Out\tShift-Left-Click"), OnZoomOutVertical) END_POPUP_MENU() -#include "../../../../Project.h" // for GetActiveProject - void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt) { WaveTrack *const wt = mpData->pTrack; @@ -308,7 +306,7 @@ void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt) for (auto channel : TrackList::Channels(wt)) channel->GetIndependentSpectrogramSettings().scaleType = newScaleType; - ProjectHistory::Get( *::GetActiveProject() ).ModifyState(true); + ProjectHistory::Get( mpData->project ).ModifyState(true); using namespace RefreshCode; mpData->result = UpdateVRuler | RefreshAll; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 4539cac84..88a4cda04 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -186,7 +186,7 @@ void WaveColorMenuTable::InitMenu(Menu *pMenu) auto WaveColorId = IdOfWaveColor( pTrack->GetWaveColorIndex()); SetMenuChecks(*pMenu, [=](int id){ return id == WaveColorId; }); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive(); for (int i = OnInstrument1ID; i <= OnInstrument4ID; i++) { pMenu->Enable(i, !unsafe); @@ -224,7 +224,7 @@ void WaveColorMenuTable::OnWaveColorChange(wxCommandEvent & event) int newWaveColor = id - OnInstrument1ID; - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; for (auto channel : TrackList::Channels(pTrack)) channel->SetWaveColorIndex(newWaveColor); @@ -284,7 +284,7 @@ void FormatMenuTable::InitMenu(Menu *pMenu) auto formatId = IdOfFormat(pTrack->GetSampleFormat()); SetMenuChecks(*pMenu, [=](int id){ return id == formatId; }); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive(); for (int i = On16BitID; i <= OnFloatID; i++) { pMenu->Enable(i, !unsafe); @@ -346,7 +346,7 @@ void FormatMenuTable::OnFormatChange(wxCommandEvent & event) if (newFormat == pTrack->GetSampleFormat()) return; // Nothing to do. - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; for (auto channel : TrackList::Channels(pTrack)) channel->ConvertToSampleFormat(newFormat); @@ -407,7 +407,7 @@ void RateMenuTable::InitMenu(Menu *pMenu) const auto rateId = IdOfRate((int)pTrack->GetRate()); SetMenuChecks(*pMenu, [=](int id){ return id == rateId; }); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive(); for (int i = OnRate8ID; i <= OnRateOtherID; i++) { pMenu->Enable(i, !unsafe); @@ -454,7 +454,7 @@ int RateMenuTable::IdOfRate(int rate) /// another track, that one as well. void RateMenuTable::SetRate(WaveTrack * pTrack, double rate) { - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; for (auto channel : TrackList::Channels(pTrack)) channel->SetRate(rate); @@ -645,7 +645,7 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu) .contains( WaveTrackViewConstants::Spectrum ); pMenu->Enable(OnSpectrogramSettingsID, hasSpectrum && !bAudioBusy); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; auto &tracks = TrackList::Get( *project ); bool unsafe = RealtimeEffectManager::Get().RealtimeIsActive() && ProjectAudioIO::Get( *project ).IsAudioActive(); @@ -814,7 +814,7 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event) .SetDisplay(WaveTrackView::WaveTrackDisplay(id)); } - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; ProjectHistory::Get( *project ).ModifyState(true); using namespace RefreshCode; @@ -873,7 +873,7 @@ void WaveTrackMenuTable::OnSpectrogramSettings(wxCommandEvent &) if (0 != dialog.ShowModal()) { // Redraw - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; ProjectHistory::Get( *project ).ModifyState(true); //Bug 1725 Toolbar was left greyed out. //This solution is overkill, but does fix the problem and is what the @@ -908,7 +908,7 @@ void WaveTrackMenuTable::OnChannelChange(wxCommandEvent & event) break; } pTrack->SetChannel(channel); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; /* i18n-hint: The strings name a track and a channel choice (mono, left, or right) */ ProjectHistory::Get( *project ) .PushState( @@ -921,7 +921,7 @@ void WaveTrackMenuTable::OnChannelChange(wxCommandEvent & event) /// Merge two tracks into one stereo track ?? void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &) { - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; auto &tracks = TrackList::Get( *project ); WaveTrack *const pTrack = static_cast(mpData->pTrack); @@ -983,7 +983,7 @@ void WaveTrackMenuTable::SplitStereo(bool stereo) { WaveTrack *const pTrack = static_cast(mpData->pTrack); wxASSERT(pTrack); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; auto channels = TrackList::Channels( pTrack ); int totalHeight = 0; @@ -1017,7 +1017,7 @@ void WaveTrackMenuTable::SplitStereo(bool stereo) /// Swap the left and right channels of a stero track... void WaveTrackMenuTable::OnSwapChannels(wxCommandEvent &) { - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; WaveTrack *const pTrack = static_cast(mpData->pTrack); auto channels = TrackList::Channels( pTrack ); @@ -1052,7 +1052,7 @@ void WaveTrackMenuTable::OnSplitStereo(wxCommandEvent &) { SplitStereo(true); WaveTrack *const pTrack = static_cast(mpData->pTrack); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; /* i18n-hint: The string names a track */ ProjectHistory::Get( *project ).PushState( XO("Split stereo track '%s'").Format( pTrack->GetName() ), @@ -1067,7 +1067,7 @@ void WaveTrackMenuTable::OnSplitStereoMono(wxCommandEvent &) { SplitStereo(false); WaveTrack *const pTrack = static_cast(mpData->pTrack); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; /* i18n-hint: The string names a track */ ProjectHistory::Get( *project ).PushState( XO("Split Stereo to Mono '%s'").Format( pTrack->GetName() ), diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp index dba89f5b5..4d3ec4f61 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp @@ -44,7 +44,7 @@ void WaveTrackVRulerMenuTable::OnZoom( WaveTrackViewConstants::ZoomActions iZoomCode ) { mpData->doZoom( - ::GetActiveProject(), mpData->pTrack, + &mpData->project, mpData->pTrack, iZoomCode, mpData->rect, mpData->yy, mpData->yy, false ); @@ -115,6 +115,7 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease( !(event.ShiftDown() || event.CmdDown())) { WaveTrackVRulerMenuTable::InitMenuData data { + *pProject, pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom }; std::unique_ptr diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h index 9ddcd5f3b..c6e72e6a3 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h @@ -59,6 +59,7 @@ public: struct InitMenuData { public: + AudacityProject &project; WaveTrack *pTrack; wxRect rect; unsigned result; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp index b8080c73f..7ac1ae2cf 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp @@ -304,8 +304,6 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable) END_POPUP_MENU() -#include "../../../../Project.h" // for GetActiveProject - void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt) { WaveTrack *const wt = mpData->pTrack; @@ -322,7 +320,8 @@ void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt) channel->GetIndependentWaveformSettings().scaleType = newScaleType; } - ProjectHistory::Get( *::GetActiveProject() ).ModifyState(true); + AudacityProject *const project = &mpData->project; + ProjectHistory::Get( *project ).ModifyState(true); using namespace RefreshCode; mpData->result = UpdateVRuler | RefreshAll; diff --git a/src/tracks/timetrack/ui/TimeTrackControls.cpp b/src/tracks/timetrack/ui/TimeTrackControls.cpp index 4d70ffc18..efb013241 100644 --- a/src/tracks/timetrack/ui/TimeTrackControls.cpp +++ b/src/tracks/timetrack/ui/TimeTrackControls.cpp @@ -106,7 +106,7 @@ void TimeTrackMenuTable::OnSetTimeTrackRange(wxCommandEvent & /*event*/) 1000); if (lower >= 10 && upper <= 1000 && lower < upper) { - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; pTrack->SetRangeLower((double)lower / 100.0); pTrack->SetRangeUpper((double)upper / 100.0); ProjectHistory::Get( *project ) @@ -122,7 +122,7 @@ void TimeTrackMenuTable::OnTimeTrackLin(wxCommandEvent & /*event*/) { TimeTrack *const pTrack = static_cast(mpData->pTrack); pTrack->SetDisplayLog(false); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; ProjectHistory::Get( *project ) .PushState(XO("Set time track display to linear"), XO("Set Display")); @@ -134,7 +134,7 @@ void TimeTrackMenuTable::OnTimeTrackLog(wxCommandEvent & /*event*/) { TimeTrack *const pTrack = static_cast(mpData->pTrack); pTrack->SetDisplayLog(true); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; ProjectHistory::Get( *project ) .PushState(XO("Set time track display to logarithmic"), XO("Set Display")); @@ -145,7 +145,7 @@ void TimeTrackMenuTable::OnTimeTrackLog(wxCommandEvent & /*event*/) void TimeTrackMenuTable::OnTimeTrackLogInt(wxCommandEvent & /*event*/) { TimeTrack *const pTrack = static_cast(mpData->pTrack); - AudacityProject *const project = ::GetActiveProject(); + AudacityProject *const project = &mpData->project; if (pTrack->GetInterpolateLog()) { pTrack->SetInterpolateLog(false); ProjectHistory::Get( *project ) diff --git a/src/tracks/ui/CommonTrackControls.cpp b/src/tracks/ui/CommonTrackControls.cpp index 67142e5bd..5994ae4b9 100644 --- a/src/tracks/ui/CommonTrackControls.cpp +++ b/src/tracks/ui/CommonTrackControls.cpp @@ -116,7 +116,7 @@ void TrackMenuTable::InitMenu(Menu *pMenu) { Track *const pTrack = mpData->pTrack; - const auto &tracks = TrackList::Get( *GetActiveProject() ); + const auto &tracks = TrackList::Get( mpData->project ); pMenu->Enable(OnMoveUpID, tracks.CanMoveUp(pTrack)); pMenu->Enable(OnMoveDownID, tracks.CanMoveDown(pTrack)); @@ -134,7 +134,7 @@ BEGIN_POPUP_MENU(TrackMenuTable) OnMoveUpID, XO("Move Track &Up").Join( Verbatim( - CommandManager::Get( *GetActiveProject() ). + CommandManager::Get( mpData->project ). // using GET to compose menu item name for wxWidgets GetKeyFromName(wxT("TrackMoveUp")).GET() ), wxT("\t") @@ -144,7 +144,7 @@ BEGIN_POPUP_MENU(TrackMenuTable) OnMoveDownID, XO("Move Track &Down").Join( Verbatim( - CommandManager::Get( *GetActiveProject() ). + CommandManager::Get( mpData->project ). // using GET to compose menu item name for wxWidgets GetKeyFromName(wxT("TrackMoveDown")).GET() ), wxT("\t") @@ -154,7 +154,7 @@ BEGIN_POPUP_MENU(TrackMenuTable) OnMoveTopID, XO("Move Track to &Top").Join( Verbatim( - CommandManager::Get( *GetActiveProject() ). + CommandManager::Get( mpData->project ). // using GET to compose menu item name for wxWidgets GetKeyFromName(wxT("TrackMoveTop")).GET() ), wxT("\t") @@ -164,7 +164,7 @@ BEGIN_POPUP_MENU(TrackMenuTable) OnMoveBottomID, XO("Move Track to &Bottom").Join( Verbatim( - CommandManager::Get( *GetActiveProject() ). + CommandManager::Get( mpData->project ). // using GET to compose menu item name for wxWidgets GetKeyFromName(wxT("TrackMoveBottom")).GET() ), wxT("\t") @@ -214,7 +214,7 @@ void TrackMenuTable::OnSetName(wxCommandEvent &) Track *const pTrack = mpData->pTrack; if (pTrack) { - AudacityProject *const proj = ::GetActiveProject(); + AudacityProject *const proj = &mpData->project; const wxString oldName = pTrack->GetName(); SetTrackNameCommand Command; @@ -239,7 +239,7 @@ void TrackMenuTable::OnSetName(wxCommandEvent &) void TrackMenuTable::OnMoveTrack(wxCommandEvent &event) { - AudacityProject *const project = GetActiveProject(); + AudacityProject *const project = &mpData->project; TrackUtilities::MoveChoice choice; switch (event.GetId()) { default: @@ -261,17 +261,18 @@ void TrackMenuTable::OnMoveTrack(wxCommandEvent &event) mpData->result = RefreshCode::RefreshAll; } -unsigned CommonTrackControls::DoContextMenu - (const wxRect &rect, wxWindow *pParent, wxPoint *, AudacityProject*) +unsigned CommonTrackControls::DoContextMenu( + const wxRect &rect, wxWindow *pParent, wxPoint *, AudacityProject *pProject) { + using namespace RefreshCode; wxRect buttonRect; TrackInfo::GetTitleBarRect(rect, buttonRect); auto track = FindTrack(); if (!track) - return RefreshCode::RefreshNone; + return RefreshNone; - InitMenuData data{ track.get(), pParent, RefreshCode::RefreshNone }; + InitMenuData data{ *pProject, track.get(), pParent, RefreshNone }; const auto pTable = &TrackMenuTable::Instance(); auto pMenu = PopupMenuTable::BuildMenu(pParent, pTable, &data); diff --git a/src/tracks/ui/CommonTrackControls.h b/src/tracks/ui/CommonTrackControls.h index 3015a8fdd..c441f8474 100644 --- a/src/tracks/ui/CommonTrackControls.h +++ b/src/tracks/ui/CommonTrackControls.h @@ -33,6 +33,7 @@ public: struct InitMenuData { public: + AudacityProject &project; Track *pTrack; wxWindow *pParent; unsigned result;