// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IDetailCustomization.h" #include "IPropertyTypeCustomization.h" #include "PropertyEditorModule.h" #include "ControlRigIOMapping.h" class URigVMPin; class IDetailCategoryBuilder; class UEdGraphNode; class URigVMNode; struct FRigVMVariableMappingInfo; struct FControlRigTraitSharedData; namespace UE::Workspace { class IWorkspaceEditor; } namespace UE::AnimNext::Editor { class FControlRigTraitSharedDataCustomization : public IPropertyTypeCustomization { public: FControlRigTraitSharedDataCustomization() = default; virtual ~FControlRigTraitSharedDataCustomization(); private: // IPropertyTypeCustomization interface virtual void CustomizeHeader(TSharedRef PropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& CustomizationUtils) override; virtual void CustomizeChildren(TSharedRef PropertyHandle, IDetailChildrenBuilder& ChildBuilder, IPropertyTypeCustomizationUtils& CustomizationUtils) override; // --- IO Mapping --- void OnVariableMappingChanged(const FName& PathName, const FName& Curve, bool bInput); void OnPropertyExposeCheckboxChanged(ECheckBoxState NewState, FName PropertyName); static TSharedPtr GetControlRigSharedData(const TSharedPtr& StructPropertyHandle); UClass* GetTargetClass() const; USkeleton* GetTargetSkeleton() const; static const FControlRigIOMapping::FControlsInfo* GetControlInfo(const TArray& Controls, const FName& ControlName); static bool IsVariableProperty(FControlRigTraitSharedData* ControlRigTraitSharedData, const FName& PropertyName); void OnObjectsReinstanced(const TMap& OldToNewInstanceMap); FString FindControlRigTraitPinName(URigVMNode* ModelNode); TSharedPtr StructPropertyHandle; TSharedPtr ScopedControlRigTraitSharedData; TWeakObjectPtr SelectedNodeWeak = nullptr; TArray CustomPinProperties; TSharedPtr ControlRigIOMapping; FDelegateHandle OnObjectsReinstancedHandle; }; }