Audacity 3.2.0
Typedefs | Functions
MenuHelper Namespace Reference

Typedefs

using Group = MenuRegistry::GroupItem< MenuRegistry::Traits >
 

Functions

void PopulateEffectsMenu (Group &menuItems, EffectType type, CommandFlag batchflags, const wxString &groupby, void(*onMenuCommand)(const CommandContext &), std::function< bool(const PluginDescriptor &)> pred={})
 

Typedef Documentation

◆ Group

Definition at line 11 of file MenuHelper.h.

Function Documentation

◆ PopulateEffectsMenu()

void MenuHelper::PopulateEffectsMenu ( Group menuItems,
EffectType  type,
CommandFlag  batchflags,
const wxString &  groupby,
void(*)(const CommandContext &)  onMenuCommand,
std::function< bool(const PluginDescriptor &)>  pred = {} 
)

The effects come from a plug in list This code iterates through the list, adding effects into the menu.

Definition at line 571 of file MenuHelper.cpp.

578{
580
581 std::vector<MenuSectionBuilder> sections;
582
583 auto MakeAddSortedItems = [=](SortBy sortby)
584 {
585 return [=](Group& items, std::vector<const PluginDescriptor*>& plugins)
586 {
587 return AddSortedEffectMenuItems(items, plugins, batchflags, sortby, onMenuCommand);
588 };
589 };
590
591 auto MakeAddGroupedItems = [=](GroupBy groupBy)
592 {
593 return [=](Group& items, std::vector<const PluginDescriptor*>& plugins)
594 {
595 return AddGroupedEffectMenuItems(items, plugins, batchflags, groupBy, onMenuCommand);
596 };
597 };
598
599 auto DefaultFilter = [](auto plug) { return IsEnabledPlugin(plug) && IsDefaultPlugin(plug); };
600 if(groupby == "default")
601 {
602 if(type == EffectTypeProcess)
603 {
604 static auto effectMenuDefaults = [] {
605 wxFileName path = wxFileName(FileNames::ResourcesDir(), wxT("EffectsMenuDefaults.xml"));
606 return LoadEffectsMenuGroups(path.GetFullPath());
607 }();
608 static auto groupsFilter = MakeGroupsFilter(effectMenuDefaults);
609
610 sections.emplace_back(
611 MenuSectionBuilder {
612 {},
613 [=](auto plug) { return IsBundledPlugin(plug) && groupsFilter(plug); },
614 nullptr,
615 MakeAddGroupItems(effectMenuDefaults, batchflags, onMenuCommand)
616 });
617 sections.emplace_back(
618 MenuSectionBuilder {
619 {},
622 MakeAddGroupedItems(GroupBy::Publisher)
623 });
624 }
625 else//Generators/Analyzers
626 {
627 sections.emplace_back(
628 MenuSectionBuilder {
629 {},
630 [](auto plug){ return IsEnabledPlugin(plug) && IsBundledPlugin(plug); } ,
632 MakeAddSortedItems(SortBy::Name)
633 });
634 sections.emplace_back(
635 MenuSectionBuilder {
636 {},
639 MakeAddGroupedItems(GroupBy::Publisher)
640 });
641 }
642 }
643 else if(groupby == "sortby:publisher:name")
644 {
645 sections.emplace_back(
646 MenuSectionBuilder {
647 {},
648 DefaultFilter,
650 MakeAddSortedItems(SortBy::PublisherName)
651 });
652 sections.emplace_back(
653 MenuSectionBuilder {
654 {},
657 MakeAddSortedItems(SortBy::PublisherName)
658 });
659 }
660 else if(groupby == "sortby:type:name")
661 {
662 sections.emplace_back(
663 MenuSectionBuilder {
664 {},
665 DefaultFilter,
667 MakeAddSortedItems(SortBy::TypeName)
668 });
669 sections.emplace_back(
670 MenuSectionBuilder {
671 {},
674 MakeAddSortedItems(SortBy::TypeName)
675 });
676 }
677 else if(groupby == "groupby:publisher")
678 {
679 sections.emplace_back(
680 MenuSectionBuilder {
681 {},
682 DefaultFilter,
684 MakeAddGroupedItems(GroupBy::Publisher)
685 });
686 sections.emplace_back(
687 MenuSectionBuilder {
688 {},
691 MakeAddGroupedItems(GroupBy::Publisher)
692 });
693 }
694 else if(groupby == "groupby:type")
695 {
696 sections.emplace_back(
697 MenuSectionBuilder {
698 {},
699 DefaultFilter,
701 MakeAddGroupedItems(GroupBy::Type)
702 });
703 sections.emplace_back(
704 MenuSectionBuilder {
705 {},
708 MakeAddGroupedItems(GroupBy::Type)
709 });
710 }
711 else if(groupby == "groupby:type:publisher")
712 {
713 sections.emplace_back(
714 MenuSectionBuilder {
715 {},
716 DefaultFilter,
718 MakeAddGroupedItems(GroupBy::Type)
719 });
720 sections.push_back(
721 MenuSectionBuilder {
722 {},
725 MakeAddGroupedItems(GroupBy::TypePublisher)
726 });
727 }
728 else //if(groupby == "sortby:name")
729 {
730 sections.emplace_back(
731 MenuSectionBuilder {
732 {},
733 DefaultFilter,
735 MakeAddSortedItems(SortBy::Name)
736 });
737 sections.emplace_back(
738 MenuSectionBuilder {
739 {},
742 MakeAddSortedItems(SortBy::Name)
743 });
744 }
745 for(auto& plugin : pm.EffectsOfType(type))
746 {
747 if(pred && !pred(plugin))
748 continue;
749
750 for(auto& section : sections)
751 {
752 if(section.filter(&plugin))
753 {
754 section.plugins.push_back(&plugin);
755 break;
756 }
757 }
758 }
759
760 for(auto& section : sections)
761 {
762 if(section.compare != nullptr)
763 std::sort(section.plugins.begin(), section.plugins.end(), section.compare);
764
765 if (menuItems.empty()) {
766 auto group = MenuRegistry::Items("");
767 section.add(*group, section.plugins);
768 if (group->empty())
769 continue;
770 menuItems.push_back(move(group));
771 }
772 else {
773 auto group = MenuRegistry::Section("");
774 section.add(*group, section.plugins);
775 if (group->empty())
776 continue;
777 menuItems.push_back(move(group));
778 }
779 }
780}
wxT("CloseDown"))
@ EffectTypeProcess
PluginManager maintains a list of all plug ins. That covers modules, effects, generators,...
Definition: PluginManager.h:51
Range EffectsOfType(EffectType type)
static PluginManager & Get()
FILES_API FilePath ResourcesDir()
MenuRegistry::GroupItem< MenuRegistry::Traits > Group
Definition: MenuHelper.h:11
constexpr auto Section
Definition: MenuRegistry.h:436
constexpr auto Items
Definition: MenuRegistry.h:427
EffectsMenuGroups LoadEffectsMenuGroups(const wxString &path)
Definition: MenuHelper.cpp:112
bool IsDefaultPlugin(const PluginDescriptor *plug)
Definition: MenuHelper.cpp:525
bool ComapareEffectsByTypeAndPublisher(const PluginDescriptor *a, const PluginDescriptor *b)
Definition: MenuHelper.cpp:491
void AddSortedEffectMenuItems(MenuHelper::Group &table, std::vector< const PluginDescriptor * > &plugs, CommandFlag batchflags, SortBy sortBy, void(*onMenuCommand)(const CommandContext &))
Definition: MenuHelper.cpp:202
bool CompareEffectsByPublisherAndName(const PluginDescriptor *a, const PluginDescriptor *b)
Definition: MenuHelper.cpp:430
bool CompareEffectsByPublisher(const PluginDescriptor *a, const PluginDescriptor *b)
Definition: MenuHelper.cpp:410
bool CompareEffectsByName(const PluginDescriptor *a, const PluginDescriptor *b)
Definition: MenuHelper.cpp:403
void AddGroupedEffectMenuItems(MenuHelper::Group &table, std::vector< const PluginDescriptor * > &plugs, CommandFlag batchflags, GroupBy groupBy, void(*onMenuCommand)(const CommandContext &))
Definition: MenuHelper.cpp:314
bool IsEnabledPlugin(const PluginDescriptor *plug)
Definition: MenuHelper.cpp:515
bool IsBundledPlugin(const PluginDescriptor *plug)
Definition: MenuHelper.cpp:540
auto MakeAddGroupItems(const EffectsMenuGroups &list, CommandFlag batchflags, void(*onMenuCommand)(const CommandContext &)) -> auto
Definition: MenuHelper.cpp:257
auto MakeGroupsFilter(const EffectsMenuGroups &list) -> auto
Definition: MenuHelper.cpp:550
bool CompareEffectsByType(const PluginDescriptor *a, const PluginDescriptor *b)
Definition: MenuHelper.cpp:473
Has variadic and range constructors that check types.
Definition: Registry.h:292

References anonymous_namespace{MenuHelper.cpp}::AddGroupedEffectMenuItems(), anonymous_namespace{MenuHelper.cpp}::AddSortedEffectMenuItems(), anonymous_namespace{MenuHelper.cpp}::ComapareEffectsByTypeAndPublisher(), anonymous_namespace{MenuHelper.cpp}::CompareEffectsByName(), anonymous_namespace{MenuHelper.cpp}::CompareEffectsByPublisher(), anonymous_namespace{MenuHelper.cpp}::CompareEffectsByPublisherAndName(), anonymous_namespace{MenuHelper.cpp}::CompareEffectsByType(), PluginManager::EffectsOfType(), EffectTypeProcess, PluginManager::Get(), anonymous_namespace{MenuHelper.cpp}::IsBundledPlugin(), anonymous_namespace{MenuHelper.cpp}::IsDefaultPlugin(), anonymous_namespace{MenuHelper.cpp}::IsEnabledPlugin(), MenuRegistry::Items, anonymous_namespace{MenuHelper.cpp}::LoadEffectsMenuGroups(), anonymous_namespace{MenuHelper.cpp}::MakeAddGroupItems(), anonymous_namespace{MenuHelper.cpp}::MakeGroupsFilter(), anonymous_namespace{Scrubbing.cpp}::menuItems(), FileNames::ResourcesDir(), MenuRegistry::Section, and wxT().

Referenced by anonymous_namespace{PluginMenus.cpp}::AnalyzeMenu(), anonymous_namespace{PluginMenus.cpp}::EffectMenu(), anonymous_namespace{PluginMenus.cpp}::GenerateMenu(), anonymous_namespace{PluginMenus.cpp}::ToolsMenu(), and RealtimeEffectListWindow::UpdateEffectMenuItems().

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