// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "EdGraph/EdGraphSchema.h" #include "PCGEditorCommon.h" #include "Editor/PCGGraphCustomization.h" #include "ConnectionDrawingPolicy.h" #include "StructUtils/PropertyBag.h" #include "PCGEditorGraphSchema.generated.h" enum class EPCGElementType : uint8; class UPCGEditorGraph; struct FPCGActionsFilter { explicit FPCGActionsFilter(const UEdGraph* InEdGraph, EPCGElementType InElementFilterType = EPCGElementType::All); bool Accepts(const FText& InCategory) const; EPCGElementType FilterType = EPCGElementType::All; const UPCGEditorGraph* Graph = nullptr; FPCGGraphEditorCustomization Customization; }; UCLASS() class UPCGEditorGraphSchema : public UEdGraphSchema { GENERATED_BODY() public: void GetPaletteActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; //~ Begin EdGraphSchema Interface virtual void GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const override; virtual FLinearColor GetPinTypeColor(const FEdGraphPinType& PinType) const override; virtual const FPinConnectionResponse CanCreateConnection(const UEdGraphPin* A, const UEdGraphPin* B) const override; virtual bool TryCreateConnection(UEdGraphPin* A, UEdGraphPin* B) const override; virtual void BreakPinLinks(UEdGraphPin& TargetPin, bool bSendsNodeNotification) const override; virtual void BreakSinglePinLink(UEdGraphPin* SourcePin, UEdGraphPin* TargetPin) const override; virtual FConnectionDrawingPolicy* CreateConnectionDrawingPolicy(int32 InBackLayerID, int32 InFrontLayerID, float InZoomFactor, const FSlateRect& InClippingRect, class FSlateWindowElementList& InDrawElements, class UEdGraph* InGraphObj) const override; virtual void DroppedAssetsOnGraph(const TArray& Assets, const FVector2f& GraphPosition, UEdGraph* Graph) const override; virtual void GetAssetsGraphHoverMessage(const TArray& Assets, const UEdGraph* HoverGraph, FString& OutTooltipText, bool& OutOkIcon) const override; virtual void OnPinConnectionDoubleCicked(UEdGraphPin* PinA, UEdGraphPin* PinB, const FVector2f& GraphPosition) const override; //~ End EdGraphSchema Interface virtual const FSlateBrush* GetMetadataTypeSlateBrush(EPCGContainerType ContainerType) const; virtual FLinearColor GetMetadataTypeColor(EPCGMetadataTypes Type) const; virtual const FSlateBrush* GetPropertyBagTypeSlateBrush(EPropertyBagContainerType ContainerType) const; virtual FLinearColor GetPropertyBagTypeColor(const FPropertyBagPropertyDesc& Desc) const; private: void GetGraphActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter, bool bIsContextual) const; void GetNativeElementActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; void GetBlueprintElementActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; void GetSubgraphElementActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; void GetSettingsElementActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter, bool bIsContextual) const; void GetExtraElementActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; void GetNamedRerouteUsageActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; void GetDataAssetActions(FGraphActionMenuBuilder& ActionMenuBuilder, const FPCGActionsFilter& ActionFilter) const; virtual bool TryCreateConnectionInternal(UEdGraphPin* A, UEdGraphPin* B, bool bAddConversionNodeIfNeeded) const; }; class FPCGEditorConnectionDrawingPolicy : public FConnectionDrawingPolicy { public: FPCGEditorConnectionDrawingPolicy(int32 InBackLayerID, int32 InFrontLayerID, float InZoomFactor, const FSlateRect& InClippingRect, FSlateWindowElementList& InDrawElements, UEdGraph* InGraph); virtual void DetermineWiringStyle(UEdGraphPin* OutputPin, UEdGraphPin* InputPin, /*inout*/ FConnectionParams& Params) override; protected: bool UpdateParamsIfDebugging(UEdGraphPin* OutputPin, UEdGraphPin* InputPin, FConnectionParams& Params); UPCGEditorGraph* Graph; };