Audacity  2.2.2
Functions | Variables
Prefs.cpp File Reference

Utility functions for working with our wxConf (gPrefs) More...

#include "Audacity.h"
#include <wx/defs.h>
#include <wx/app.h>
#include <wx/config.h>
#include <wx/intl.h>
#include <wx/fileconf.h>
#include <wx/filename.h>
#include <wx/stdpaths.h>
#include "AudacityApp.h"
#include "FileNames.h"
#include "Languages.h"
#include "Prefs.h"
#include "widgets/ErrorDialog.h"
#include "Internat.h"

Go to the source code of this file.

Functions

void InitPreferences ()
 
void FinishPreferences ()
 

Variables

std::unique_ptr< AudacityPrefsugPrefs {}
 
AudacityPrefsgPrefs = NULL
 
int gMenusDirty = 0
 

Detailed Description

Utility functions for working with our wxConf (gPrefs)

Audacity uses wxWidgets' wxConfig class to handle preferences. See Prefs.h for more information on how it works...

  Note: The info below is very outdated and incomplete

  Preference field specification:
   /
      Version              - Audacity Version that created these prefs
      DefaultOpenPath         - Default directory for NEW file selector
   /FileFormats
      CopyOrEditUncompressedData - Copy data from uncompressed files or
         [ "copy", "edit"]   - edit in place?
      ExportFormat_SF1        - Format to export PCM data in
                             (this number is a libsndfile1.0 format)
   /SamplingRate
      DefaultProjectSampleRate- New projects will have this rate
         [ 8000, 11025, 16000, 22050, 44100, 48000 ]
   /AudioIO
      PlaybackDevice       - device to use for playback
      RecordingDevice         - device to use for recording
         (these are device names understood by PortAudio)
   /Display
      WaveformColor        - 0xRRGGBB  --since it will be stored in
      ShadowColor          -          decimal, it will be somewhat
      SpectrumLowColor     -          non-intuitive to edit, but
      SpectrumHighColor    -          much easier to parse.
   /Locale
      Language          - two-letter language code for translations

   (*): wxGTK
   (+): wxWin
   ($): wxMac

Definition in file Prefs.cpp.

Function Documentation

void FinishPreferences ( )

Definition at line 369 of file Prefs.cpp.

References ugPrefs.

Referenced by AudacityApp::OnExit(), and AudacityApp::OnInit().

370 {
371  if (gPrefs) {
372  wxConfigBase::Set(NULL);
373  ugPrefs.reset();
374  gPrefs = NULL;
375  }
376 }
AudacityPrefs * gPrefs
Definition: Prefs.cpp:73
std::unordered_set< ConstBlockFilePtr > Set
Definition: UndoManager.cpp:42
std::unique_ptr< AudacityPrefs > ugPrefs
Definition: Prefs.cpp:71
void InitPreferences ( )

Definition at line 169 of file Prefs.cpp.

References _(), AUDACITY_PREFS_VERSION_STRING, AUDACITY_RELEASE, AUDACITY_REVISION, AUDACITY_VERSION, AudacityMessageBox(), FileNames::DataDir(), GetSystemLanguageCode(), AudacityApp::InitLang(), FileNames::ResourcesDir(), AudacityApp::SetVersionKeysInit(), ugPrefs, and wxGetApp().

Referenced by AudacityApp::OnInit().

170 {
171  wxString appName = wxTheApp->GetAppName();
172 
173  wxFileName configFileName(FileNames::DataDir(), wxT("audacity.cfg"));
174 
175  ugPrefs = std::make_unique<AudacityPrefs>
176  (appName, wxEmptyString,
177  configFileName.GetFullPath(),
178  wxEmptyString, wxCONFIG_USE_LOCAL_FILE);
179  gPrefs = ugPrefs.get();
180 
181  wxConfigBase::Set(gPrefs);
182 
183  bool resetPrefs = false;
184  wxString langCode = gPrefs->Read(wxT("/Locale/Language"), wxEmptyString);
185  bool writeLang = false;
186 
187  const wxFileName fn(
189  wxT("FirstTime.ini"));
190  if (fn.FileExists()) // it will exist if the (win) installer put it there
191  {
192  const wxString fullPath{fn.GetFullPath()};
193 
194  wxFileConfig ini(wxEmptyString,
195  wxEmptyString,
196  fullPath,
197  wxEmptyString,
198  wxCONFIG_USE_LOCAL_FILE);
199 
200  wxString lang;
201  if (ini.Read(wxT("/FromInno/Language"), &lang))
202  {
203  // Only change "langCode" if the language was actually specified in the ini file.
204  langCode = lang;
205  writeLang = true;
206 
207  // Inno Setup doesn't allow special characters in the Name values, so "0" is used
208  // to represent the "@" character.
209  langCode.Replace(wxT("0"), wxT("@"));
210  }
211 
212  ini.Read(wxT("/FromInno/ResetPrefs"), &resetPrefs, false);
213 
214  bool gone = wxRemoveFile(fullPath); // remove FirstTime.ini
215  if (!gone)
216  {
217  AudacityMessageBox(wxString::Format(_("Failed to remove %s"), fullPath), _("Failed!"));
218  }
219  }
220 
221  // Use the system default language if one wasn't specified or if the user selected System.
222  if (langCode.IsEmpty())
223  {
224  langCode = GetSystemLanguageCode();
225  }
226 
227  // Initialize the language
228  langCode = wxGetApp().InitLang(langCode);
229 
230  // User requested that the preferences be completely reset
231  if (resetPrefs)
232  {
233  // pop up a dialogue
234  wxString prompt = _("Reset Preferences?\n\nThis is a one-time question, after an 'install' where you asked to have the Preferences reset.");
235  int action = AudacityMessageBox(prompt, _("Reset Audacity Preferences"),
236  wxYES_NO, NULL);
237  if (action == wxYES) // reset
238  {
239  gPrefs->DeleteAll();
240  writeLang = true;
241  }
242  }
243 
244  // Save the specified language
245  if (writeLang)
246  {
247  gPrefs->Write(wxT("/Locale/Language"), langCode);
248  }
249 
250  // In AUdacity 2.1.0 support for the legacy 1.2.x preferences (depreciated since Audacity
251  // 1.3.1) is dropped. As a result we can drop the import flag
252  // first time this version of Audacity is run we try to migrate
253  // old preferences.
254  bool newPrefsInitialized = false;
255  gPrefs->Read(wxT("/NewPrefsInitialized"), &newPrefsInitialized, false);
256  if (newPrefsInitialized) {
257  gPrefs->DeleteEntry(wxT("/NewPrefsInitialized"), true); // take group as well if empty
258  }
259 
260  // record the Prefs version for future checking (this has not been used for a very
261  // long time).
262  gPrefs->Write(wxT("/PrefsVersion"), wxString(wxT(AUDACITY_PREFS_VERSION_STRING)));
263 
264  // Check if some prefs updates need to happen based on audacity version.
265  // Unfortunately we can't use the PrefsVersion prefs key because that resets things.
266  // In the future we may want to integrate that better.
267  // these are done on a case-by-case basis for now so they must be backwards compatible
268  // (meaning the changes won't mess audacity up if the user goes back to an earlier version)
269  int vMajor = gPrefs->Read(wxT("/Version/Major"), (long) 0);
270  int vMinor = gPrefs->Read(wxT("/Version/Minor"), (long) 0);
271  int vMicro = gPrefs->Read(wxT("/Version/Micro"), (long) 0);
272 
273  wxGetApp().SetVersionKeysInit(vMajor, vMinor, vMicro); // make a note of these initial values
274  // for use by ToolManager::ReadConfig()
275 
276  // These integer version keys were introduced april 4 2011 for 1.3.13
277  // The device toolbar needs to be enabled due to removal of source selection features in
278  // the mixer toolbar.
279  if ((vMajor < 1) ||
280  (vMajor == 1 && vMinor < 3) ||
281  (vMajor == 1 && vMinor == 3 && vMicro < 13)) {
282 
283 
284  // Do a full reset of the Device Toolbar to get it on the screen.
285  if (gPrefs->Exists(wxT("/GUI/ToolBars/Device")))
286  gPrefs->DeleteGroup(wxT("/GUI/ToolBars/Device"));
287 
288  // We keep the mixer toolbar prefs (shown/not shown)
289  // the width of the mixer toolbar may have shrunk, the prefs will keep the larger value
290  // if the user had a device that had more than one source.
291  if (gPrefs->Exists(wxT("/GUI/ToolBars/Mixer"))) {
292  // Use the default width
293  gPrefs->Write(wxT("/GUI/ToolBars/Mixer/W"), -1);
294  }
295  }
296 
297  // In 2.1.0, the Meter toolbar was split and lengthened, but strange arrangements happen
298  // if upgrading due to the extra length. So, if a user is upgrading, use the pre-2.1.0
299  // lengths, but still use the NEW split versions.
300  if (gPrefs->Exists(wxT("/GUI/ToolBars/Meter")) &&
301  !gPrefs->Exists(wxT("/GUI/ToolBars/CombinedMeter"))) {
302 
303  // Read in all of the existing values
304  long dock, order, show, x, y, w, h;
305  gPrefs->Read(wxT("/GUI/ToolBars/Meter/Dock"), &dock, -1);
306  gPrefs->Read(wxT("/GUI/ToolBars/Meter/Order"), &order, -1);
307  gPrefs->Read(wxT("/GUI/ToolBars/Meter/Show"), &show, -1);
308  gPrefs->Read(wxT("/GUI/ToolBars/Meter/X"), &x, -1);
309  gPrefs->Read(wxT("/GUI/ToolBars/Meter/Y"), &y, -1);
310  gPrefs->Read(wxT("/GUI/ToolBars/Meter/W"), &w, -1);
311  gPrefs->Read(wxT("/GUI/ToolBars/Meter/H"), &h, -1);
312 
313  // "Order" must be adjusted since we're inserting two NEW toolbars
314  if (dock > 0) {
315  wxString oldPath = gPrefs->GetPath();
316  gPrefs->SetPath(wxT("/GUI/ToolBars"));
317 
318  wxString bar;
319  long ndx = 0;
320  bool cont = gPrefs->GetFirstGroup(bar, ndx);
321  while (cont) {
322  long o;
323  if (gPrefs->Read(bar + wxT("/Order"), &o) && o >= order) {
324  gPrefs->Write(bar + wxT("/Order"), o + 2);
325  }
326  cont = gPrefs->GetNextGroup(bar, ndx);
327  }
328  gPrefs->SetPath(oldPath);
329 
330  // And override the height
331  h = 27;
332  }
333 
334  // Write the split meter bar values
335  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/Dock"), dock);
336  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/Order"), order);
337  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/Show"), show);
338  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/X"), -1);
339  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/Y"), -1);
340  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/W"), w);
341  gPrefs->Write(wxT("/GUI/ToolBars/RecordMeter/H"), h);
342  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/Dock"), dock);
343  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/Order"), order + 1);
344  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/Show"), show);
345  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/X"), -1);
346  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/Y"), -1);
347  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/W"), w);
348  gPrefs->Write(wxT("/GUI/ToolBars/PlayMeter/H"), h);
349 
350  // And hide the old combined meter bar
351  gPrefs->Write(wxT("/GUI/ToolBars/Meter/Dock"), -1);
352  }
353 
354  // Upgrading pre 2.2.0 configs we assume extended set of defaults.
355  if ((0<vMajor && vMajor < 2) ||
356  (vMajor == 2 && vMinor < 2))
357  {
358  gPrefs->Write(wxT("/GUI/Shortcuts/FullDefaults"),1);
359  }
360 
361  // write out the version numbers to the prefs file for future checking
362  gPrefs->Write(wxT("/Version/Major"), AUDACITY_VERSION);
363  gPrefs->Write(wxT("/Version/Minor"), AUDACITY_RELEASE);
364  gPrefs->Write(wxT("/Version/Micro"), AUDACITY_REVISION);
365 
366  gPrefs->Flush();
367 }
#define AUDACITY_REVISION
Definition: Audacity.h:65
AudacityPrefs * gPrefs
Definition: Prefs.cpp:73
int AudacityMessageBox(const wxString &message, const wxString &caption=AudacityMessageBoxCaptionStr(), long style=wxOK|wxCENTRE, wxWindow *parent=NULL, int x=wxDefaultCoord, int y=wxDefaultCoord)
Definition: ErrorDialog.h:92
#define AUDACITY_PREFS_VERSION_STRING
Definition: Audacity.h:104
#define AUDACITY_VERSION
Definition: Audacity.h:63
wxString InitLang(const wxString &lang)
#define AUDACITY_RELEASE
Definition: Audacity.h:64
_("Move Track &Down")+wxT("\t")+(GetActiveProject() -> GetCommandManager() ->GetKeyFromName(wxT("TrackMoveDown")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveTopID, _("Move Track to &Top")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveTop")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveBottomID, _("Move Track to &Bottom")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveBottom")).Raw()), OnMoveTrack)#define SET_TRACK_NAME_PLUGIN_SYMBOLclass SetTrackNameCommand:public AudacityCommand
wxString GetSystemLanguageCode()
Definition: Languages.cpp:76
static wxString ResourcesDir()
Definition: FileNames.cpp:168
std::unordered_set< ConstBlockFilePtr > Set
Definition: UndoManager.cpp:42
static wxString DataDir()
Audacity user data directory.
Definition: FileNames.cpp:130
void SetVersionKeysInit(int major, int minor, int micro)
Definition: AudacityApp.h:172
AudacityApp & wxGetApp()
std::unique_ptr< AudacityPrefs > ugPrefs
Definition: Prefs.cpp:71

Variable Documentation

int gMenusDirty = 0

Definition at line 74 of file Prefs.cpp.

AudacityPrefs* gPrefs = NULL

Definition at line 73 of file Prefs.cpp.

Referenced by AudacityProject::AddEffectMenuItemGroup(), AudacityProject::AddEffectMenuItems(), EffectTruncSilence::Analyze(), GetPreferenceCommand::Apply(), SetPreferenceCommand::Apply(), MacroCommands::ApplyMacro(), ApplyMacroDialog::ApplyMacroToProject(), AudacityProject::AS_SetSelectionFormat(), AudacityProject::AS_SetSnapTo(), AskCopyOrEdit(), AudacityProject::AudacityProject(), ProgressDialog::Beep(), ScreenshotCommand::CapturePreferences(), DeviceToolBar::ChangeDevice(), DeviceToolBar::ChangeHost(), Exporter::CheckFilename(), ExportMP3::CheckFileName(), Exporter::CheckMix(), ControlToolBar::ChooseExistingRecordingTracks(), RecordingPrefs::Commit(), GUIPrefs::Commit(), DevicePrefs::Commit(), TracksPrefs::Commit(), QualityPrefs::Commit(), KeyConfigPrefs::Commit(), ControlToolBar::ControlToolBar(), AudacityProject::CreateMenusAndCommands(), FileNames::DefaultToDocumentsFolder(), AudacityProject::DoAddLabel(), LabelTrack::DoCaptureKey(), ControlToolBar::DoRecord(), WaveTrack::DoSetMinimized(), WaveTrackVZoomHandle::DoZoom(), TrackArtist::DrawTracks(), EVT_COMMAND(), EVT_COMMAND_RANGE(), WaveTrack::ExpandCutLine(), ExportCL::Export(), ExportMP3::Export(), ExportCLOptions::ExportCLOptions(), ExportMP3Options::ExportMP3Options(), DirManager::FillBlockfilesCache(), DeviceToolBar::FillHostDevices(), DeviceToolBar::FillInputChannels(), MP3Exporter::FindLibrary(), EditToolBar::ForAllButtons(), FreqWindow::FreqWindow(), ModulePrefs::GetAllModuleStatuses(), SimpleBlockFile::GetCache(), TracksPrefs::GetDefaultAudioTrackNamePreference(), AudioIO::GetDeviceInfo(), AudacityProject::GetEstimatedRecordingMinsLeftOnDisk(), Exporter::GetFilename(), PluginManager::GetFirstPlugin(), PluginManager::GetFirstPluginForEffectType(), ModulePrefs::GetModuleStatus(), PluginManager::GetNextPlugin(), PluginManager::GetNextPluginForEffectType(), GetNextWindowPlacement(), TracksPrefs::GetPinnedHeadPreference(), AudioIO::getPlayDevIndex(), GlobalPrefsDialog::GetPreferredPage(), AudioIO::getRecordDevIndex(), AudioIO::GetSupportedCaptureRates(), WaveTrack::HandleClear(), AudioIO::HandleDeviceChange(), WaveTrackVZoomHandle::HitPreview(), Importer::Import(), AudacityProject::Import(), InitAudioIO(), AudacityApp::InitTempDir(), EffectEqualization::LoadCurves(), Tags::LoadDefaults(), ThemeBase::LoadPreferredTheme(), SpectrogramSettings::Globals::LoadPrefs(), WaveformSettings::LoadPrefs(), SpectrogramSettings::LoadPrefs(), ToolBar::MakeButtonBackgroundsLarge(), ToolBar::MakeButtonBackgroundsSmall(), AudacityProject::MayStartMonitoring(), TracksViewModeSetting::Migrate(), AudacityProject::ModifyToolbarMenus(), MP3Exporter::MP3Exporter(), CommandManager::NewIdentifier(), AudacityProject::OnAlign(), ApplyMacroDialog::OnApplyToFiles(), AdornedRulerPanel::OnAutoScroll(), PrefsDialog::OnCancel(), LabelTrack::OnChar(), DeviceToolBar::OnChoice(), SpectralSelectionBar::OnChoice(), DirectoriesPrefs::OnChooseTempDir(), BrowserDialog::OnClose(), FreqWindow::OnCloseButton(), AudacityProject::OnCut(), AudacityProject::OnCutLabels(), ScreenFrame::OnDirChoose(), SplashDialog::OnDontShow(), AudacityApp::OnExit(), ExportMultiple::OnExport(), EffectUIHost::OnFFwd(), AudacityProject::OnImport(), KeyConfigPrefs::OnImportDefaults(), AudacityApp::OnInit(), ExportMP3Options::OnMono(), AudacityProject::OnMoveSelectionWithTracks(), SoundActivatedRecord::OnOK(), PrefsDialog::OnOK(), TimerRecordDialog::OnOK(), TagsEditor::OnOk(), AudacityProject::OnPlayAfterSelectionEnd(), AudacityProject::OnPlayAfterSelectionStart(), AudacityProject::OnPlayBeforeAndAfterSelectionEnd(), AudacityProject::OnPlayBeforeAndAfterSelectionStart(), AudacityProject::OnPlayBeforeSelectionEnd(), AudacityProject::OnPlayBeforeSelectionStart(), MeterPanel::OnPreferences(), AudacityProject::OnPunchAndRoll(), ControlToolBar::OnRecord(), FreqWindow::OnReplot(), EffectUIHost::OnRewind(), BenchmarkDialog::OnRun(), TagsEditor::OnSaveDefaults(), LabelTrackMenuTable::OnSetFont(), AudacityProject::OnShowClipping(), AudacityProject::OnShowExtraMenus(), AudacityProject::OnSyncLock(), AdornedRulerPanel::OnSyncSelToQuickPlay(), AdornedRulerPanel::OnTimelineToolTips(), AudacityProject::OnTimerRecord(), AudacityProject::OnTogglePlayRecording(), AdornedRulerPanel::OnToggleQuickPlay(), AdornedRulerPanel::OnToggleScrubRuler(), AudacityProject::OnToggleSoundActivated(), AudacityProject::OnToggleSWPlaythrough(), AudacityProject::OnToggleTypeToCreateLabel(), ToolsToolBar::OnTool(), AudacityProject::OpenFile(), AudacityProject::OpenFiles(), WaveTrack::Paste(), ControlToolBar::PlayPlayRegion(), DevicePrefs::Populate(), SplashDialog::Populate(), SpectralSelectionBar::Populate(), QualityPrefs::Populate(), ApplyMacroDialog::Populate(), MacrosWindow::Populate(), ControlToolBar::Populate(), AudacityProject::PopulateEffectsMenu(), RecordingPrefs::PopulateOrExchange(), SoundActivatedRecord::PopulateOrExchange(), ScreenFrame::PopulateOrExchange(), TimerRecordDialog::PopulateOrExchange(), ExportMultiple::PopulateOrExchange(), ExportMP3Options::PopulateOrExchange(), PrefsDialog::PrefsDialog(), EffectNoiseReduction::Settings::PrefsIO(), Effect::Preview(), Generator::Process(), NyquistEffect::Process(), EffectPaulstretch::ProcessOne(), Effect::ProcessTrack(), ToolBarConfiguration::Read(), ToolManager::ReadConfig(), ReadExportFormatPref(), ThemeBase::ReadImageCache(), Importer::ReadImportItems(), LabelDialog::ReadSize(), RecordingPrefs::RecordingPrefs(), ControlToolBar::RegenerateTooltips(), LabelStruct::RegionRelation(), WaveTrackVZoomHandle::Release(), MacroCommands::ReportAndSkip(), LabelTrack::ResetFont(), AudacityProject::SaveAs(), MacrosWindow::SaveChanges(), DependencyDialog::SaveFutureActionChoice(), GlobalPrefsDialog::SavePreferredPage(), SpectrogramSettings::Globals::SavePrefs(), WaveformSettings::SavePrefs(), SpectrogramSettings::SavePrefs(), SaveWindowSize(), SelectionBar::SelectionBar(), SelectionBar::SelectionModeUpdated(), ToolsToolBar::SetCurrentTool(), DeviceToolBar::SetDevices(), CommandManager::SetMaxList(), ModulePrefs::SetModuleStatus(), ExportMP3::SetNumExportChannels(), TracksPrefs::SetPinnedHeadPreference(), FreqWindow::Show(), ShowDependencyDialogIfNeeded(), HelpSystem::ShowHelp(), AudacityProject::ShowOpenDialog(), ShowWarningDialog(), AudacityProject::SSBL_SetBandwidthSelectionFormatName(), AudacityProject::SSBL_SetFrequencySelectionFormatName(), AudioIO::StartMonitoring(), AudioIO::StartPortAudioStream(), ControlToolBar::StartScrolling(), AudioIO::StartStream(), EffectNormalize::Startup(), EffectNoise::Startup(), EffectAutoDuck::Startup(), EffectClickRemoval::Startup(), EffectDtmf::Startup(), EffectChangeSpeed::Startup(), EffectCompressor::Startup(), EffectTruncSilence::Startup(), EffectScienFilter::Startup(), EffectReverb::Startup(), EffectEqualization::Startup(), WaveTrack::SyncLockAdjust(), TagsEditor::TagsEditor(), FileNames::TempDir(), TimerRecordDialog::TimerRecordDialog(), ShuttlePrefs::TransferBool(), ExportCLOptions::TransferDataFromWindow(), TimerRecordDialog::TransferDataFromWindow(), ExportPCMOptions::TransferDataFromWindow(), ExportMP3Options::TransferDataFromWindow(), ShuttlePrefs::TransferDouble(), ShuttlePrefs::TransferInt(), ShuttlePrefs::TransferString(), EffectEqualization::UpdateDefaultCurves(), FileNames::UpdateDefaultPath(), DeviceToolBar::UpdatePrefs(), ZoomInfo::UpdatePrefs(), SelectionBar::UpdatePrefs(), ControlToolBar::UpdatePrefs(), TrackArtist::UpdatePrefs(), MeterPanel::UpdatePrefs(), ViewInfo::UpdatePrefs(), TrackPanel::UpdatePrefs(), AdornedRulerPanel::UpdatePrefs(), AudacityProject::UpdatePrefs(), AudacityProject::UpdatePrefsVariables(), ControlToolBar::UseDuplex(), DirectoriesPrefs::Validate(), ToolBarConfiguration::Write(), ToolManager::WriteConfig(), WriteExportFormatPref(), Importer::WriteImportItems(), MacroCommands::WriteMp3File(), and LabelDialog::WriteSize().

std::unique_ptr<AudacityPrefs> ugPrefs {}

Definition at line 71 of file Prefs.cpp.

Referenced by FinishPreferences(), and InitPreferences().