Audacity 3.2.0
Public Member Functions | Public Attributes | List of all members
anonymous_namespace{Menus.cpp}::MenuItemVisitor Struct Reference
Inheritance diagram for anonymous_namespace{Menus.cpp}::MenuItemVisitor:
[legend]
Collaboration diagram for anonymous_namespace{Menus.cpp}::MenuItemVisitor:
[legend]

Public Member Functions

 MenuItemVisitor (AudacityProject &proj, CommandManager &man)
 
void DoBeginGroup (GroupItem &item, const Path &) override
 
void DoEndGroup (GroupItem &item, const Path &) override
 
void DoVisit (SingleItem &item, const Path &) override
 
void DoSeparator () override
 
- Public Member Functions inherited from ToolbarMenuVisitor
 ToolbarMenuVisitor (AudacityProject &p)
 
 operator AudacityProject & () const
 
- Public Member Functions inherited from MenuVisitor
void BeginGroup (Registry::GroupItem &item, const Path &path) final
 
void EndGroup (Registry::GroupItem &item, const Path &) final
 
void Visit (Registry::SingleItem &item, const Path &path) final
 
virtual void DoBeginGroup (Registry::GroupItem &item, const Path &path)
 
virtual void DoEndGroup (Registry::GroupItem &item, const Path &path)
 
virtual void DoVisit (Registry::SingleItem &item, const Path &path)
 
virtual void DoSeparator ()
 
- Public Member Functions inherited from Registry::Visitor
virtual ~Visitor ()
 
virtual void BeginGroup (GroupItem &item, const Path &path)
 
virtual void EndGroup (GroupItem &item, const Path &path)
 
virtual void Visit (SingleItem &item, const Path &path)
 

Public Attributes

CommandManagermanager
 
std::vector< bool > flags
 
- Public Attributes inherited from ToolbarMenuVisitor
AudacityProjectproject
 

Additional Inherited Members

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

Detailed Description

Definition at line 275 of file Menus.cpp.

Constructor & Destructor Documentation

◆ MenuItemVisitor()

anonymous_namespace{Menus.cpp}::MenuItemVisitor::MenuItemVisitor ( AudacityProject proj,
CommandManager man 
)
inline

Definition at line 277 of file Menus.cpp.

278 : ToolbarMenuVisitor(proj), manager( man ) {}
ToolbarMenuVisitor(AudacityProject &p)

Member Function Documentation

◆ DoBeginGroup()

void anonymous_namespace{Menus.cpp}::MenuItemVisitor::DoBeginGroup ( GroupItem item,
const Path  
)
inlineoverridevirtual

Reimplemented from MenuVisitor.

Definition at line 280 of file Menus.cpp.

281 {
282 auto pItem = &item;
283 if (const auto pMenu =
284 dynamic_cast<MenuItem*>( pItem )) {
285 manager.BeginMenu( pMenu->title );
286 }
287 else
288 if (const auto pConditionalGroup =
289 dynamic_cast<ConditionalGroupItem*>( pItem )) {
290 const auto flag = pConditionalGroup->condition();
291 if (!flag)
293 // to avoid repeated call of condition predicate in EndGroup():
294 flags.push_back(flag);
295 }
296 else
297 if ( pItem->Transparent() ) {
298 }
299 else
300 if ( const auto pGroup = dynamic_cast<MenuSection*>( pItem ) ) {
301 }
302 else
303 wxASSERT( false );
304 }
static std::once_flag flag
wxMenu * BeginMenu(const TranslatableString &tName)

References flag, and manager.

◆ DoEndGroup()

void anonymous_namespace{Menus.cpp}::MenuItemVisitor::DoEndGroup ( GroupItem item,
const Path  
)
inlineoverridevirtual

Reimplemented from MenuVisitor.

Definition at line 306 of file Menus.cpp.

307 {
308 auto pItem = &item;
309 if (const auto pMenu =
310 dynamic_cast<MenuItem*>( pItem )) {
312 }
313 else
314 if (const auto pConditionalGroup =
315 dynamic_cast<ConditionalGroupItem*>( pItem )) {
316 const bool flag = flags.back();
317 if (!flag)
319 flags.pop_back();
320 }
321 else
322 if ( pItem->Transparent() ) {
323 }
324 else
325 if ( const auto pGroup = dynamic_cast<MenuSection*>( pItem ) ) {
326 }
327 else
328 wxASSERT( false );
329 }
void EndMenu()
This attaches a menu, if it's main, to the menubar.

References flag, and manager.

◆ DoSeparator()

void anonymous_namespace{Menus.cpp}::MenuItemVisitor::DoSeparator ( )
inlineoverridevirtual

Reimplemented from MenuVisitor.

Definition at line 367 of file Menus.cpp.

368 {
370 }

References manager.

◆ DoVisit()

void anonymous_namespace{Menus.cpp}::MenuItemVisitor::DoVisit ( SingleItem item,
const Path  
)
inlineoverridevirtual

Reimplemented from MenuVisitor.

Definition at line 331 of file Menus.cpp.

332 {
333 const auto pCurrentMenu = manager.CurrentMenu();
334 if ( !pCurrentMenu ) {
335 // There may have been a mistake in the placement hint that registered
336 // this single item. It's not within any menu.
337 wxASSERT( false );
338 return;
339 }
340 auto pItem = &item;
341 if (const auto pCommand =
342 dynamic_cast<CommandItem*>( pItem )) {
344 pCommand->name, pCommand->label_in,
345 pCommand->finder, pCommand->callback,
346 pCommand->flags, pCommand->options
347 );
348 }
349 else
350 if (const auto pCommandList =
351 dynamic_cast<CommandGroupItem*>( pItem ) ) {
352 manager.AddItemList(pCommandList->name,
353 pCommandList->items.data(), pCommandList->items.size(),
354 pCommandList->finder, pCommandList->callback,
355 pCommandList->flags, pCommandList->isEffect);
356 }
357 else
358 if (const auto pSpecial =
359 dynamic_cast<SpecialItem*>( pItem )) {
360 wxASSERT( pCurrentMenu );
361 pSpecial->fn( project, *pCurrentMenu );
362 }
363 else
364 wxASSERT( false );
365 }
void AddItemList(const CommandID &name, const ComponentInterfaceSymbol items[], size_t nItems, CommandHandlerFinder finder, CommandFunctorPointer callback, CommandFlag flags, bool bIsEffect=false)
wxMenu * CurrentMenu() const
void AddItem(AudacityProject &project, const CommandID &name, const TranslatableString &label_in, CommandHandlerFinder finder, CommandFunctorPointer callback, CommandFlag flags, const Options &options={})
AudacityProject & project

References manager.

Member Data Documentation

◆ flags

std::vector<bool> anonymous_namespace{Menus.cpp}::MenuItemVisitor::flags

Definition at line 373 of file Menus.cpp.

◆ manager

CommandManager& anonymous_namespace{Menus.cpp}::MenuItemVisitor::manager

Definition at line 372 of file Menus.cpp.


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