... it's either the source of the connection that is being destroyed, or other
object (such as an ancestor window) transitively owning it and so causing it to
be destroyed too;
or, the sink is being destroyed, and that sink is a wxEvtHandler (which is
always so for Disconnect, though not for Unbind in case Bind was passed a
member function of a non-wxEvtHandler).
wxWidgets takes care of erasing the connection in such cases.
This removes most calls to Disconnect and Unbind. Many destructors shrank to
nothing.
Notably, in case of popup menu handling, the call to Disconnect is not removable
because the object being destroyed is neither the source nor the sink.
... doing that only for the user-visible string, seen in the Manage>About menu
of the effect dialog and in the sorted or grouped Effect/Generate/Analyze
menus.
But don't for the string used internally and written into pluginregistry.cfg,
so that compatibility of that file is preserved.
See also commits cafbff9ff8 and
c6bbe4c3da
... See commit 3b90538b84 which removed the
only use of the untranslated strings.
Also follows better i18n guidelines for composing the VSTEffect description.
... A "translated" effect family string, plus "/Enable", was used as a
registry key for lookup! It is wrong to key on a translation.
But in fact exhaustive search for "/Enable" shows that the only such strings
for which a written (by EffectsPrefs) registry value could be found were
AudioUnit
Ladspa
LV2
Nyquist
VAMP
VST
And none of these was actually a msgid in audacity.pot. So nothing bad can
really have happened in other locale settings.
... because I want to make a type distinction later.
Replace calls to GetXXX() without argument, with GetTranslatedXXX() --
this reveals a subtle error, see next commit.
... though the version (like the description) really wasn't yet used for
anything but to write and read again from the registry, still keep writing it.
Because it is appropriate to write untranslated strings to the registry, and
perhaps the values in old registries really will find a future use.
... it was simply written to registry and read again, serving no other
purpose.
But still write a blank to registry for backwards compatibility of the .cfg
file.
This makes it irrelevant whether the value of IdentInterface::GetDescription()
ought to be localized (registry values should probably not be).
Therefore IdentInterface::GetDescription can return localized, and it's all
right that the return be computed (as in VST effects), rather than
an unlocalized msgid that we rely on as an internal identifier.
... and similar wx "variadics," which all treat wxString smartly enough that
you don't need this.
Don't need c_str either to convert wxString to const wxChar * because
wxString has a conversion operator that does the same.
... I'm not sure how to make it work for AudioUnits, LV2, or Vamp, for which
the API for identifying a plug-in doesn't map straightforwardly to a file name.
... including titles of dialogs,
messages,
About sub-menu of the Manage button,
long-form names of Undo items (in history view),
message for why command is not allowed when there is no selection
Also one place in Effect Rack code but it's commented out
... This conservative fix depends on where you put the executable bundle.
Assuing the executable is in /Applications, and the other Audacity version
(past or future) is there too (either bundled as for 2.1.3 and later, or
in a folder as for 2.1.2 and previous):
The .ny files that are part of the other version's shipment are ignored, and
therefore the Effects menu avoids duplicates.
But the .cfg file is not rewritten to eliminate them, in case you want to
switch back to the other version. If that other version is 2.1.3 or earlier,
sorry but you will see duplicates.
... for functions in final classes.
override is like const -- it's not necessary, but it helps the compiler to
catch mistakes.
There may be some overriding functions not explicitly declared virtual and I did
not identify such cases, in which I might also add override.
... Should have no effect on generated code, except perhaps some slight faster
virtual function calls. Mostly useful as documentation of design intent.
Tried to mark every one of our classes that inherits from another, or is a
base for others, or has abstract virtual functions, and a few others besides.