One tricky aspect was that until GetActiveProject() is ready to return non-NULL, ControlToolBar::RegenerateToolsTooltips() cannot get the project's CommandManager, so cannot get the shortcuts. Changed ControlToolBar::RegenerateToolsTooltips() to be public and now call it late in wAudacityProject(). When called before the project is completely instantiated, in the rewritten ControlToolBar::RegenerateToolsTooltips(), it just sets the tooltips to the names without the keys, pretty much as now -- but I don't think users will ever see that because of the subsequent call.
Anyway, did it in a more programmatic way than the previous code, which reduces string literals duplication.
Btw, I changed the start value for the ID_PLAY_BUTTON because the former value of 0 causes FindWindow() to return the toolbar rather than the button -- wxWidgets bug.
Also got rid of some cruft and applied a few WXUNUSED.
* "Open Me&tadata Editor..." -> "Edit Me&tadata..." because it's more concise, matches other occurrences, and eliminates any confusion about file opening.
* In AudacityProject::OnEditMetadata(), "Edit the metadata tags" -> "Edit Metadata Tags": more concise, and brings in line with capitalization standard for dialog titles.
* Likewise for capitalization in other invocations of ShowEditDialog in ExportMultiple.
* In TagsEditor::PopulateOrExchange(), "RETURN key" -> "ENTER key" because I don't recall ever seeing a Return key on a comnputer (!).
Fixed some weird layout issues due to ShuttleGui misuse.
Fixed some SetName cut/paste errors (e.g., it used to say "To frequency in seconds" !).
Fixed rounding direction in PitchOctave() for negative MIDI notes.
Fixed a comment in ShuttleGui.cpp.
* from and to octave spin controls and cross-updating
* new conversion utilities in PitchName.*
* code simplification, new documentation
* stop a few compiler warnings in FreqWindow.cpp on unused params
Anything to do with modules and prefs is currently under EXPERIMENTAL_MODULE_PREFS and turned off.
We never load 'out of date' modules (but do allow modules to interrogate the current prefs and 'pretend' they are that version. The 'Aurora' plug-ins do that).
If a module is 'out of date' we provide the name in a user-facing message and actual location in the log, just in case the user has a number of versions in different places (untested).
We currently don't remember the users preference for loading each module, but could extend this. We would need an extra button in the ShowMultiDialog of ModuleManager::Initialize and then store the preferences in prefs. That would need a more sophisticated entry in prefs->Modules to enable a user to change their decisions.
Removing duplicate code from LoadModules, at the expense of making ModuleManager::Initialize more monolithic.
Make MultiDialog a bit more general.
Remove a few warnings.
Some logging has been turned back on when loading libs, we could turn it off again.
To test you could compile mod-nyq-bench and make sure it is available on the bottom of the 'View' menu, then unselect it in the Prefs -> Modules an retry.