// Copyright Epic Games, Inc. All Rights Reserved. #include "ToolMenuWidgetCollectionContext.h" #include "Widgets/SWidget.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(ToolMenuWidgetCollectionContext) UToolMenuWidgetCollectionContext* UToolMenuWidgetCollectionContext::Get( FToolMenuContext& Context, bool bCreateIfNeeded /*= true*/) { if (UToolMenuWidgetCollectionContext* ExistingInstance = Context.FindContext()) { return ExistingInstance; } if (bCreateIfNeeded) { UToolMenuWidgetCollectionContext* NewInstance = NewObject(); Context.AddObject(NewInstance); return NewInstance; } return nullptr; } void UToolMenuWidgetCollectionContext::AddWidget(const TSharedRef& Widget) { Widgets.AddUnique(Widget); } void UToolMenuWidgetCollectionContext::EnumerateWidgets(const TFunctionRef& Widget)>& Callback) const { for (const TWeakPtr& Widget : Widgets) { if (TSharedPtr PinnedWidget = Widget.Pin()) { if (!Callback(PinnedWidget)) { break; } } } } TSharedPtr UToolMenuWidgetCollectionContext::FindWidgetByClassType(const FName& WidgetClassType) const { TSharedPtr FoundWidget; EnumerateWidgets([&FoundWidget, &WidgetClassType](const TSharedPtr& Widget) { if (Widget->GetWidgetClass().GetWidgetType() == WidgetClassType) { FoundWidget = Widget; return false; } return true; }); return FoundWidget; }