// Copyright Epic Games, Inc. All Rights Reserved. #include "WidgetBlueprintExtension.h" #include "Engine/Blueprint.h" #include "WidgetBlueprint.h" UWidgetBlueprintExtension* UWidgetBlueprintExtension::RequestExtension(UWidgetBlueprint* InBlueprint, TSubclassOf InExtensionType) { checkf(!InBlueprint->bBeingCompiled, TEXT("Do not use RequestExtension when a blueprint is being compiled.")); // Look for an existing extension if (UWidgetBlueprintExtension* ExistingExtension = GetExtension(InBlueprint, InExtensionType)) { return ExistingExtension; } // Not found, create one UWidgetBlueprintExtension* NewExtension = NewObject(InBlueprint, InExtensionType.Get()); InBlueprint->AddExtension(NewExtension); return NewExtension; } UWidgetBlueprintExtension* UWidgetBlueprintExtension::GetExtension(const UWidgetBlueprint* InBlueprint, TSubclassOf InExtensionType) { // Look for an existing extension for (const TObjectPtr& Extension : InBlueprint->GetExtensions()) { if (Extension && Extension->GetClass() == InExtensionType) { return CastChecked(Extension); } } return nullptr; } TArray UWidgetBlueprintExtension::GetExtensions(const UWidgetBlueprint* InBlueprint) { TArray Extensions; for (const TObjectPtr& Extension : InBlueprint->GetExtensions()) { if (Extension && Extension->GetClass()->IsChildOf(UWidgetBlueprintExtension::StaticClass())) { Extensions.Add(CastChecked(Extension)); } } return Extensions; } UWidgetBlueprint* UWidgetBlueprintExtension::GetWidgetBlueprint() const { return GetOuterUWidgetBlueprint(); }