// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Math/Vector2D.h" #include "SGraphNodeDefault.h" #include "SGraphPin.h" #include "Templates/SharedPointer.h" #include "Types/SlateEnums.h" #include "Widgets/DeclarativeSyntaxSupport.h" class FText; class SCommentBubble; class SGraphPin; class UEdGraphPin; struct FSlateBrush; /** The visual representation of a control point meant to adjust how connections are routed, also known as a Reroute node. * The input knot node should have properly implemented ShouldDrawNodeAsControlPointOnly to return true with valid indices for its pins. */ class GRAPHEDITOR_API SGraphNodeKnot : public SGraphNodeDefault { public: SLATE_BEGIN_ARGS(SGraphNodeKnot) {} SLATE_END_ARGS() void Construct(const FArguments& InArgs, class UEdGraphNode* InKnot); // SGraphNode interface virtual void UpdateGraphNode() override; virtual const FSlateBrush* GetShadowBrush(bool bSelected) const override; virtual TSharedPtr CreatePinWidget(UEdGraphPin* Pin) const override; virtual void AddPin(const TSharedRef& PinToAdd) override; virtual void RequestRenameOnSpawn() override { } // End of SGraphNode interface protected: /** Returns Offset to center comment on the node's only pin */ FVector2f GetCommentOffset() const; protected: /** Toggles the hovered visibility state */ virtual void OnCommentBubbleToggled(bool bInCommentBubbleVisible) override; /** If bHoveredCommentVisibility is true, hides the comment bubble after a change is committed */ virtual void OnCommentTextCommitted(const FText& NewComment, ETextCommit::Type CommitInfo) override; /** The hovered visibility state. If false, comment bubble will only appear on hover. */ bool bAlwaysShowCommentBubble; /** SharedPtr to comment bubble */ TSharedPtr CommentBubble; const FSlateBrush* ShadowBrush; const FSlateBrush* ShadowBrushSelected; }; class GRAPHEDITOR_API SGraphPinKnot : public SGraphPin { public: SLATE_BEGIN_ARGS(SGraphPinKnot) {} SLATE_END_ARGS() void Construct(const FArguments& InArgs, UEdGraphPin* InPin); // SWidget interface virtual void OnDragEnter(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override; // End of SWidget interface protected: // Begin SGraphPin interface virtual TSharedRef GetDefaultValueWidget() override; virtual TSharedRef SpawnPinDragEvent(const TSharedRef& InGraphPanel, const TArray< TSharedRef >& InStartingPins) override; virtual FReply OnPinMouseDown(const FGeometry& SenderGeometry, const FPointerEvent& MouseEvent) override; virtual FSlateColor GetPinColor() const override; // End SGraphPin interface };