Files
UnrealEngine/Engine/Source/Editor/UMGEditor/Private/Customizations/UMGDetailCustomizations.h
2025-05-18 13:04:45 +08:00

63 lines
2.7 KiB
C++

// 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<class IDetailCustomization> MakeInstance(TSharedRef<FWidgetBlueprintEditor> InEditor, UBlueprint* InBlueprint)
{
return MakeShareable(new FBlueprintWidgetCustomization(InEditor, InBlueprint));
}
FBlueprintWidgetCustomization(TSharedRef<FWidgetBlueprintEditor> InEditor, UBlueprint* InBlueprint)
: Editor(InEditor)
, Blueprint(CastChecked<UWidgetBlueprint>(InBlueprint))
{
}
/** IDetailCustomization interface */
virtual void CustomizeDetails( IDetailLayoutBuilder& DetailLayout ) override;
/** Make a property binding widget */
static TSharedRef<SWidget> MakePropertyBindingWidget(TWeakPtr<FWidgetBlueprintEditor> InEditor, UFunction* SignatureFunction, TSharedRef<IPropertyHandle> 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<FWidgetBlueprintEditor> InEditor, const TSharedRef<IPropertyHandle>& InPropertyHandle);
private:
void PerformBindingCustomization(IDetailLayoutBuilder& DetailLayout, const TArrayView<UWidget*> Widgets);
void CreateEventCustomization( IDetailLayoutBuilder& DetailLayout, FDelegateProperty* Property, UWidget* Widget );
void CreateMulticastEventCustomization(IDetailLayoutBuilder& DetailLayout, FName ThisComponentName, UClass* PropertyClass, FMulticastDelegateProperty* Property);
void ResetToDefault_RemoveBinding(TSharedPtr<IPropertyHandle> PropertyHandle);
FReply HandleAddOrViewEventForVariable(const FName EventName, FName PropertyName, TWeakObjectPtr<UClass> 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<UWidget*> Widgets);
private:
TWeakPtr<FWidgetBlueprintEditor> Editor;
TWeakObjectPtr<UWidgetBlueprint> Blueprint;
bool bCreateMulticastEventCustomizationErrorAdded = false;
};