// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "Containers/UnrealString.h" #include "GraphEditorDragDropAction.h" #include "Input/DragAndDrop.h" #include "Input/Reply.h" #include "Math/Vector2D.h" #include "Templates/SharedPointer.h" class SGraphNode; class SGraphPanel; class SWidget; class UEdGraph; class UEdGraphNode; class GRAPHEDITOR_API FDragNode : public FGraphEditorDragDropAction { public: DRAG_DROP_OPERATOR_TYPE(FDragNode, FGraphEditorDragDropAction) static TSharedRef New(const TSharedRef& InGraphPanel, const TSharedRef& InDraggedNode); static TSharedRef New(const TSharedRef& InGraphPanel, const TArray< TSharedRef >& InDraggedNodes); // FGraphEditorDragDropAction interface virtual void HoverTargetChanged() override; virtual FReply DroppedOnNode(const FVector2f& ScreenPosition, const FVector2f& GraphPosition) override; virtual FReply DroppedOnPanel( const TSharedRef< SWidget >& Panel, const FVector2f& ScreenPosition, const FVector2f& GraphPosition, UEdGraph& Graph) override; //virtual void OnDragBegin( const TSharedRef& InPin) override; virtual void OnDragged (const class FDragDropEvent& DragDropEvent ) override; // End of FGraphEditorDragDropAction interface const TArray< TSharedRef > & GetNodes() const; virtual bool IsValidOperation() const; protected: typedef FGraphEditorDragDropAction Super; UEdGraphNode* GetGraphNodeForSGraphNode(TSharedRef& SNode); protected: /** graph panel */ TSharedPtr GraphPanel; /** our dragged nodes*/ TArray< TSharedRef > DraggedNodes; /** Offset information for the decorator widget */ FVector2f DecoratorAdjust; /** if we can drop our node here*/ bool bValidOperation; };