Audacity 3.2.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
MenuVisitor Struct Reference

#include <CommandManager.h>

Inheritance diagram for MenuVisitor:
[legend]
Collaboration diagram for MenuVisitor:
[legend]

Public Member Functions

 ~MenuVisitor () override
 
void BeginGroup (const Registry::GroupItemBase &item, const Path &path) final
 
void EndGroup (const Registry::GroupItemBase &item, const Path &) final
 
void Visit (const Registry::SingleItem &item, const Path &path) final
 
virtual void DoBeginGroup (const Registry::GroupItemBase &item, const Path &path)
 Groups of type MenuItems are excluded from this callback. More...
 
virtual void DoEndGroup (const Registry::GroupItemBase &item, const Path &path)
 Groups of type MenuItems are excluded from this callback. More...
 
virtual void DoVisit (const Registry::SingleItem &item, const Path &path)
 
virtual void DoSeparator ()
 
- Public Member Functions inherited from Registry::Visitor
virtual ~Visitor ()
 
virtual void BeginGroup (const GroupItemBase &item, const Path &path)
 
virtual void EndGroup (const GroupItemBase &item, const Path &path)
 
virtual void Visit (const SingleItem &item, const Path &path)
 

Private Member Functions

void MaybeDoSeparator ()
 

Private Attributes

std::vector< bool > firstItem
 
std::vector< bool > needSeparator
 

Additional Inherited Members

- Public Types inherited from Registry::Visitor
using Path = std::vector< Identifier >
 

Detailed Description

Definition at line 391 of file CommandManager.h.

Constructor & Destructor Documentation

◆ ~MenuVisitor()

MenuVisitor::~MenuVisitor ( )
overridedefault

Member Function Documentation

◆ BeginGroup()

void MenuVisitor::BeginGroup ( const Registry::GroupItemBase item,
const Path path 
)
finalvirtual

Reimplemented from Registry::Visitor.

Definition at line 108 of file Menus.cpp.

110{
111 bool isMenu = false;
112 bool isExtension = false;
113 auto pItem = &item;
114 const bool inlined = dynamic_cast<const MenuTable::MenuItems*>(pItem);
115 if (inlined) {
116 }
117 else if (dynamic_cast<const MenuTable::MenuSection*>(pItem)) {
118 if ( !needSeparator.empty() )
119 needSeparator.back() = true;
120 }
121 else if (auto pWhole = dynamic_cast<const MenuTable::WholeMenu*>(pItem)) {
122 isMenu = true;
123 isExtension = pWhole->extension;
125 }
126
127 if (!inlined)
128 DoBeginGroup(item, path);
129
130 if (isMenu) {
131 needSeparator.push_back(false);
132 firstItem.push_back(!isExtension);
133 }
134}
void MaybeDoSeparator()
Definition: Menus.cpp:162
virtual void DoBeginGroup(const Registry::GroupItemBase &item, const Path &path)
Groups of type MenuItems are excluded from this callback.
Definition: Menus.cpp:175
std::vector< bool > firstItem
std::vector< bool > needSeparator

References DoBeginGroup(), firstItem, MaybeDoSeparator(), and needSeparator.

Here is the call graph for this function:

◆ DoBeginGroup()

void MenuVisitor::DoBeginGroup ( const Registry::GroupItemBase item,
const Path path 
)
virtual

Groups of type MenuItems are excluded from this callback.

Reimplemented in anonymous_namespace{Menus.cpp}::MenuItemVisitor, anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectsMenuVisitor, and anonymous_namespace{PopupMenuTable.cpp}::PopupMenuBuilder.

Definition at line 175 of file Menus.cpp.

176{
177}

Referenced by BeginGroup(), and anonymous_namespace{HelpMenus.cpp}::OnMenuTree().

Here is the caller graph for this function:

◆ DoEndGroup()

void MenuVisitor::DoEndGroup ( const Registry::GroupItemBase item,
const Path path 
)
virtual

Groups of type MenuItems are excluded from this callback.

Reimplemented in anonymous_namespace{Menus.cpp}::MenuItemVisitor, anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectsMenuVisitor, and anonymous_namespace{PopupMenuTable.cpp}::PopupMenuBuilder.

Definition at line 179 of file Menus.cpp.

180{
181}

Referenced by EndGroup(), and anonymous_namespace{HelpMenus.cpp}::OnMenuTree().

Here is the caller graph for this function:

◆ DoSeparator()

void MenuVisitor::DoSeparator ( )
virtual

Reimplemented in anonymous_namespace{Menus.cpp}::MenuItemVisitor, anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectsMenuVisitor, and anonymous_namespace{PopupMenuTable.cpp}::PopupMenuBuilder.

Definition at line 187 of file Menus.cpp.

188{
189}

Referenced by MaybeDoSeparator(), and anonymous_namespace{HelpMenus.cpp}::OnMenuTree().

Here is the caller graph for this function:

◆ DoVisit()

void MenuVisitor::DoVisit ( const Registry::SingleItem item,
const Path path 
)
virtual

Reimplemented in anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectsMenuVisitor, anonymous_namespace{PopupMenuTable.cpp}::PopupMenuBuilder, and anonymous_namespace{Menus.cpp}::MenuItemVisitor.

Definition at line 183 of file Menus.cpp.

184{
185}

Referenced by anonymous_namespace{HelpMenus.cpp}::OnMenuTree(), and Visit().

Here is the caller graph for this function:

◆ EndGroup()

void MenuVisitor::EndGroup ( const Registry::GroupItemBase item,
const Path path 
)
finalvirtual

Reimplemented from Registry::Visitor.

Definition at line 136 of file Menus.cpp.

138{
139 auto pItem = &item;
140 const bool inlined = dynamic_cast<const MenuTable::MenuItems*>(pItem);
141 if (inlined) {
142 }
143 else if (dynamic_cast<const MenuTable::MenuSection*>(pItem)) {
144 if ( !needSeparator.empty() )
145 needSeparator.back() = true;
146 }
147 else if ( dynamic_cast<const MenuTable::WholeMenu*>(pItem)) {
148 firstItem.pop_back();
149 needSeparator.pop_back();
150 }
151
152 if (!inlined)
153 DoEndGroup(item, path);
154}
virtual void DoEndGroup(const Registry::GroupItemBase &item, const Path &path)
Groups of type MenuItems are excluded from this callback.
Definition: Menus.cpp:179

References DoEndGroup(), firstItem, and needSeparator.

Here is the call graph for this function:

◆ MaybeDoSeparator()

void MenuVisitor::MaybeDoSeparator ( )
private

Definition at line 162 of file Menus.cpp.

163{
164 bool separate = false;
165 if ( !needSeparator.empty() ) {
166 separate = needSeparator.back() && !firstItem.back();
167 needSeparator.back() = false;
168 firstItem.back() = false;
169 }
170
171 if ( separate )
172 DoSeparator();
173}
virtual void DoSeparator()
Definition: Menus.cpp:187

References DoSeparator(), firstItem, and needSeparator.

Referenced by BeginGroup(), and Visit().

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

◆ Visit()

void MenuVisitor::Visit ( const Registry::SingleItem item,
const Path path 
)
finalvirtual

Reimplemented from Registry::Visitor.

Definition at line 156 of file Menus.cpp.

157{
159 DoVisit(item, path);
160}
virtual void DoVisit(const Registry::SingleItem &item, const Path &path)
Definition: Menus.cpp:183

References DoVisit(), and MaybeDoSeparator().

Here is the call graph for this function:

Member Data Documentation

◆ firstItem

std::vector<bool> MenuVisitor::firstItem
private

Definition at line 413 of file CommandManager.h.

Referenced by BeginGroup(), EndGroup(), and MaybeDoSeparator().

◆ needSeparator

std::vector<bool> MenuVisitor::needSeparator
private

Definition at line 414 of file CommandManager.h.

Referenced by BeginGroup(), EndGroup(), and MaybeDoSeparator().


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