From 12bbafe013965ea9a7f0ca3831612f4152d5ded6 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 1 Jan 2020 21:09:16 -0500 Subject: [PATCH 1/3] Separate storing of user data from initialization of popup items --- .../labeltrack/ui/LabelTrackControls.cpp | 2 +- .../notetrack/ui/NoteTrackControls.cpp | 2 +- .../notetrack/ui/NoteTrackVZoomHandle.cpp | 4 +- .../wavetrack/ui/SpectrumVZoomHandle.cpp | 4 +- .../wavetrack/ui/SpectrumVZoomHandle.h | 2 +- .../wavetrack/ui/WaveTrackControls.cpp | 37 ++++++++++++++----- .../wavetrack/ui/WaveTrackVZoomHandle.cpp | 2 +- .../wavetrack/ui/WaveTrackVZoomHandle.h | 2 +- .../wavetrack/ui/WaveformVZoomHandle.cpp | 4 +- .../wavetrack/ui/WaveformVZoomHandle.h | 2 +- src/tracks/timetrack/ui/TimeTrackControls.cpp | 6 ++- src/tracks/ui/CommonTrackControls.cpp | 9 ++++- src/tracks/ui/CommonTrackControls.h | 2 +- src/widgets/PopupMenuTable.cpp | 8 +++- src/widgets/PopupMenuTable.h | 18 +++++++-- 15 files changed, 74 insertions(+), 30 deletions(-) diff --git a/src/tracks/labeltrack/ui/LabelTrackControls.cpp b/src/tracks/labeltrack/ui/LabelTrackControls.cpp index a99c39851..da525e24b 100644 --- a/src/tracks/labeltrack/ui/LabelTrackControls.cpp +++ b/src/tracks/labeltrack/ui/LabelTrackControls.cpp @@ -43,7 +43,7 @@ class LabelTrackMenuTable : public PopupMenuTable public: static LabelTrackMenuTable &Instance(); - void InitMenu(Menu*, void *pUserData) override + void InitUserData(void *pUserData) override { mpData = static_cast(pUserData); } diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp index 9acef78f0..f5c211997 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp @@ -83,7 +83,7 @@ public: static NoteTrackMenuTable &Instance(); private: - void InitMenu(Menu*, void *pUserData) override + void InitUserData(void *pUserData) override { mpData = static_cast(pUserData); } diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp index c8bcf5ddb..c94b1ade6 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp @@ -209,7 +209,7 @@ private: mpData = nullptr; } - virtual void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; }; NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance() @@ -218,7 +218,7 @@ NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance() return instance; } -void NoteTrackVRulerMenuTable::InitMenu(Menu *WXUNUSED(pMenu), void *pUserData) +void NoteTrackVRulerMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); } diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp index f417343c4..9b2059eb4 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp @@ -265,9 +265,9 @@ PopupMenuTable &SpectrumVRulerMenuTable::Instance() return instance; } -void SpectrumVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void SpectrumVRulerMenuTable::InitMenu(Menu *pMenu) { - WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData); + WaveTrackVRulerMenuTable::InitMenu(pMenu); WaveTrack *const wt = mpData->pTrack; const int id = diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.h index 310c7fe7d..1fbf566f8 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.h @@ -83,7 +83,7 @@ public: static PopupMenuTable &Instance(); private: - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitMenu(Menu *pMenu) override; void OnSpectrumScaleType(wxCommandEvent &evt); }; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 1a2fa48dc..4539cac84 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -155,7 +155,8 @@ public: static WaveColorMenuTable &Instance(); private: - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; + void InitMenu(Menu *pMenu) override; void DestroyMenu() override { @@ -174,9 +175,13 @@ WaveColorMenuTable &WaveColorMenuTable::Instance() return instance; } -void WaveColorMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void WaveColorMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); +} + +void WaveColorMenuTable::InitMenu(Menu *pMenu) +{ WaveTrack *const pTrack = static_cast(mpData->pTrack); auto WaveColorId = IdOfWaveColor( pTrack->GetWaveColorIndex()); SetMenuChecks(*pMenu, [=](int id){ return id == WaveColorId; }); @@ -247,7 +252,8 @@ public: static FormatMenuTable &Instance(); private: - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; + void InitMenu(Menu *pMenu) override; void DestroyMenu() override { @@ -267,9 +273,13 @@ FormatMenuTable &FormatMenuTable::Instance() return instance; } -void FormatMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void FormatMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); +} + +void FormatMenuTable::InitMenu(Menu *pMenu) +{ WaveTrack *const pTrack = static_cast(mpData->pTrack); auto formatId = IdOfFormat(pTrack->GetSampleFormat()); SetMenuChecks(*pMenu, [=](int id){ return id == formatId; }); @@ -363,7 +373,8 @@ public: static RateMenuTable &Instance(); private: - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; + void InitMenu(Menu *pMenu) override; void DestroyMenu() override { @@ -385,9 +396,13 @@ RateMenuTable &RateMenuTable::Instance() return instance; } -void RateMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void RateMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); +} + +void RateMenuTable::InitMenu(Menu *pMenu) +{ WaveTrack *const pTrack = static_cast(mpData->pTrack); const auto rateId = IdOfRate((int)pTrack->GetRate()); SetMenuChecks(*pMenu, [=](int id){ return id == rateId; }); @@ -557,7 +572,8 @@ public: protected: WaveTrackMenuTable() : mpData(NULL) {mpTrack=NULL;} - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; + void InitMenu(Menu *pMenu) override; void DestroyMenu() override { @@ -597,9 +613,13 @@ WaveTrackMenuTable &WaveTrackMenuTable::Instance( Track * pTrack ) return instance; } -void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void WaveTrackMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); +} + +void WaveTrackMenuTable::InitMenu(Menu *pMenu) +{ WaveTrack *const pTrack = static_cast(mpData->pTrack); std::vector checkedIds; @@ -637,7 +657,6 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData) if ( isMono ) { - mpData = static_cast(pUserData); WaveTrack *const pTrack2 = static_cast(mpData->pTrack); auto next = * ++ tracks.Find(pTrack2); diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp index 0b7084552..dba89f5b5 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp @@ -34,7 +34,7 @@ bool WaveTrackVZoomHandle::IsDragZooming(int zoomStart, int zoomEnd) /////////////////////////////////////////////////////////////////////////////// // Table class -void WaveTrackVRulerMenuTable::InitMenu(Menu *, void *pUserData) +void WaveTrackVRulerMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h index 6ad50bd50..9ddcd5f3b 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h @@ -69,7 +69,7 @@ public: protected: WaveTrackVRulerMenuTable() {} - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; private: void DestroyMenu() override diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp index 6be94f7e0..b8080c73f 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp @@ -266,9 +266,9 @@ PopupMenuTable &WaveformVRulerMenuTable::Instance() return instance; } -void WaveformVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void WaveformVRulerMenuTable::InitMenu(Menu *pMenu) { - WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData); + WaveTrackVRulerMenuTable::InitMenu(pMenu); // DB setting is already on track drop down. WaveTrack *const wt = mpData->pTrack; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.h index 81900093f..544910c87 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.h @@ -83,7 +83,7 @@ public: static PopupMenuTable &Instance(); private: - virtual void InitMenu(Menu *pMenu, void *pUserData) override; + virtual void InitMenu(Menu *pMenu) override; void OnWaveformScaleType(wxCommandEvent &evt); }; diff --git a/src/tracks/timetrack/ui/TimeTrackControls.cpp b/src/tracks/timetrack/ui/TimeTrackControls.cpp index 3293ea2a6..4d70ffc18 100644 --- a/src/tracks/timetrack/ui/TimeTrackControls.cpp +++ b/src/tracks/timetrack/ui/TimeTrackControls.cpp @@ -47,9 +47,13 @@ public: static TimeTrackMenuTable &Instance(); private: - void InitMenu(Menu *pMenu, void *pUserData) override + void InitUserData(void *pUserData) override { mpData = static_cast(pUserData); + } + + void InitMenu(Menu *pMenu) override + { TimeTrack *const pTrack = static_cast(mpData->pTrack); pMenu->Check(OnTimeTrackLogIntID, pTrack->GetInterpolateLog()); diff --git a/src/tracks/ui/CommonTrackControls.cpp b/src/tracks/ui/CommonTrackControls.cpp index 6ed7af9b6..71a48e979 100644 --- a/src/tracks/ui/CommonTrackControls.cpp +++ b/src/tracks/ui/CommonTrackControls.cpp @@ -90,7 +90,8 @@ private: void OnSetName(wxCommandEvent &); void OnMoveTrack(wxCommandEvent &event); - void InitMenu(Menu *pMenu, void *pUserData) override; + void InitUserData(void *pUserData) override; + void InitMenu(Menu *pMenu) override; void DestroyMenu() override { @@ -106,9 +107,13 @@ TrackMenuTable &TrackMenuTable::Instance() return instance; } -void TrackMenuTable::InitMenu(Menu *pMenu, void *pUserData) +void TrackMenuTable::InitUserData(void *pUserData) { mpData = static_cast(pUserData); +} + +void TrackMenuTable::InitMenu(Menu *pMenu) +{ Track *const pTrack = mpData->pTrack; const auto &tracks = TrackList::Get( *GetActiveProject() ); diff --git a/src/tracks/ui/CommonTrackControls.h b/src/tracks/ui/CommonTrackControls.h index ce05975fc..781cf2131 100644 --- a/src/tracks/ui/CommonTrackControls.h +++ b/src/tracks/ui/CommonTrackControls.h @@ -28,7 +28,7 @@ class CommonTrackControls /* not final */ : public TrackControls public: using TrackControls::TrackControls; - // This is passed to the InitMenu() methods of the PopupMenuTable + // This is passed to the InitUserData() methods of the PopupMenuTable // objects returned by GetMenuExtension: struct InitMenuData { diff --git a/src/widgets/PopupMenuTable.cpp b/src/widgets/PopupMenuTable.cpp index ef093b07b..454878b5a 100644 --- a/src/widgets/PopupMenuTable.cpp +++ b/src/widgets/PopupMenuTable.cpp @@ -20,6 +20,8 @@ PopupMenuTable::Menu::~Menu() void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable) { + pTable->InitUserData(pUserData); + auto connect = [&]( const PopupMenuTable::Entry *pEntry ) { this->pParent->Bind (wxEVT_COMMAND_MENU_SELECTED, @@ -61,7 +63,7 @@ void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable) } } - pTable->InitMenu(this, pUserData); + pTable->InitMenu(this); } void PopupMenuTable::Menu::DisconnectTable(PopupMenuTable *pTable) @@ -85,6 +87,10 @@ void PopupMenuTable::Menu::Disconnect() DisconnectTable(pTable); } +void PopupMenuTable::InitMenu(Menu *) +{ +} + // static std::unique_ptr PopupMenuTable::BuildMenu ( wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData ) diff --git a/src/widgets/PopupMenuTable.h b/src/widgets/PopupMenuTable.h index 2c25e3520..9e3a98ef8 100644 --- a/src/widgets/PopupMenuTable.h +++ b/src/widgets/PopupMenuTable.h @@ -79,14 +79,19 @@ public: void *pUserData; }; + // Called before the menu items are appended. + // Store user data, if needed. + virtual void InitUserData(void *pUserData) = 0; + // Called when the menu is about to pop up. // Your chance to enable and disable items. - virtual void InitMenu(Menu *pMenu, void *pUserData) = 0; + // Default implementation does nothing. + virtual void InitMenu(Menu *pMenu); // Called when menu is destroyed. virtual void DestroyMenu() = 0; - // Optional pUserData gets passed to the InitMenu routines of tables. + // Optional pUserData gets passed to the InitUserData routines of tables. // No memory management responsibility is assumed by this function. static std::unique_ptr BuildMenu (wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData = NULL); @@ -101,14 +106,19 @@ In class MyTable (maybe in the private section), which inherits from PopupMenuTable, DECLARE_POPUP_MENU(MyTable); -virtual void InitMenu(Menu *pMenu, void *pUserData); +virtual void InitUserData(void *pUserData); +virtual void InitMenu(Menu *pMenu); virtual void DestroyMenu(); Then in MyTable.cpp, -void MyTable::InitMenu(Menu *pMenu, void *pUserData) +void MyTable::InitUserData(void *pUserData) { auto pData = static_cast(pUserData); +} + +void MyTable::InitMenu(Menu *pMenu) +{ // Remember pData, enable or disable menu items } From 7dbca958a6734894abc14f96a8310e6c7917b4ac Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 1 Jan 2020 21:57:39 -0500 Subject: [PATCH 2/3] CellularPanel passes AudacityProject* to DoContextMenu() of cell --- src/AdornedRulerPanel.cpp | 2 +- src/CellularPanel.cpp | 2 +- src/TrackPanel.cpp | 2 +- src/TrackPanelCell.h | 2 +- src/tracks/ui/CommonTrackControls.cpp | 2 +- src/tracks/ui/CommonTrackControls.h | 3 ++- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/AdornedRulerPanel.cpp b/src/AdornedRulerPanel.cpp index ecc33cad9..8338568b6 100644 --- a/src/AdornedRulerPanel.cpp +++ b/src/AdornedRulerPanel.cpp @@ -430,7 +430,7 @@ public: unsigned DoContextMenu (const wxRect &rect, - wxWindow *pParent, wxPoint *pPosition) final override + wxWindow *pParent, wxPoint *pPosition, AudacityProject*) final override { (void)pParent;// Compiler food (void)rect;// Compiler food diff --git a/src/CellularPanel.cpp b/src/CellularPanel.cpp index 8191820c7..17ba3859f 100644 --- a/src/CellularPanel.cpp +++ b/src/CellularPanel.cpp @@ -877,7 +877,7 @@ void CellularPanel::DoContextMenu( TrackPanelCell *pCell ) auto rect = FindRect( *delegate ); const UIHandle::Result refreshResult = - delegate->DoContextMenu(rect, this, NULL); + delegate->DoContextMenu(rect, this, nullptr, GetProject()); // To do: use safer shared_ptr to pCell ProcessUIHandleResult(pCell, pCell, refreshResult); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 411389281..10702ca8a 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1597,7 +1597,7 @@ unsigned TrackPanelCell::HandleWheelRotation } unsigned TrackPanelCell::DoContextMenu - (const wxRect &, wxWindow*, wxPoint *) + (const wxRect &, wxWindow*, wxPoint *, AudacityProject*) { return RefreshCode::RefreshNone; } diff --git a/src/TrackPanelCell.h b/src/TrackPanelCell.h index 4deec8e64..46540cbc8 100644 --- a/src/TrackPanelCell.h +++ b/src/TrackPanelCell.h @@ -109,7 +109,7 @@ public: // Default implementation does nothing virtual unsigned DoContextMenu (const wxRect &rect, - wxWindow *pParent, wxPoint *pPosition); + wxWindow *pParent, wxPoint *pPosition, AudacityProject *pProject); // Return value is a bitwise OR of RefreshCode values // Default skips the event and does nothing diff --git a/src/tracks/ui/CommonTrackControls.cpp b/src/tracks/ui/CommonTrackControls.cpp index 71a48e979..67142e5bd 100644 --- a/src/tracks/ui/CommonTrackControls.cpp +++ b/src/tracks/ui/CommonTrackControls.cpp @@ -262,7 +262,7 @@ void TrackMenuTable::OnMoveTrack(wxCommandEvent &event) } unsigned CommonTrackControls::DoContextMenu - (const wxRect &rect, wxWindow *pParent, wxPoint *) + (const wxRect &rect, wxWindow *pParent, wxPoint *, AudacityProject*) { wxRect buttonRect; TrackInfo::GetTitleBarRect(rect, buttonRect); diff --git a/src/tracks/ui/CommonTrackControls.h b/src/tracks/ui/CommonTrackControls.h index 781cf2131..3015a8fdd 100644 --- a/src/tracks/ui/CommonTrackControls.h +++ b/src/tracks/ui/CommonTrackControls.h @@ -53,7 +53,8 @@ protected: const AudacityProject *) override = 0; unsigned DoContextMenu - (const wxRect &rect, wxWindow *pParent, wxPoint *pPosition) override; + (const wxRect &rect, wxWindow *pParent, wxPoint *pPosition, + AudacityProject *pProject) override; virtual PopupMenuTable *GetMenuExtension(Track *pTrack) = 0; // TrackPanelDrawable implementation From fce85d0e5657452945d63a25433743d1960968bb Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 21 May 2019 11:43:20 -0400 Subject: [PATCH 3/3] 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;