void FExtender::Apply( FName ExtensionHook, EExtensionHook::Position HookPosition, FToolBarBuilder& ToolBarBuilder ) const { for( auto ExtensionIt( Extensions.CreateConstIterator() ); ExtensionIt; ++ExtensionIt ) { const auto& Extension = *ExtensionIt; if( Extension->GetType() == EExtensionType::ToolBar && Extension->Hook == ExtensionHook && Extension->HookPosition == HookPosition ) { const auto& ToolBarExtension = StaticCastSharedPtr< const FToolBarExtension >( Extension ); if ( Extension->CommandList.IsValid() ) { // Push the command list needed for this extension's menu items ToolBarBuilder.PushCommandList( Extension->CommandList.ToSharedRef() ); } // Extend the menu! ToolBarExtension->ToolBarExtensionDelegate.ExecuteIfBound( ToolBarBuilder ); if ( Extension->CommandList.IsValid() ) { // Restore the original command list ToolBarBuilder.PopCommandList(); } } } }