RealtimeStyleTransferRuntime/Plugins/UIExtension/Source/Public/Widgets/UIExtensionPointWidget.h

68 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "GameplayTagContainer.h"
#include "Components/DynamicEntryBoxBase.h"
#include "UIExtensionSystem.h"
#include "UIExtensionPointWidget.generated.h"
class UCommonLocalPlayer;
class APlayerState;
/**
* A slot that defines a location in a layout, where content can be added later
*/
UCLASS()
class UIEXTENSION_API UUIExtensionPointWidget : public UDynamicEntryBoxBase
{
GENERATED_BODY()
public:
DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(TSubclassOf<UUserWidget>, FOnGetWidgetClassForData, UObject*, DataItem);
DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnConfigureWidgetForData, UUserWidget*, Widget, UObject*, DataItem);
UUIExtensionPointWidget(const FObjectInitializer& ObjectInitializer);
//~UWidget interface
virtual void ReleaseSlateResources(bool bReleaseChildren) override;
virtual TSharedRef<SWidget> RebuildWidget() override;
#if WITH_EDITOR
virtual void ValidateCompiledDefaults(IWidgetCompilerLog& CompileLog) const override;
#endif
//~End of UWidget interface
private:
void ResetExtensionPoint();
void RegisterExtensionPoint();
void RegisterExtensionPointForPlayerState(UCommonLocalPlayer* LocalPlayer, APlayerState* PlayerState);
void OnAddOrRemoveExtension(EUIExtensionAction Action, const FUIExtensionRequest& Request);
protected:
/** The tag that defines this extension point */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Extension")
FGameplayTag ExtensionPointTag;
/** How exactly does the extension need to match the extension point tag. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Extension")
EUIExtensionPointMatch ExtensionPointTagMatch = EUIExtensionPointMatch::ExactMatch;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Extension")
TArray<TObjectPtr<UClass>> DataClasses;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="UI Extension", meta=( IsBindableEvent="True" ))
FOnGetWidgetClassForData GetWidgetClassForData;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="UI Extension", meta=( IsBindableEvent="True" ))
FOnConfigureWidgetForData ConfigureWidgetForData;
TArray<FUIExtensionPointHandle> ExtensionPointHandles;
UPROPERTY(Transient)
TMap<FUIExtensionHandle, UUserWidget*> ExtensionMapping;
};