81 lines
4.2 KiB
C++
81 lines
4.2 KiB
C++
// 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<FAssetData>& Assets, const FVector2f& GraphPosition, UEdGraph* Graph) const override;
|
|
virtual void GetAssetsGraphHoverMessage(const TArray<FAssetData>& 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;
|
|
};
|