// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "WidgetBlueprint.h" #include "WidgetBlueprintEditor.h" #include "IDetailCustomization.h" class IDetailLayoutBuilder; class IPropertyHandle; class UFunction; /** * Provides the customization for all UWidgets. Bindings, style disabling...etc. */ class FBlueprintWidgetCustomization : public IDetailCustomization { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(TSharedRef InEditor, UBlueprint* InBlueprint) { return MakeShareable(new FBlueprintWidgetCustomization(InEditor, InBlueprint)); } FBlueprintWidgetCustomization(TSharedRef InEditor, UBlueprint* InBlueprint) : Editor(InEditor) , Blueprint(CastChecked(InBlueprint)) { } /** IDetailCustomization interface */ virtual void CustomizeDetails( IDetailLayoutBuilder& DetailLayout ) override; /** Make a property binding widget */ static TSharedRef MakePropertyBindingWidget(TWeakPtr InEditor, UFunction* SignatureFunction, TSharedRef InDelegatePropertyHandle, bool bInGeneratePureBindings, bool bAllowDetailsPanelLegacyBinding); /** Whether the property (or its parent property, if this is an array/struct element) currently has bindings */ static bool HasPropertyBindings(TWeakPtr InEditor, const TSharedRef& InPropertyHandle); private: void PerformBindingCustomization(IDetailLayoutBuilder& DetailLayout, const TArrayView Widgets); void CreateEventCustomization( IDetailLayoutBuilder& DetailLayout, FDelegateProperty* Property, UWidget* Widget ); void CreateMulticastEventCustomization(IDetailLayoutBuilder& DetailLayout, FName ThisComponentName, UClass* PropertyClass, FMulticastDelegateProperty* Property); void ResetToDefault_RemoveBinding(TSharedPtr PropertyHandle); FReply HandleAddOrViewEventForVariable(const FName EventName, FName PropertyName, TWeakObjectPtr PropertyClass); int32 HandleAddOrViewIndexForButton(const FName EventName, FName PropertyName) const; void PerformAccessibilityCustomization(IDetailLayoutBuilder& DetailLayout); void CustomizeAccessibilityProperty(IDetailLayoutBuilder& DetailLayout, const FName& BehaviorPropertyName, const FName& TextPropertyName); void PerformCustomizationExtenders(IDetailLayoutBuilder& DetailLayout, const TArrayView Widgets); private: TWeakPtr Editor; TWeakObjectPtr Blueprint; bool bCreateMulticastEventCustomizationErrorAdded = false; };