mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-16 08:34:10 +02:00
EffectsPrefs queries PluginManager for checkbox settings paths
This commit is contained in:
parent
82e3ec6818
commit
af3b54ba2a
@ -1408,15 +1408,20 @@ RegistryPath PluginManager::GetPluginEnabledSetting(
|
|||||||
const PluginDescriptor &desc )
|
const PluginDescriptor &desc )
|
||||||
{
|
{
|
||||||
switch ( desc.GetPluginType() ) {
|
switch ( desc.GetPluginType() ) {
|
||||||
case PluginTypeEffect: {
|
case PluginTypeModule: {
|
||||||
// Retrieve optional family symbol that was recorded in
|
// Retrieve optional family symbol that was recorded in
|
||||||
// RegisterPlugin() for the module
|
// RegisterPlugin() for the module
|
||||||
auto family = desc.GetEffectFamily();
|
auto family = desc.GetEffectFamily();
|
||||||
if ( family.empty() )
|
if ( family.empty() ) // as for built-in effect and command modules
|
||||||
return {};
|
return {};
|
||||||
else
|
else
|
||||||
return wxT('/') + family + wxT("/Enable");
|
return wxT('/') + family + wxT("/Enable");
|
||||||
}
|
}
|
||||||
|
case PluginTypeEffect:
|
||||||
|
// do NOT use GetEffectFamily() for this descriptor, but instead,
|
||||||
|
// delegate to the plugin descriptor of the provider, which may
|
||||||
|
// be different (may be empty)
|
||||||
|
return GetPluginEnabledSetting( desc.GetProviderID() );
|
||||||
default:
|
default:
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@ -1438,6 +1443,7 @@ bool PluginManager::IsPluginRegistered(const PluginPath &path)
|
|||||||
const PluginID & PluginManager::RegisterPlugin(ModuleInterface *module)
|
const PluginID & PluginManager::RegisterPlugin(ModuleInterface *module)
|
||||||
{
|
{
|
||||||
PluginDescriptor & plug = CreatePlugin(GetID(module), module, PluginTypeModule);
|
PluginDescriptor & plug = CreatePlugin(GetID(module), module, PluginTypeModule);
|
||||||
|
plug.SetEffectFamily(module->GetOptionalFamilySymbol().Internal());
|
||||||
|
|
||||||
plug.SetEnabled(true);
|
plug.SetEnabled(true);
|
||||||
plug.SetValid(true);
|
plug.SetValid(true);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <wx/defs.h>
|
#include <wx/defs.h>
|
||||||
|
|
||||||
#include "../Languages.h"
|
#include "../Languages.h"
|
||||||
|
#include "../PluginManager.h"
|
||||||
#include "../Prefs.h"
|
#include "../Prefs.h"
|
||||||
#include "../ShuttleGui.h"
|
#include "../ShuttleGui.h"
|
||||||
|
|
||||||
@ -65,6 +66,95 @@ void EffectsPrefs::Populate()
|
|||||||
// ----------------------- End of main section --------------
|
// ----------------------- End of main section --------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// Rather than hard-code an exhaustive list of effect families in this file,
|
||||||
|
// pretend we don't know, but discover them instead by querying the module and
|
||||||
|
// effect managers.
|
||||||
|
|
||||||
|
// But then we would like to have prompts with accelerator characters that are
|
||||||
|
// distinct. We collect some prompts in the following map.
|
||||||
|
|
||||||
|
// It is not required that each module be found here, nor that each module
|
||||||
|
// mentioned here be found.
|
||||||
|
const std::map< wxString, wxString > SuggestedPrompts{
|
||||||
|
|
||||||
|
/* i18n-hint: Audio Unit is the name of an Apple audio software protocol */
|
||||||
|
{ wxT("AudioUnit"), XO("Audio Unit") },
|
||||||
|
|
||||||
|
/* i18n-hint: abbreviates "Linux Audio Developer's Simple Plugin API"
|
||||||
|
(Application programming interface)
|
||||||
|
*/
|
||||||
|
{ wxT("LADSPA"), XO("&LADSPA") },
|
||||||
|
|
||||||
|
/* i18n-hint: abbreviates
|
||||||
|
"Linux Audio Developer's Simple Plugin API (LADSPA) version 2" */
|
||||||
|
{ wxT("LV2"), XO("LV&2") },
|
||||||
|
|
||||||
|
/* i18n-hint: "Nyquist" is an embedded interpreted programming language in
|
||||||
|
Audacity, named in honor of the Swedish-American Harry Nyquist (or Nyqvist).
|
||||||
|
In the translations of this and other strings, you may transliterate the
|
||||||
|
name into another alphabet. */
|
||||||
|
{ wxT("Nyquist"), XO("N&yquist") },
|
||||||
|
|
||||||
|
/* i18n-hint: Vamp is the proper name of a software protocol for sound analysis.
|
||||||
|
It is not an abbreviation for anything. See http://vamp-plugins.org */
|
||||||
|
{ wxT("Vamp"), XO("&Vamp") },
|
||||||
|
|
||||||
|
/* i18n-hint: Abbreviates Virtual Studio Technology, an audio software protocol
|
||||||
|
developed by Steinberg GmbH */
|
||||||
|
{ wxT("VST"), XO("V&ST") },
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Collect needed prompts and settings paths, at most once, on demand
|
||||||
|
struct Entry {
|
||||||
|
wxString prompt; // untranslated
|
||||||
|
wxString setting;
|
||||||
|
};
|
||||||
|
static const std::vector< Entry > &GetModuleData()
|
||||||
|
{
|
||||||
|
struct ModuleData : public std::vector< Entry > {
|
||||||
|
ModuleData() {
|
||||||
|
auto &pm = PluginManager::Get();
|
||||||
|
for (auto plug = pm.GetFirstPlugin(PluginTypeModule);
|
||||||
|
plug;
|
||||||
|
plug = pm.GetNextPlugin(PluginTypeModule)) {
|
||||||
|
auto internal = plug->GetEffectFamily();
|
||||||
|
if ( internal.empty() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
wxString prompt;
|
||||||
|
auto iter = SuggestedPrompts.find( internal );
|
||||||
|
if ( iter == SuggestedPrompts.end() )
|
||||||
|
// For the built-in modules this Msgid includes " Effects",
|
||||||
|
// but those strings were never shown to the user,
|
||||||
|
// and the prompts in the table above do not include it.
|
||||||
|
// If there should be new modules, it is not important for them
|
||||||
|
// to follow the " Effects" convention, but instead they can
|
||||||
|
// have shorter msgids.
|
||||||
|
prompt = plug->GetSymbol().Msgid();
|
||||||
|
else
|
||||||
|
prompt = iter->second;
|
||||||
|
|
||||||
|
auto setting = pm.GetPluginEnabledSetting( *plug );
|
||||||
|
|
||||||
|
push_back( { prompt, setting } );
|
||||||
|
}
|
||||||
|
// Guarantee some determinate ordering
|
||||||
|
std::sort( begin(), end(),
|
||||||
|
[]( const Entry &a, const Entry &b ){
|
||||||
|
return a.setting < b.setting;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
static ModuleData theData;
|
||||||
|
return theData;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void EffectsPrefs::PopulateOrExchange(ShuttleGui & S)
|
void EffectsPrefs::PopulateOrExchange(ShuttleGui & S)
|
||||||
{
|
{
|
||||||
S.SetBorder(2);
|
S.SetBorder(2);
|
||||||
@ -72,56 +162,14 @@ void EffectsPrefs::PopulateOrExchange(ShuttleGui & S)
|
|||||||
|
|
||||||
S.StartStatic(_("Enable Effects"));
|
S.StartStatic(_("Enable Effects"));
|
||||||
{
|
{
|
||||||
|
for ( const auto &entry : GetModuleData() )
|
||||||
#if USE_AUDIO_UNITS
|
{
|
||||||
/* i18n-hint: Audio Unit is the name of an Apple audio software protocol */
|
S.TieCheckBox(
|
||||||
S.TieCheckBox(_("Audio Unit"),
|
GetCustomTranslation( entry.prompt ),
|
||||||
wxT("/AudioUnit/Enable"),
|
entry.setting,
|
||||||
true);
|
true
|
||||||
#endif
|
);
|
||||||
|
}
|
||||||
// JKC: LADSPA, LV2, Nyquist, VST, VAMP should not be translated.
|
|
||||||
#if USE_LADSPA
|
|
||||||
/* i18n-hint: abbreviates "Linux Audio Developer's Simple Plugin API"
|
|
||||||
(Application programming interface)
|
|
||||||
*/
|
|
||||||
S.TieCheckBox(_("&LADSPA"),
|
|
||||||
wxT("/LADSPA/Enable"),
|
|
||||||
true);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if USE_LV2
|
|
||||||
/* i18n-hint: abbreviates
|
|
||||||
"Linux Audio Developer's Simple Plugin API (LADSPA) version 2" */
|
|
||||||
S.TieCheckBox(_("LV&2"),
|
|
||||||
wxT("/LV2/Enable"),
|
|
||||||
true);
|
|
||||||
#endif
|
|
||||||
#if USE_NYQUIST
|
|
||||||
/* i18n-hint: "Nyquist" is an embedded interpreted programming language in
|
|
||||||
Audacity, named in honor of the Swedish-American Harry Nyquist (or Nyqvist).
|
|
||||||
In the translations of this and other strings, you may transliterate the
|
|
||||||
name into another alphabet. */
|
|
||||||
S.TieCheckBox(_("N&yquist"),
|
|
||||||
wxT("/Nyquist/Enable"),
|
|
||||||
true);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if USE_VAMP
|
|
||||||
/* i18n-hint: Vamp is the proper name of a software protocol for sound analysis.
|
|
||||||
It is not an abbreviation for anything. See http://vamp-plugins.org */
|
|
||||||
S.TieCheckBox(_("&Vamp"),
|
|
||||||
wxT("/Vamp/Enable"),
|
|
||||||
true);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if USE_VST
|
|
||||||
/* i18n-hint: Abbreviates Virtual Studio Technology, an audio software protocol
|
|
||||||
developed by Steinberg GmbH */
|
|
||||||
S.TieCheckBox(_("V&ST"),
|
|
||||||
wxT("/VST/Enable"),
|
|
||||||
true);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
S.EndStatic();
|
S.EndStatic();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user