Audacity 3.2.0
PrefsPanel.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3Audacity: A Digital Audio Editor
4
5PrefsPanel.cpp
6
7Paul Licameli split from PrefsDialog.cpp
8
9**********************************************************************/
10
11#include "PrefsPanel.h"
12#include <mutex>
13
14static const auto PathStart = L"Preferences";
15
17{
18 static Registry::GroupItem<> registry{ PathStart };
19 return registry;
20}
21
23 const PrefsPanel::Factory &factory, bool expanded
24) : GroupItem{ name }
25 , factory{ factory }
26 , expanded{ expanded }
27{}
28
29// Collects registry tree nodes into a vector, in preorder.
32 : factories{ factories_ }
33 {
34 childCounts.push_back( 0 );
35 }
36 void BeginGroup( Registry::GroupItemBase &item, const Path & ) override
37 {
38 auto pItem = dynamic_cast<PrefsItem*>( &item );
39 if (!pItem || !pItem->factory)
40 return;
41 indices.push_back( factories.size() );
42 factories.emplace_back( pItem->factory, 0, pItem->expanded );
43 ++childCounts.back();
44 childCounts.push_back( 0 );
45 }
46 void EndGroup( Registry::GroupItemBase &item, const Path & ) override
47 {
48 auto pItem = dynamic_cast<PrefsItem*>( &item );
49 if (!pItem || !pItem->factory)
50 return;
51 auto &factory = factories[ indices.back() ];
52 factory.nChildren = childCounts.back();
53 childCounts.pop_back();
54 indices.pop_back();
55 }
56
58 std::vector<size_t> childCounts;
59 std::vector<size_t> indices;
60};
61
64
66{ return XO("Audacity");}
67
68wxString PrefsPanel::GetVersion() const
69{ return AUDACITY_VERSION_STRING;}
70
72 const Factory &factory, bool expanded,
73 const Registry::Placement &placement )
74 : RegisteredItem{
75 std::make_unique< PrefsItem >( name, factory, expanded ), placement }
76{
77}
78
80{
81}
82
84{
85}
86
88{
89 return false;
90}
91
93{
94 return {};
95}
96
99{
100 // Once only, cause initial population of preferences for the ordering
101 // of some preference pages that used to be given in a table but are now
102 // separately registered in several .cpp files; the sequence of registration
103 // depends on unspecified accidents of static initialization order across
104 // compilation units, so we need something specific here to preserve old
105 // default appearance of the preference dialog.
106 // But this needs only to mention some strings -- there is no compilation or
107 // link dependency of this source file on those other implementation files.
109 PathStart,
110 {
111 {wxT(""),
112 wxT("Device,Playback,Recording,Quality,GUI,Tracks,ImportExport,Directories,Warnings,Effects,KeyConfig,Mouse")
113 },
114 {wxT("/Tracks"), wxT("TracksBehaviors,Spectrum")},
115 }
116 };
117
118 static Factories factories;
119 static std::once_flag flag;
120
121 std::call_once( flag, []{
122 PrefsItem::Visitor visitor{ factories };
124 Registry::Visit( visitor, &top, &PrefsItem::Registry() );
125 } );
126 return factories;
127}
wxT("CloseDown"))
const TranslatableString name
Definition: Distortion.cpp:76
XO("Cut/Copy/Paste")
wxString PluginPath
type alias for identifying a Plugin supplied by a module, each module defining its own interpretation...
Definition: Identifier.h:214
static const auto PathStart
Definition: PrefsPanel.cpp:14
#define BUILTIN_PREFS_PANEL_PREFIX
Definition: PrefsPanel.h:38
static std::once_flag flag
virtual ComponentInterfaceSymbol GetSymbol() const =0
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
const wxString & Internal() const
virtual ManualPageID HelpPageName()
If not empty string, the Help button is added below the panel.
Definition: PrefsPanel.cpp:92
std::function< PrefsPanel *(wxWindow *parent, wxWindowID winid, AudacityProject *) > Factory
Definition: PrefsPanel.h:82
virtual bool ShowsPreviewButton()
Definition: PrefsPanel.cpp:87
virtual VendorSymbol GetVendor() const override
Definition: PrefsPanel.cpp:65
virtual wxString GetVersion() const override
Definition: PrefsPanel.cpp:68
virtual void Cancel()
Definition: PrefsPanel.cpp:83
virtual ~PrefsPanel()
Definition: PrefsPanel.cpp:79
static Factories & DefaultFactories()
Definition: PrefsPanel.cpp:98
std::vector< PrefsPanel::PrefsNode > Factories
Definition: PrefsPanel.h:72
virtual PluginPath GetPath() const override
Definition: PrefsPanel.cpp:62
std::vector< Identifier > Path
Definition: Registry.h:259
void Visit(Visitor &visitor, BaseItem *pTopItem, const GroupItemBase *pRegistry)
Definition: Registry.cpp:737
static RegisteredToolbarFactory factory
STL namespace.
void BeginGroup(Registry::GroupItemBase &item, const Path &) override
Definition: PrefsPanel.cpp:36
std::vector< size_t > indices
Definition: PrefsPanel.cpp:59
void EndGroup(Registry::GroupItemBase &item, const Path &) override
Definition: PrefsPanel.cpp:46
PrefsPanel::Factories & factories
Definition: PrefsPanel.cpp:57
Visitor(PrefsPanel::Factories &factories_)
Definition: PrefsPanel.cpp:31
std::vector< size_t > childCounts
Definition: PrefsPanel.cpp:58
PrefsPanel::Factory factory
Definition: PrefsPanel.h:130
PrefsItem(const wxString &name, const PrefsPanel::Factory &factory, bool expanded)
Definition: PrefsPanel.cpp:22
static Registry::GroupItemBase & Registry()
Definition: PrefsPanel.cpp:16
Registration(const wxString &name, const Factory &factory, bool expanded=true, const Registry::Placement &placement={ wxEmptyString, {} })
Definition: PrefsPanel.cpp:71
Common abstract base class for items that group other items.
Definition: Registry.h:130