diff --git a/src/AudacityApp.cpp b/src/AudacityApp.cpp index 2e3fd57fa..712c017b6 100644 --- a/src/AudacityApp.cpp +++ b/src/AudacityApp.cpp @@ -1658,8 +1658,9 @@ bool AudacityApp::OnInit() // Only want one page of the preferences PrefsDialog::Factories factories; factories.push_back(KeyConfigPrefsFactory( id )); - auto pWindow = FindProjectFrame( GetActiveProject() ); - GlobalPrefsDialog dialog( pWindow, factories ); + const auto pProject = GetActiveProject(); + auto pWindow = FindProjectFrame( pProject ); + GlobalPrefsDialog dialog( pWindow, pProject, factories ); dialog.ShowModal(); MenuCreator::RebuildAllMenuBars(); return true; @@ -1796,7 +1797,7 @@ bool AudacityApp::InitTempDir() // Only want one page of the preferences PrefsDialog::Factories factories; factories.push_back(DirectoriesPrefsFactory()); - GlobalPrefsDialog dialog(NULL, factories); + GlobalPrefsDialog dialog(nullptr, nullptr, factories); dialog.ShowModal(); AudacityMessageBox(XO( @@ -2248,7 +2249,7 @@ void AudacityApp::OnMenuPreferences(wxCommandEvent & event) // all platforms. if(AllProjects{}.empty()) { - GlobalPrefsDialog dialog(NULL /* parent */ ); + GlobalPrefsDialog dialog(nullptr /* parent */, nullptr ); dialog.ShowModal(); } else diff --git a/src/commands/GetInfoCommand.cpp b/src/commands/GetInfoCommand.cpp index 43aaf1a14..2abd09477 100644 --- a/src/commands/GetInfoCommand.cpp +++ b/src/commands/GetInfoCommand.cpp @@ -362,7 +362,7 @@ bool GetInfoCommand::SendPreferences(const CommandContext &context) { context.StartArray(); auto pWin = &GetProjectFrame( context.project ); - GlobalPrefsDialog dialog( pWin ); + GlobalPrefsDialog dialog( pWin, &context.project ); // wxCommandEvent Evt; //dialog.Show(); ShuttleGuiGetDefinition S(pWin, *((context.pOutput)->mStatusTarget) ); diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index be180bc30..39c1c3e4b 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -933,7 +933,7 @@ void OnPreferences(const CommandContext &context) { auto &project = context.project; - GlobalPrefsDialog dialog(&GetProjectFrame( project ) /* parent */ ); + GlobalPrefsDialog dialog(&GetProjectFrame( project ) /* parent */, &project ); if( ScreenshotCommand::MayCapture( &dialog ) ) return; diff --git a/src/prefs/BatchPrefs.cpp b/src/prefs/BatchPrefs.cpp index 6ccb11584..0e2778644 100644 --- a/src/prefs/BatchPrefs.cpp +++ b/src/prefs/BatchPrefs.cpp @@ -96,7 +96,7 @@ BatchPrefs::~BatchPrefs() } PrefsPanel::Factory -BatchPrefsFactory = [](wxWindow *parent, wxWindowID winid) +BatchPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew BatchPrefs(parent, winid); diff --git a/src/prefs/DevicePrefs.cpp b/src/prefs/DevicePrefs.cpp index 8a6aa3564..cbf8631ea 100644 --- a/src/prefs/DevicePrefs.cpp +++ b/src/prefs/DevicePrefs.cpp @@ -423,7 +423,7 @@ bool DevicePrefs::Commit() } PrefsPanel::Factory -DevicePrefsFactory = [](wxWindow *parent, wxWindowID winid) +DevicePrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/DirectoriesPrefs.cpp b/src/prefs/DirectoriesPrefs.cpp index 2929b3b36..d3c5e83eb 100644 --- a/src/prefs/DirectoriesPrefs.cpp +++ b/src/prefs/DirectoriesPrefs.cpp @@ -292,7 +292,7 @@ bool DirectoriesPrefs::Commit() PrefsPanel::Factory DirectoriesPrefsFactory() { - return [](wxWindow *parent, wxWindowID winid) + return [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew DirectoriesPrefs(parent, winid); diff --git a/src/prefs/EffectsPrefs.cpp b/src/prefs/EffectsPrefs.cpp index 71dc1585d..407f6c1d2 100644 --- a/src/prefs/EffectsPrefs.cpp +++ b/src/prefs/EffectsPrefs.cpp @@ -251,7 +251,7 @@ bool EffectsPrefs::Commit() } PrefsPanel::Factory -EffectsPrefsFactory = [](wxWindow *parent, wxWindowID winid) +EffectsPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew EffectsPrefs(parent, winid); diff --git a/src/prefs/ExtImportPrefs.cpp b/src/prefs/ExtImportPrefs.cpp index 0a29f3ef0..4a06a2b16 100644 --- a/src/prefs/ExtImportPrefs.cpp +++ b/src/prefs/ExtImportPrefs.cpp @@ -827,7 +827,7 @@ void ExtImportPrefsDropTarget::OnLeave() } PrefsPanel::Factory -ExtImportPrefsFactory = [](wxWindow *parent, wxWindowID winid) +ExtImportPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew ExtImportPrefs(parent, winid); diff --git a/src/prefs/GUIPrefs.cpp b/src/prefs/GUIPrefs.cpp index 1d2f243dd..e8e4e41ca 100644 --- a/src/prefs/GUIPrefs.cpp +++ b/src/prefs/GUIPrefs.cpp @@ -378,7 +378,7 @@ int ShowClippingPrefsID() } PrefsPanel::Factory -GUIPrefsFactory = [](wxWindow *parent, wxWindowID winid) +GUIPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew GUIPrefs(parent, winid); diff --git a/src/prefs/ImportExportPrefs.cpp b/src/prefs/ImportExportPrefs.cpp index 2d8b1ab69..56c86296d 100644 --- a/src/prefs/ImportExportPrefs.cpp +++ b/src/prefs/ImportExportPrefs.cpp @@ -150,7 +150,7 @@ bool ImportExportPrefs::Commit() } PrefsPanel::Factory -ImportExportPrefsFactory = [](wxWindow *parent, wxWindowID winid) +ImportExportPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew ImportExportPrefs(parent, winid); diff --git a/src/prefs/KeyConfigPrefs.cpp b/src/prefs/KeyConfigPrefs.cpp index 06d5a3c84..65740d25a 100644 --- a/src/prefs/KeyConfigPrefs.cpp +++ b/src/prefs/KeyConfigPrefs.cpp @@ -714,7 +714,7 @@ void KeyConfigPrefs::Cancel() PrefsPanel::Factory KeyConfigPrefsFactory( const CommandID &name ) { - return [=](wxWindow *parent, wxWindowID winid) + return [=](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew auto result = safenew KeyConfigPrefs{ parent, winid, name }; diff --git a/src/prefs/LibraryPrefs.cpp b/src/prefs/LibraryPrefs.cpp index bd0316569..d54759127 100644 --- a/src/prefs/LibraryPrefs.cpp +++ b/src/prefs/LibraryPrefs.cpp @@ -262,7 +262,7 @@ bool LibraryPrefs::Commit() } PrefsPanel::Factory -LibraryPrefsFactory = [](wxWindow *parent, wxWindowID winid) +LibraryPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew LibraryPrefs(parent, winid); diff --git a/src/prefs/MidiIOPrefs.cpp b/src/prefs/MidiIOPrefs.cpp index 6e56cbdc0..79395c676 100644 --- a/src/prefs/MidiIOPrefs.cpp +++ b/src/prefs/MidiIOPrefs.cpp @@ -302,7 +302,7 @@ bool MidiIOPrefs::Validate() } PrefsPanel::Factory -MidiIOPrefsFactory = [](wxWindow *parent, wxWindowID winid) +MidiIOPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew MidiIOPrefs(parent, winid); diff --git a/src/prefs/ModulePrefs.cpp b/src/prefs/ModulePrefs.cpp index d7a957e95..9745edb84 100644 --- a/src/prefs/ModulePrefs.cpp +++ b/src/prefs/ModulePrefs.cpp @@ -188,7 +188,7 @@ void ModulePrefs::SetModuleStatus(const FilePath &fname, int iStatus){ } PrefsPanel::Factory -ModulePrefsFactory = [](wxWindow *parent, wxWindowID winid) +ModulePrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew ModulePrefs(parent, winid); diff --git a/src/prefs/MousePrefs.cpp b/src/prefs/MousePrefs.cpp index de1e2692c..3a228a37b 100644 --- a/src/prefs/MousePrefs.cpp +++ b/src/prefs/MousePrefs.cpp @@ -223,7 +223,7 @@ bool MousePrefs::Commit() } PrefsPanel::Factory -MousePrefsFactory = [](wxWindow *parent, wxWindowID winid) +MousePrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew MousePrefs(parent, winid); diff --git a/src/prefs/PlaybackPrefs.cpp b/src/prefs/PlaybackPrefs.cpp index 06154b3cb..5a0767e09 100644 --- a/src/prefs/PlaybackPrefs.cpp +++ b/src/prefs/PlaybackPrefs.cpp @@ -183,7 +183,7 @@ bool PlaybackPrefs::Commit() } PrefsPanel::Factory -PlaybackPrefsFactory = [](wxWindow *parent, wxWindowID winid) +PlaybackPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew PlaybackPrefs(parent, winid); diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index 2c9c7f6f4..19a323f4d 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -533,7 +533,7 @@ PrefsDialog::Factories PrefsDialog::PrefsDialog( - wxWindow * parent, + wxWindow * parent, AudacityProject *pProject, const TranslatableString &titlePrefix, Factories &factories) : wxDialogWrapper(parent, wxID_ANY, XO("Audacity Preferences"), wxDefaultPosition, @@ -575,7 +575,7 @@ PrefsDialog::PrefsDialog( { const PrefsNode &node = *it; const PrefsPanel::Factory &factory = node.factory; - wxWindow *const w = factory(mCategories, wxID_ANY); + wxWindow *const w = factory(mCategories, wxID_ANY, pProject); if (stack.empty()) // Parameters are: AddPage(page, name, IsSelected, imageId). mCategories->AddPage(w, w->GetName(), false, 0); @@ -603,7 +603,7 @@ PrefsDialog::PrefsDialog( // Unique page, don't show the factory const PrefsNode &node = factories[0]; const PrefsPanel::Factory &factory = node.factory; - mUniquePage = factory(S.GetParent(), wxID_ANY); + mUniquePage = factory(S.GetParent(), wxID_ANY, pProject); wxWindow * uniquePageWindow = S.Prop(1) .Position(wxEXPAND) .AddWindow(mUniquePage); @@ -888,8 +888,9 @@ int PrefsDialog::GetSelectedPage() const return 0; } -GlobalPrefsDialog::GlobalPrefsDialog(wxWindow * parent, Factories &factories) - : PrefsDialog(parent, XO("Preferences:"), factories) +GlobalPrefsDialog::GlobalPrefsDialog( + wxWindow * parent, AudacityProject *pProject, Factories &factories) + : PrefsDialog(parent, pProject, XO("Preferences:"), factories) { } @@ -951,7 +952,8 @@ void DoReloadPreferences( AudacityProject &project ) SpectrogramSettings::defaults().LoadPrefs(); WaveformSettings::defaults().LoadPrefs(); - GlobalPrefsDialog dialog(&GetProjectFrame( project ) /* parent */ ); + GlobalPrefsDialog dialog( + &GetProjectFrame( project ) /* parent */, &project ); wxCommandEvent Evt; //dialog.Show(); dialog.OnOK(Evt); diff --git a/src/prefs/PrefsDialog.h b/src/prefs/PrefsDialog.h index 4cef3c45f..06187fb61 100644 --- a/src/prefs/PrefsDialog.h +++ b/src/prefs/PrefsDialog.h @@ -16,6 +16,7 @@ #include <vector> #include "../widgets/wxPanelWrapper.h" // to inherit +class AudacityProject; class wxTreebook; class wxTreeEvent; class PrefsPanel; @@ -27,13 +28,16 @@ class ShuttleGui; #define CONST const #endif +class AudacityProject; + class PrefsDialog /* not final */ : public wxDialogWrapper { public: // An array of PrefsNode specifies the tree of pages in pre-order traversal. struct PrefsNode { using Factory = - std::function< PrefsPanel * (wxWindow *parent, wxWindowID winid) >; + std::function< PrefsPanel * ( + wxWindow *parent, wxWindowID winid, AudacityProject *) >; Factory factory; CONST int nChildren; bool expanded; @@ -48,6 +52,7 @@ class PrefsDialog /* not final */ : public wxDialogWrapper static Factories &DefaultFactories(); PrefsDialog(wxWindow * parent, + AudacityProject *pProject, // may be null const TranslatableString &titlePrefix = XO("Preferences:"), Factories &factories = DefaultFactories()); virtual ~PrefsDialog(); @@ -92,7 +97,9 @@ private: class GlobalPrefsDialog final : public PrefsDialog { public: - GlobalPrefsDialog(wxWindow * parent, Factories &factories = DefaultFactories()); + GlobalPrefsDialog( + wxWindow * parent, AudacityProject *pProject, + Factories &factories = DefaultFactories()); virtual ~GlobalPrefsDialog(); long GetPreferredPage() override; void SavePreferredPage() override; diff --git a/src/prefs/PrefsPanel.h b/src/prefs/PrefsPanel.h index 2b4094cf6..9ed84312c 100644 --- a/src/prefs/PrefsPanel.h +++ b/src/prefs/PrefsPanel.h @@ -42,6 +42,7 @@ MousePrefs, QualityPrefs, SpectrumPrefs and ThemePrefs. #define TOP_LEVEL_BORDER 5 #define GENERIC_CONTROL_BORDER 5 +class AudacityProject; class ShuttleGui; class PrefsPanel /* not final */ : public wxPanelWrapper, ComponentInterface @@ -49,8 +50,12 @@ class PrefsPanel /* not final */ : public wxPanelWrapper, ComponentInterface public: // \brief Type alias for factories such as GUIPrefsFactory that produce a // PrefsPanel. + // The project pointer may be null. Usually it's not needed because + // preferences are global. But sometimes you need a project, such as to + // preview the preference changes for spectrograms. using Factory = - std::function< PrefsPanel * (wxWindow *parent, wxWindowID winid) >; + std::function< PrefsPanel * ( + wxWindow *parent, wxWindowID winid, AudacityProject *) >; PrefsPanel( wxWindow * parent, wxWindowID winid, const TranslatableString &title) diff --git a/src/prefs/ProjectsPrefs.cpp b/src/prefs/ProjectsPrefs.cpp index 1d463ee90..cc20ba59f 100644 --- a/src/prefs/ProjectsPrefs.cpp +++ b/src/prefs/ProjectsPrefs.cpp @@ -96,7 +96,7 @@ bool ProjectsPrefs::Commit() } PrefsPanel::Factory -ProjectsPrefsFactory = [](wxWindow *parent, wxWindowID winid) +ProjectsPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew ProjectsPrefs(parent, winid); diff --git a/src/prefs/QualityPrefs.cpp b/src/prefs/QualityPrefs.cpp index 9b3a6cd3a..eab6c8fcf 100644 --- a/src/prefs/QualityPrefs.cpp +++ b/src/prefs/QualityPrefs.cpp @@ -234,7 +234,7 @@ bool QualityPrefs::Commit() } PrefsPanel::Factory -QualityPrefsFactory = [](wxWindow *parent, wxWindowID winid) +QualityPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew QualityPrefs(parent, winid); diff --git a/src/prefs/RecordingPrefs.cpp b/src/prefs/RecordingPrefs.cpp index bd523b09a..e66308915 100644 --- a/src/prefs/RecordingPrefs.cpp +++ b/src/prefs/RecordingPrefs.cpp @@ -305,7 +305,7 @@ void RecordingPrefs::OnToggleCustomName(wxCommandEvent & /* Evt */) } PrefsPanel::Factory -RecordingPrefsFactory = [](wxWindow *parent, wxWindowID winid) +RecordingPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew RecordingPrefs(parent, winid); diff --git a/src/prefs/SpectrumPrefs.cpp b/src/prefs/SpectrumPrefs.cpp index dcb62514a..aad46bf00 100644 --- a/src/prefs/SpectrumPrefs.cpp +++ b/src/prefs/SpectrumPrefs.cpp @@ -588,7 +588,7 @@ END_EVENT_TABLE() PrefsPanel::Factory SpectrumPrefsFactory( WaveTrack *wt ) { - return [=](wxWindow *parent, wxWindowID winid) + return [=](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew SpectrumPrefs(parent, winid, wt); diff --git a/src/prefs/ThemePrefs.cpp b/src/prefs/ThemePrefs.cpp index 396e43f3c..891e8b659 100644 --- a/src/prefs/ThemePrefs.cpp +++ b/src/prefs/ThemePrefs.cpp @@ -230,7 +230,7 @@ bool ThemePrefs::Commit() } PrefsPanel::Factory -ThemePrefsFactory = [](wxWindow *parent, wxWindowID winid) +ThemePrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew ThemePrefs(parent, winid); diff --git a/src/prefs/TracksBehaviorsPrefs.cpp b/src/prefs/TracksBehaviorsPrefs.cpp index 0984257af..e299ff5f1 100644 --- a/src/prefs/TracksBehaviorsPrefs.cpp +++ b/src/prefs/TracksBehaviorsPrefs.cpp @@ -132,7 +132,7 @@ bool TracksBehaviorsPrefs::Commit() } PrefsPanel::Factory -TracksBehaviorsPrefsFactory = [](wxWindow *parent, wxWindowID winid) +TracksBehaviorsPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew TracksBehaviorsPrefs(parent, winid); diff --git a/src/prefs/TracksPrefs.cpp b/src/prefs/TracksPrefs.cpp index 66b08748c..0df951828 100644 --- a/src/prefs/TracksPrefs.cpp +++ b/src/prefs/TracksPrefs.cpp @@ -396,7 +396,7 @@ bool TracksPrefs::Commit() } PrefsPanel::Factory -TracksPrefsFactory = [](wxWindow *parent, wxWindowID winid) +TracksPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew TracksPrefs(parent, winid); diff --git a/src/prefs/WarningsPrefs.cpp b/src/prefs/WarningsPrefs.cpp index 631fb9ce6..4bd23133a 100644 --- a/src/prefs/WarningsPrefs.cpp +++ b/src/prefs/WarningsPrefs.cpp @@ -107,7 +107,7 @@ bool WarningsPrefs::Commit() } PrefsPanel::Factory -WarningsPrefsFactory = [](wxWindow *parent, wxWindowID winid) +WarningsPrefsFactory = [](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew WarningsPrefs(parent, winid); diff --git a/src/prefs/WaveformPrefs.cpp b/src/prefs/WaveformPrefs.cpp index d947cc607..349486ded 100644 --- a/src/prefs/WaveformPrefs.cpp +++ b/src/prefs/WaveformPrefs.cpp @@ -256,7 +256,7 @@ END_EVENT_TABLE() PrefsPanel::Factory WaveformPrefsFactory(WaveTrack *wt) { - return [=](wxWindow *parent, wxWindowID winid) + return [=](wxWindow *parent, wxWindowID winid, AudacityProject *) { wxASSERT(parent); // to justify safenew return safenew WaveformPrefs(parent, winid, wt); diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 88a4cda04..7c5befad7 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -828,10 +828,10 @@ void WaveTrackMenuTable::OnSpectrogramSettings(wxCommandEvent &) class ViewSettingsDialog final : public PrefsDialog { public: - ViewSettingsDialog(wxWindow *parent, + ViewSettingsDialog(wxWindow *parent, AudacityProject &project, const TranslatableString &title, PrefsDialog::Factories &factories, int page) - : PrefsDialog(parent, title, factories) + : PrefsDialog(parent, &project, title, factories) , mPage(page) { } @@ -869,7 +869,8 @@ void WaveTrackMenuTable::OnSpectrogramSettings(wxCommandEvent &) 0; auto title = XO("%s:").Format( pTrack->GetName() ); - ViewSettingsDialog dialog(mpData->pParent, title, factories, page); + ViewSettingsDialog dialog( + mpData->pParent, mpData->project, title, factories, page); if (0 != dialog.ShowModal()) { // Redraw