// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" class FMenuBuilder; class FWidgetBlueprintEditor; class UMGEDITOR_API IWidgetContextMenuExtension { public: virtual ~IWidgetContextMenuExtension() { } virtual void ExtendContextMenu(FMenuBuilder& MenuBuilder, TSharedRef BlueprintEditor, FVector2D TargetLocation) const = 0; }; /** * Widget Context Menu extensibility manager holds a list of registered widget context menu extensions. */ class UMGEDITOR_API FWidgetContextMenuExtensibilityManager { public: void AddExtension(const TSharedRef& Extension) { if (ensure(!Extensions.Contains(Extension))) { Extensions.Add(Extension); } } void RemoveExtension(const TSharedRef& Extension) { int32 NumRemoved = Extensions.RemoveSingleSwap(Extension); ensure(NumRemoved == 1); } TArrayView> GetExtensions() const { return Extensions; } private: TArray> Extensions; }; /** Indicates that a class can extend drag & drop functionality */ class IHasWidgetContextMenuExtensibility { public: virtual TSharedPtr GetWidgetContextMenuExtensibilityManager() = 0; };