Audacity 3.2.0
Public Member Functions | Private Attributes | List of all members
MenuTable::Visitor< MenuTraits > Struct Template Reference

#include <CommandManager.h>

Inheritance diagram for MenuTable::Visitor< MenuTraits >:
[legend]
Collaboration diagram for MenuTable::Visitor< MenuTraits >:
[legend]

Public Member Functions

 Visitor (VisitorFunctions< MenuTraits > functions, std::function< void()> doSeparator)
 
- Public Member Functions inherited from Registry::VisitorFunctions< MenuTraits >
 VisitorFunctions (Visitors &&visitors)
 Type-erasing constructor. More...
 
void BeginGroup (const GroupItem< MenuTraits > &item, const Path &path) const
 Call-through for a decorating pre-visitor. More...
 
void Visit (const SingleItem &item, const Path &path) const
 Call-through for a decorating leaf-visitor. More...
 
void EndGroup (const GroupItem< MenuTraits > &item, const Path &path) const
 Call-through for a decorating post-visitor. More...
 
- Public Member Functions inherited from MenuTable::detail::VisitorBase
std::pair< bool, bool > ShouldBeginGroup (const MenuItemProperties *pProperties)
 
void AfterBeginGroup (const MenuItemProperties *pProperties)
 
bool ShouldEndGroup (const MenuItemProperties *pProperties)
 
bool ShouldDoSeparator ()
 

Private Attributes

const VisitorFunctions< MenuTraits > mWrapped
 
const std::function< void()> mDoSeparator
 

Additional Inherited Members

- Public Types inherited from Registry::VisitorFunctions< MenuTraits >
using NodeTypes = detail::VisitedNodeTypes< MenuTraits >
 
using LeafTypes = detail::VisitedLeafTypes< MenuTraits >
 
- Public Attributes inherited from MenuTable::detail::VisitorBase
std::vector< bool > firstItem
 
std::vector< bool > needSeparator
 

Detailed Description

template<typename MenuTraits>
struct MenuTable::Visitor< MenuTraits >

Wraps the behavior of another VisitorFuntions<MenuTraits>, and also needs a callback for what to do at separator lines

Definition at line 423 of file CommandManager.h.

Constructor & Destructor Documentation

◆ Visitor()

template<typename MenuTraits >
MenuTable::Visitor< MenuTraits >::Visitor ( VisitorFunctions< MenuTraits >  functions,
std::function< void()>  doSeparator 
)
inline

Definition at line 427 of file CommandManager.h.

429 : VisitorFunctions<MenuTraits>{ std::tuple{
430
431 [this](const GroupItem<MenuTraits> &item, const Path &path)
432 {
433 using namespace MenuTable;
434 const auto pProperties = dynamic_cast<const MenuItemProperties*>(&item);
435 auto [begin, separate] = ShouldBeginGroup(pProperties);
436 if (separate)
437 mDoSeparator();
438 if (begin)
439 mWrapped.BeginGroup(item, path);
440 AfterBeginGroup(pProperties);
441 },
442
443 [this](const Registry::SingleItem &item, const Path &path)
444 {
445 if (ShouldDoSeparator())
446 mDoSeparator();
447 mWrapped.Visit(item, path);
448 },
449
450 [this](const GroupItem<MenuTraits> &item, const Path &path)
451 {
452 using namespace MenuTable;
453 const auto pProperties = dynamic_cast<const MenuItemProperties*>(&item);
454 if (ShouldEndGroup(pProperties))
455 mWrapped.EndGroup(item, path);
456 }
457
458 }}
459 , mWrapped{ move(functions) }
460 , mDoSeparator{ move(doSeparator) }
461 {}
auto begin(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
Definition: PackedArray.h:150
std::vector< Identifier > Path
Definition: Registry.h:71
A mix-in discovered by dynamic_cast; independent of the Traits.
const std::function< void()> mDoSeparator
const VisitorFunctions< MenuTraits > mWrapped
void AfterBeginGroup(const MenuItemProperties *pProperties)
Definition: Menus.cpp:137
bool ShouldEndGroup(const MenuItemProperties *pProperties)
Definition: Menus.cpp:163
std::pair< bool, bool > ShouldBeginGroup(const MenuItemProperties *pProperties)
Definition: Menus.cpp:106
Has variadic and range constructors that check types.
Definition: Registry.h:292
Common abstract base class for items that are not groups.
Definition: Registry.h:224
void BeginGroup(const GroupItem< RegistryTraits > &item, const Path &path) const
Call-through for a decorating pre-visitor.
Definition: Registry.h:505
void EndGroup(const GroupItem< RegistryTraits > &item, const Path &path) const
Call-through for a decorating post-visitor.
Definition: Registry.h:522
void Visit(const SingleItem &item, const Path &path) const
Call-through for a decorating leaf-visitor.
Definition: Registry.h:511

References MenuTable::detail::VisitorBase::AfterBeginGroup(), PackedArray::begin(), Registry::VisitorFunctions< RegistryTraits, Reference >::BeginGroup(), Registry::VisitorFunctions< RegistryTraits, Reference >::EndGroup(), MenuTable::Visitor< MenuTraits >::mDoSeparator, MenuTable::Visitor< MenuTraits >::mWrapped, MenuTable::detail::VisitorBase::ShouldBeginGroup(), MenuTable::detail::VisitorBase::ShouldDoSeparator(), MenuTable::detail::VisitorBase::ShouldEndGroup(), and Registry::VisitorFunctions< RegistryTraits, Reference >::Visit().

Here is the call graph for this function:

Member Data Documentation

◆ mDoSeparator

template<typename MenuTraits >
const std::function<void()> MenuTable::Visitor< MenuTraits >::mDoSeparator
private

Definition at line 465 of file CommandManager.h.

Referenced by MenuTable::Visitor< MenuTraits >::Visitor().

◆ mWrapped

template<typename MenuTraits >
const VisitorFunctions<MenuTraits> MenuTable::Visitor< MenuTraits >::mWrapped
private

Definition at line 464 of file CommandManager.h.

Referenced by MenuTable::Visitor< MenuTraits >::Visitor().


The documentation for this struct was generated from the following file: