// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "ControlRigOverride.h" #include "IPropertyTypeCustomization.h" #include "IDetailCustomNodeBuilder.h" #include "IStructureDataProvider.h" class IPropertyHandle; class UControlRigOverrideAsset; class FControlRigOverrideDetails : public IPropertyTypeCustomization { public: static TSharedRef MakeInstance() { return MakeShareable(new FControlRigOverrideDetails); } /** IPropertyTypeCustomization interface */ virtual void CustomizeHeader(TSharedRef InStructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef InStructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; }; class FControlRigOverrideDetailsBuilder : public IDetailCustomNodeBuilder , public TSharedFromThis { public: FControlRigOverrideDetailsBuilder(UControlRigOverrideAsset* InOverrideAsset, const FName& InSubjectKey); /** IDetailCustomNodeBuilder interface */ virtual void SetOnRebuildChildren( FSimpleDelegate InOnRebuildChildren ) override { OnRebuildChildren = InOnRebuildChildren; } virtual bool RequiresTick() const override { return true; } virtual void Tick( float DeltaTime ) override; virtual void GenerateHeaderRowContent( FDetailWidgetRow& NodeRow ) override; virtual void GenerateChildContent( IDetailChildrenBuilder& ChildrenBuilder ) override; virtual FName GetName() const override { return SubjectKey; } virtual bool InitiallyCollapsed() const override { return false; } private: TWeakObjectPtr WeakOverrideAsset; FName SubjectKey; FSimpleDelegate OnRebuildChildren; TOptional LastHash; };