Audacity  3.0.3
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
PrefsDialog Class Referenceabstract

Dialog that shows the current PrefsPanel in a tabbed divider. More...

#include <PrefsDialog.h>

Inheritance diagram for PrefsDialog:
[legend]
Collaboration diagram for PrefsDialog:
[legend]

Public Member Functions

 PrefsDialog (wxWindow *parent, AudacityProject *pProject, const TranslatableString &titlePrefix=XO("Preferences:"), PrefsPanel::Factories &factories=PrefsPanel::DefaultFactories())
 
virtual ~PrefsDialog ()
 
int ShowModal () override
 
void ShuttleAll (ShuttleGui &S)
 
void OnCategoryChange (wxCommandEvent &e)
 
void OnOK (wxCommandEvent &e)
 
void OnCancel (wxCommandEvent &e)
 
void OnPreview (wxCommandEvent &e)
 
void OnHelp (wxCommandEvent &e)
 
void OnTreeKeyDown (wxTreeEvent &e)
 
void SelectPageByName (const wxString &pageName)
 
int GetSelectedPage () const
 
- Public Member Functions inherited from wxDialogWrapper
 wxDialogWrapper ()
 
 wxDialogWrapper (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
bool Create (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
void SetTitle (const TranslatableString &title)
 
void SetLabel (const TranslatableString &title)
 
void SetName (const TranslatableString &title)
 
void SetName ()
 
- Public Member Functions inherited from wxTabTraversalWrapper< wxDialog >
 wxTabTraversalWrapper (Args &&... args)
 
 wxTabTraversalWrapper (const wxTabTraversalWrapper &)=delete
 
 wxTabTraversalWrapper (wxTabTraversalWrapper &&)=delete
 
wxTabTraversalWrapperoperator= (const wxTabTraversalWrapper &)=delete
 
wxTabTraversalWrapperoperator= (wxTabTraversalWrapper &&)=delete
 

Protected Member Functions

virtual long GetPreferredPage ()=0
 
virtual void SavePreferredPage ()=0
 

Private Member Functions

void RecordExpansionState ()
 
PrefsPanelGetCurrentPanel ()
 

Private Attributes

wxTreebookmCategories {}
 
PrefsPanelmUniquePage {}
 
PrefsPanel::FactoriesmFactories
 
const TranslatableString mTitlePrefix
 

Detailed Description

Dialog that shows the current PrefsPanel in a tabbed divider.

Definition at line 33 of file PrefsDialog.h.

Constructor & Destructor Documentation

◆ PrefsDialog()

PrefsDialog::PrefsDialog ( wxWindow *  parent,
AudacityProject pProject,
const TranslatableString titlePrefix = XO("Preferences:"),
PrefsPanel::Factories factories = PrefsPanel::DefaultFactories() 
)

Definition at line 446 of file PrefsDialog.cpp.

450 : wxDialogWrapper(parent, wxID_ANY, XO("Audacity Preferences"),
451  wxDefaultPosition,
452  wxDefaultSize,
453  wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
454 , mFactories(factories)
455 , mTitlePrefix(titlePrefix)
456 {
457  wxASSERT(factories.size() > 0);
458  const bool uniquePage = (factories.size() == 1);
459  SetLayoutDirection(wxLayout_LeftToRight);
460 
461  ShuttleGui S(this, eIsCreating);
462 
463  S.StartVerticalLay(true);
464  {
465  wxASSERT(factories.size() > 0);
466  if (!uniquePage) {
467  mCategories = safenew wxTreebookExt(S.GetParent(), wxID_ANY, mTitlePrefix);
468 #if wxUSE_ACCESSIBILITY
469  // so that name can be set on a standard control
470  mCategories->GetTreeCtrl()->SetAccessible(
471  safenew TreeCtrlAx(mCategories->GetTreeCtrl()));
472 #endif
473  // RJH: Prevent NVDA from reading "treeCtrl"
474  mCategories->GetTreeCtrl()->SetName(_("Category"));
475  S.StartHorizontalLay(wxALIGN_LEFT | wxEXPAND, true);
476  {
477  S.Prop(1)
478  .Position(wxEXPAND)
479  .AddWindow(mCategories);
480 
481  {
482  typedef std::pair<int, int> IntPair;
483  std::vector<IntPair> stack;
484  int iPage = 0;
485  for (auto it = factories.begin(), end = factories.end();
486  it != end; ++it, ++iPage)
487  {
488  const auto &node = *it;
489  const auto &factory = node.factory;
490  wxWindow *const w = factory(mCategories, wxID_ANY, pProject);
491  if (stack.empty())
492  // Parameters are: AddPage(page, name, IsSelected, imageId).
493  mCategories->AddPage(w, w->GetName(), false, 0);
494  else {
495  IntPair &top = *stack.rbegin();
496  mCategories->InsertSubPage(top.first, w, w->GetName(), false, 0);
497  if (--top.second == 0) {
498  // Expand all nodes before the layout calculation
499  mCategories->ExpandNode(top.first, true);
500  stack.pop_back();
501  }
502  }
503  if (node.nChildren > 0)
504  stack.push_back(IntPair(iPage, node.nChildren));
505  }
506  }
507  }
508  S.EndHorizontalLay();
509  }
510  else {
511  // TODO: Look into getting rid of mUniquePage and instead
512  // adding into mCategories, so there is just one page in mCategories.
513  // And then hiding the treebook.
514 
515  // Unique page, don't show the factory
516  const auto &node = factories[0];
517  const auto &factory = node.factory;
518  mUniquePage = factory(S.GetParent(), wxID_ANY, pProject);
519  wxWindow * uniquePageWindow = S.Prop(1)
520  .Position(wxEXPAND)
521  .AddWindow(mUniquePage);
522  // We're not in the wxTreebook, so add the accelerator here
523  wxAcceleratorEntry entries[1];
524 #if defined(__WXMAC__)
525  // Is there a standard shortcut on Mac?
526 #else
527  entries[0].Set(wxACCEL_NORMAL, (int) WXK_F1, wxID_HELP);
528 #endif
529  wxAcceleratorTable accel(1, entries);
530  uniquePageWindow->SetAcceleratorTable(accel);
531  }
532  }
533  S.EndVerticalLay();
534 
535  S.AddStandardButtons(eOkButton | eCancelButton | ePreviewButton | eHelpButton);
536 
538  wxWindow *const previewButton =
539  wxWindow::FindWindowById(wxID_PREVIEW, GetParent());
540  previewButton->Show(false);
541  }
542 
543 #if defined(__WXGTK__)
544  if (mCategories)
545  mCategories->GetTreeCtrl()->EnsureVisible(mCategories->GetTreeCtrl()->GetRootItem());
546 #endif
547 
548 // mCategories->SetMaxSize({ 790, 600 }); // 790 = 800 - (border * 2)
549  Layout();
550  Fit();
551  wxSize sz = GetSize();
552 
553  // Collapse nodes only after layout so the tree is wide enough
554  if (mCategories)
555  {
556  int iPage = 0;
557  for (auto it = factories.begin(), end = factories.end();
558  it != end; ++it, ++iPage)
559  mCategories->ExpandNode(iPage, it->expanded);
560  }
561 
562  // This ASSERT was originally used to limit us to 800 x 600.
563  // However, the range of screen sizes and dpi of modern (2018) displays
564  // makes pixel dimensions an inadequate measure of usability, so
565  // now we only ASSERT that preferences will fit in the client display
566  // rectangle of the developer / tester's monitor.
567  // Use scrollers when necessary to ensure that preference pages will
568  // be fully visible.
569  wxRect screenRect(wxGetClientDisplayRect());
570  wxASSERT_MSG(sz.x <= screenRect.width && sz.y <= screenRect.height, wxT("Preferences dialog exceeds max size"));
571 
572  sz.DecTo(screenRect.GetSize());
573 
574  if( !mUniquePage ){
575  int prefWidth, prefHeight;
576  gPrefs->Read(wxT("/Prefs/Width"), &prefWidth, sz.x);
577  gPrefs->Read(wxT("/Prefs/Height"), &prefHeight, wxMax(480,sz.y));
578 
579  wxSize prefSize = wxSize(prefWidth, prefHeight);
580  prefSize.DecTo(screenRect.GetSize());
581  SetSize(prefSize);
582  InvalidateBestSize();
583  Layout();
584  }
585  SetMinSize(sz);
586 
587  // Center after all that resizing, but make sure it doesn't end up
588  // off-screen
589  CentreOnParent();
590 }

References _, ShuttleGui::AddStandardButtons(), ShuttleGuiBase::AddWindow(), eCancelButton, eHelpButton, eIsCreating, ShuttleGuiBase::EndHorizontalLay(), ShuttleGuiBase::EndVerticalLay(), entries, eOkButton, ePreviewButton, factory, ShuttleGuiBase::GetParent(), gPrefs, mCategories, mTitlePrefix, mUniquePage, ShuttleGui::Position(), ShuttleGui::Prop(), safenew, PrefsPanel::ShowsPreviewButton(), ShuttleGuiBase::StartHorizontalLay(), and ShuttleGuiBase::StartVerticalLay().

Referenced by anonymous_namespace{SpectrumView.cpp}::SpectrogramSettingsHandler::OnSpectrogramSettings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~PrefsDialog()

PrefsDialog::~PrefsDialog ( )
virtual

Definition at line 592 of file PrefsDialog.cpp.

593 {
594 }

Member Function Documentation

◆ GetCurrentPanel()

PrefsPanel * PrefsDialog::GetCurrentPanel ( )
private

Definition at line 642 of file PrefsDialog.cpp.

643 {
644  if( mCategories)
645  return static_cast<PrefsPanel*>(mCategories->GetCurrentPage());
646  else
647  {
648  wxASSERT( mUniquePage );
649  return mUniquePage;
650  }
651 }

References mCategories, and mUniquePage.

Referenced by OnHelp(), and OnPreview().

Here is the caller graph for this function:

◆ GetPreferredPage()

virtual long PrefsDialog::GetPreferredPage ( )
protectedpure virtual

Implemented in GlobalPrefsDialog.

Referenced by anonymous_namespace{SpectrumView.cpp}::SpectrogramSettingsHandler::OnSpectrogramSettings(), and ShowModal().

Here is the caller graph for this function:

◆ GetSelectedPage()

int PrefsDialog::GetSelectedPage ( ) const

Definition at line 797 of file PrefsDialog.cpp.

798 {
799  if (mCategories)
800  return mCategories->GetSelection();
801  else
802  return 0;
803 }

References mCategories.

Referenced by GlobalPrefsDialog::SavePreferredPage().

Here is the caller graph for this function:

◆ OnCancel()

void PrefsDialog::OnCancel ( wxCommandEvent &  e)

Definition at line 619 of file PrefsDialog.cpp.

620 {
622 
623  if (mCategories) {
624  for (size_t i = 0; i < mCategories->GetPageCount(); i++) {
625  ((PrefsPanel *)mCategories->GetPage(i))->Cancel();
626  }
627  }
628  else
629  mUniquePage->Cancel();
630 
631  // Remember modified dialog size, even if cancelling.
632  if( !mUniquePage ){
633  wxSize sz = GetSize();
634  gPrefs->Write(wxT("/Prefs/Width"), sz.x);
635  gPrefs->Write(wxT("/Prefs/Height"), sz.y);
636  }
637  gPrefs->Flush();
638 
639  EndModal(false);
640 }

References PrefsPanel::Cancel(), FileConfig::Flush(), gPrefs, mCategories, mUniquePage, and RecordExpansionState().

Here is the call graph for this function:

◆ OnCategoryChange()

void PrefsDialog::OnCategoryChange ( wxCommandEvent &  e)

◆ OnHelp()

void PrefsDialog::OnHelp ( wxCommandEvent &  e)

Definition at line 658 of file PrefsDialog.cpp.

659 {
660  const auto &page = GetCurrentPanel()->HelpPageName();
661  HelpSystem::ShowHelp(this, page, true);
662 }

References GetCurrentPanel(), PrefsPanel::HelpPageName(), and HelpSystem::ShowHelp().

Here is the call graph for this function:

◆ OnOK()

void PrefsDialog::OnOK ( wxCommandEvent &  e)

Definition at line 689 of file PrefsDialog.cpp.

690 {
692 
693  // Validate all pages first
694  if (mCategories) {
695  for (size_t i = 0; i < mCategories->GetPageCount(); i++) {
696  PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i);
697 
698  // The dialog doesn't end until all the input is valid
699  if (!panel->Validate()) {
700  mCategories->SetSelection(i);
701  return;
702  }
703  }
704  }
705  else {
706  if (!mUniquePage->Validate())
707  return;
708  }
709 
710  // flush now so toolbars will know their position.
711  gPrefs->Flush();
712  if (mCategories) {
713  // Now apply the changes
714  // Reverse order - so Track Name is updated before language change
715  // A workaround for Bug 1661
716  for (int i = (int)mCategories->GetPageCount()-1; i>= 0; i--) {
717  PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i);
718 
719  panel->Preview();
720  panel->Commit();
721  }
722  }
723  else {
724  mUniquePage->Preview();
725  mUniquePage->Commit();
726  }
727 
728  if( !mUniquePage ){
729  wxSize sz = GetSize();
730  gPrefs->Write(wxT("/Prefs/Width"), sz.x);
731  gPrefs->Write(wxT("/Prefs/Height"), sz.y);
732  }
733  gPrefs->Flush();
734 
736 
737 #if USE_PORTMIXER
738  auto gAudioIO = AudioIOBase::Get();
739  if (gAudioIO) {
740  // We cannot have opened this dialog if gAudioIO->IsAudioTokenActive(),
741  // per the setting of AudioIONotBusyFlag and AudioIOBusyFlag in
742  // AudacityProject::GetUpdateFlags().
743  // However, we can have an invalid audio token (so IsAudioTokenActive()
744  // is false), but be monitoring.
745  // If monitoring, have to stop the stream, so HandleDeviceChange() can work.
746  // We could disable the Preferences command while monitoring, i.e.,
747  // set AudioIONotBusyFlag/AudioIOBusyFlag according to monitoring, as well.
748  // Instead allow it because unlike recording, for example, monitoring
749  // is not clearly something that should prohibit opening prefs.
750  // TODO: We *could* be smarter in this method and call HandleDeviceChange()
751  // only when the device choices actually changed. True of lots of prefs!
752  // As is, we always stop monitoring before handling the device change.
753  if (gAudioIO->IsMonitoring())
754  {
755  gAudioIO->StopStream();
756  while (gAudioIO->IsBusy())
757  wxMilliSleep(100);
758  }
759  gAudioIO->HandleDeviceChange();
760  }
761 #endif
762 
763  // PRL: Is the following concern still valid, now that prefs update is
764  // handled instead by delayed event processing?
765 
766  // LL: wxMac can't handle recreating the menus when this dialog is still active,
767  // so AudacityProject::UpdatePrefs() or any of the routines it calls must
768  // not cause MenuCreator::RebuildMenuBar() to be executed.
769 
771 
772  if( IsModal() )
773  EndModal(true);
774  else
775  Destroy();
776 }

References PrefsListener::Broadcast(), PrefsPanel::Commit(), FileConfig::Flush(), AudioIOBase::Get(), gPrefs, mCategories, mUniquePage, PrefsPanel::Preview(), RecordExpansionState(), and SavePreferredPage().

Referenced by DoReloadPreferences(), and OnTreeKeyDown().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnPreview()

void PrefsDialog::OnPreview ( wxCommandEvent &  e)

Definition at line 653 of file PrefsDialog.cpp.

654 {
656 }

References GetCurrentPanel(), and PrefsPanel::Preview().

Here is the call graph for this function:

◆ OnTreeKeyDown()

void PrefsDialog::OnTreeKeyDown ( wxTreeEvent &  e)

Definition at line 681 of file PrefsDialog.cpp.

682 {
683  if(event.GetKeyCode() == WXK_RETURN)
684  OnOK(event);
685  else
686  event.Skip(); // Ensure standard behavior when enter is not pressed
687 }

References OnOK().

Here is the call graph for this function:

◆ RecordExpansionState()

void PrefsDialog::RecordExpansionState ( )
private

Definition at line 828 of file PrefsDialog.cpp.

829 {
830  // Remember expansion state of the tree control
831  if (mCategories)
832  {
833  int iPage = 0;
834  for (auto it = mFactories.begin(), end = mFactories.end();
835  it != end; ++it, ++iPage)
836  it->expanded = mCategories->IsNodeExpanded(iPage);
837  }
838  else
839  mFactories[0].expanded = true;
840 }

References mCategories, and mFactories.

Referenced by OnCancel(), and OnOK().

Here is the caller graph for this function:

◆ SavePreferredPage()

virtual void PrefsDialog::SavePreferredPage ( )
protectedpure virtual

Implemented in GlobalPrefsDialog.

Referenced by OnOK(), anonymous_namespace{SpectrumView.cpp}::SpectrogramSettingsHandler::OnSpectrogramSettings(), and SelectPageByName().

Here is the caller graph for this function:

◆ SelectPageByName()

void PrefsDialog::SelectPageByName ( const wxString &  pageName)

Definition at line 778 of file PrefsDialog.cpp.

779 {
780  if (mCategories) {
781  size_t n = mCategories->GetPageCount();
782 
783  for (size_t i = 0; i < n; i++) {
784  if (mCategories->GetPageText(i) == pageName) {
785  mCategories->SetSelection(i);
786  // This covers the case, when ShowModal is called
787  // after selecting the page.
788  // ShowModal will select the page previously used by
789  // user
791  return;
792  }
793  }
794  }
795 }

References mCategories, and SavePreferredPage().

Referenced by NoUpdatesAvailableDialog::NoUpdatesAvailableDialog(), UnwritableLocationErrorDialog::UnwritableLocationErrorDialog(), and UpdateNoticeDialog::UpdateNoticeDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ShowModal()

int PrefsDialog::ShowModal ( )
override

Definition at line 596 of file PrefsDialog.cpp.

597 {
598  if (mCategories) {
599  /* long is signed, size_t is unsigned. On some platforms they are different
600  * lengths as well. So we must check that the stored category is both > 0
601  * and within the possible range of categories, making the first check on the
602  * _signed_ value to avoid issues when converting an unsigned one.
603  */
604  long selected = GetPreferredPage();
605  if (selected < 0 || size_t(selected) >= mCategories->GetPageCount())
606  selected = 0; // clamp to available range of tabs
607  mCategories->SetSelection(selected);
608  }
609  else {
610  auto Temp = mTitlePrefix;
611  Temp.Join( Verbatim( mUniquePage->GetLabel() ), wxT(" ") );
612  SetTitle(Temp);
613  SetName(Temp);
614  }
615 
616  return wxDialogWrapper::ShowModal();
617 }

References GetPreferredPage(), TranslatableString::Join(), mCategories, mTitlePrefix, mUniquePage, wxDialogWrapper::SetName(), wxDialogWrapper::SetTitle(), and Verbatim().

Referenced by AudacityApp::InitPart2(), AudacityApp::InitTempDir(), NoUpdatesAvailableDialog::NoUpdatesAvailableDialog(), AudacityApp::OnMenuPreferences(), EditActions::Handler::OnPreferences(), UnwritableLocationErrorDialog::UnwritableLocationErrorDialog(), and UpdateNoticeDialog::UpdateNoticeDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ShuttleAll()

void PrefsDialog::ShuttleAll ( ShuttleGui S)

Definition at line 664 of file PrefsDialog.cpp.

665 {
666  // Validate all pages first
667  if (mCategories) {
668  for (size_t i = 0; i < mCategories->GetPageCount(); i++) {
669  S.ResetId();
670  PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i);
671  panel->PopulateOrExchange( S );
672  }
673  }
674  else
675  {
676  S.ResetId();
678  }
679 }

References mCategories, mUniquePage, PrefsPanel::PopulateOrExchange(), and ShuttleGuiBase::ResetId().

Referenced by GetInfoCommand::SendPreferences().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ mCategories

wxTreebook* PrefsDialog::mCategories {}
private

◆ mFactories

PrefsPanel::Factories& PrefsDialog::mFactories
private

Definition at line 72 of file PrefsDialog.h.

Referenced by RecordExpansionState().

◆ mTitlePrefix

const TranslatableString PrefsDialog::mTitlePrefix
private

Definition at line 73 of file PrefsDialog.h.

Referenced by PrefsDialog(), and ShowModal().

◆ mUniquePage

PrefsPanel* PrefsDialog::mUniquePage {}
private

Definition at line 71 of file PrefsDialog.h.

Referenced by GetCurrentPanel(), OnCancel(), OnOK(), PrefsDialog(), ShowModal(), and ShuttleAll().


The documentation for this class was generated from the following files:
eIsCreating
@ eIsCreating
Definition: ShuttleGui.h:38
PrefsDialog::GetPreferredPage
virtual long GetPreferredPage()=0
entries
static ProjectFileIORegistry::AttributeReaderEntries entries
Definition: ProjectSettings.cpp:210
gPrefs
FileConfig * gPrefs
Definition: Prefs.cpp:70
eHelpButton
@ eHelpButton
Definition: ShuttleGui.h:604
ePreviewButton
@ ePreviewButton
Definition: ShuttleGui.h:605
PrefsPanel::HelpPageName
virtual ManualPageID HelpPageName()
If not empty string, the Help button is added below the panel.
Definition: PrefsPanel.cpp:98
PrefsPanel::PopulateOrExchange
virtual void PopulateOrExchange(ShuttleGui &WXUNUSED(S))
Definition: PrefsPanel.h:116
XO
#define XO(s)
Definition: Internat.h:31
PrefsDialog::mCategories
wxTreebook * mCategories
Definition: PrefsDialog.h:70
HelpSystem::ShowHelp
static void ShowHelp(wxWindow *parent, const FilePath &localFileName, const URLString &remoteURL, bool bModal=false, bool alwaysDefaultBrowser=false)
Definition: HelpSystem.cpp:237
PrefsListener::Broadcast
static void Broadcast(int id=0)
Call this static function to notify all PrefsListener objects.
Definition: Prefs.cpp:100
PrefsPanel::Preview
virtual void Preview()
Definition: PrefsPanel.h:101
PrefsPanel::Commit
virtual bool Commit()=0
PrefsPanel::ShowsPreviewButton
virtual bool ShowsPreviewButton()
Definition: PrefsPanel.cpp:93
eCancelButton
@ eCancelButton
Definition: ShuttleGui.h:601
factory
static RegisteredToolbarFactory factory
Definition: ControlToolBar.cpp:817
PrefsDialog::OnOK
void OnOK(wxCommandEvent &e)
Definition: PrefsDialog.cpp:689
BasicUI::MessageBoxResult::Cancel
@ Cancel
PrefsDialog::GetCurrentPanel
PrefsPanel * GetCurrentPanel()
Definition: PrefsDialog.cpp:642
ShuttleGuiBase::ResetId
void ResetId()
Definition: ShuttleGui.cpp:188
AudioIOBase::Get
static AudioIOBase * Get()
Definition: AudioIOBase.cpp:89
FileConfig::Flush
virtual bool Flush(bool bCurrentOnly=false) wxOVERRIDE
Definition: FileConfig.cpp:143
eOkButton
@ eOkButton
Definition: ShuttleGui.h:600
_
#define _(s)
Definition: Internat.h:75
PrefsPanel::Cancel
virtual void Cancel()
Definition: PrefsPanel.cpp:89
PrefsDialog::mTitlePrefix
const TranslatableString mTitlePrefix
Definition: PrefsDialog.h:73
Verbatim
TranslatableString Verbatim(wxString str)
Require calls to the one-argument constructor to go through this distinct global function name.
Definition: TranslatableString.h:321
wxDialogWrapper::wxDialogWrapper
wxDialogWrapper()
Definition: wxPanelWrapper.h:84
wxDialogWrapper::SetTitle
void SetTitle(const TranslatableString &title)
Definition: wxPanelWrapper.cpp:66
PrefsDialog::RecordExpansionState
void RecordExpansionState()
Definition: PrefsDialog.cpp:828
PrefsPanel
Base class for a panel in the PrefsDialog. Classes derived from this class include BatchPrefs,...
Definition: PrefsPanel.h:51
PrefsDialog::mFactories
PrefsPanel::Factories & mFactories
Definition: PrefsDialog.h:72
wxDialogWrapper::SetName
void SetName()
Definition: wxPanelWrapper.cpp:81
TranslatableString::Join
TranslatableString & Join(TranslatableString arg, const wxString &separator={}) &
Append another translatable string.
Definition: TranslatableString.cpp:124
safenew
#define safenew
Definition: MemoryX.h:10
PrefsDialog::SavePreferredPage
virtual void SavePreferredPage()=0
PrefsDialog::mUniquePage
PrefsPanel * mUniquePage
Definition: PrefsDialog.h:71
ShuttleGui
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:631