80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
// 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<SGraphPin> CreatePinWidget(UEdGraphPin* Pin) const override;
|
|
virtual void AddPin(const TSharedRef<SGraphPin>& 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<SCommentBubble> 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<SWidget> GetDefaultValueWidget() override;
|
|
virtual TSharedRef<FDragDropOperation> SpawnPinDragEvent(const TSharedRef<SGraphPanel>& InGraphPanel, const TArray< TSharedRef<SGraphPin> >& InStartingPins) override;
|
|
virtual FReply OnPinMouseDown(const FGeometry& SenderGeometry, const FPointerEvent& MouseEvent) override;
|
|
virtual FSlateColor GetPinColor() const override;
|
|
// End SGraphPin interface
|
|
};
|
|
|