Quartz UI ↗
Browse docs
On this page
Private preview · 0.57.0-devView Markdown

QuartzUIActions: declaration reference

0.57.0-dev · beta source documentation. Native, Blueprint, Editor and rendering examples are source-reviewed, not executed in Unreal during this scan. See validation and limits.

Pinned source (source: Source/QuartzUIRuntime/Public/QuartzUIActions.h) · integration recipe · practical guide

FQuartzUINamedActionHandler

Public delegate. Blueprint callback for one explicitly registered web-to-Unreal action.

Prerequisites / integration: Configured exact-player shell, QuartzUIRuntime dependency, one frontend client. Use the QuartzUIActions recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Register menu.continue, then SetActions with a localized FQuartzUIBoundAction. Handler registration belongs to gameplay owner; catalog is copied state.

Avoid: Treating a displayed catalog entry as handler authorization. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIActions.h#L8)

FQuartzUIActionReceived

Public delegate. Observable action signal shared by the logical view and convenience shell hosts.

Prerequisites / integration: Configured exact-player shell, QuartzUIRuntime dependency, one frontend client. Use the QuartzUIActions recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Register menu.continue, then SetActions with a localized FQuartzUIBoundAction. Handler registration belongs to gameplay owner; catalog is copied state.

Avoid: Treating a displayed catalog entry as handler authorization. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIActions.h#L11)

FQuartzUINativeNamedActionHandler

Public delegate. C++ callback equivalent of FQuartzUINamedActionHandler.

Prerequisites / integration: Configured exact-player shell, QuartzUIRuntime dependency, one frontend client. Use the QuartzUIActions recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Register menu.continue, then SetActions with a localized FQuartzUIBoundAction. Handler registration belongs to gameplay owner; catalog is copied state.

Avoid: Treating a displayed catalog entry as handler authorization. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIActions.h#L14)

FQuartzUIBoundAction

Public type. Contextual logical action presented by one web view.

Prerequisites / integration: Configured exact-player shell, QuartzUIRuntime dependency, one frontend client. Use the QuartzUIActions recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Register menu.continue, then SetActions with a localized FQuartzUIBoundAction. Handler registration belongs to gameplay owner; catalog is copied state.

Avoid: Treating a displayed catalog entry as handler authorization. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIActions.h#L18)

FQuartzUIActionPolicy

Internal type. Validation and deterministic protocol-v1 serialization for action catalogs.

Prerequisites / integration: Configured exact-player shell, QuartzUIRuntime dependency, one frontend client. Use the QuartzUIActions recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Register menu.continue, then SetActions with a localized FQuartzUIBoundAction. Handler registration belongs to gameplay owner; catalog is copied state.

Avoid: Treating a displayed catalog entry as handler authorization. This named helper is runtime-owned; inspect/use it through the owner above rather than constructing it in gameplay.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIActions.h#L56)

Complete header

Source snapshot, not an additional example. Unreal annotations distinguish exposed Blueprint nodes from native-only/private methods.

#pragma once

#include "CoreMinimal.h"

#include "QuartzUIActions.generated.h"

/** Blueprint callback for one explicitly registered web-to-Unreal action. */
DECLARE_DYNAMIC_DELEGATE_OneParam(FQuartzUINamedActionHandler, FName, ActionName);

/** Observable action signal shared by the logical view and convenience shell hosts. */
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FQuartzUIActionReceived, FName, ActionName);

/** C++ callback equivalent of FQuartzUINamedActionHandler. */
DECLARE_DELEGATE_OneParam(FQuartzUINativeNamedActionHandler, FName);

/** Contextual logical action presented by one web view. */
USTRUCT(BlueprintType, meta = (QuartzUITypeName = "QuartzUIBoundAction"))
struct QUARTZUIRUNTIME_API FQuartzUIBoundAction
{
	GENERATED_BODY()

	/** Open, backend-neutral name such as ui.back or inventory.drop. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Actions", meta = (QuartzUIName = "action"))
	FName ActionName;

	/** Localize in Unreal; JavaScript receives the resolved display string. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Actions", meta = (QuartzUIName = "label"))
	FText DisplayName;

	/** Lower values appear first. Equal values retain registration order. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Actions", meta = (ClampMin = "-10000", ClampMax = "10000", QuartzUIName = "priority"))
	int32 DisplayPriority = 0;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Actions", meta = (QuartzUIName = "enabled"))
	bool bEnabled = true;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Actions", meta = (QuartzUIName = "display"))
	bool bDisplayInActionBar = true;

	/** Zero is an ordinary action; positive values describe a hold action. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Actions", meta = (ClampMin = "0.0", ClampMax = "60.0", QuartzUIName = "holdSeconds"))
	float HoldDurationSeconds = 0.0f;

	bool operator==(const FQuartzUIBoundAction& Other) const
	{
		return ActionName == Other.ActionName
			&& DisplayName.EqualTo(Other.DisplayName)
			&& DisplayPriority == Other.DisplayPriority
			&& bEnabled == Other.bEnabled
			&& bDisplayInActionBar == Other.bDisplayInActionBar
			&& HoldDurationSeconds == Other.HoldDurationSeconds;
	}
};

/** Validation and deterministic protocol-v1 serialization for action catalogs. */
class QUARTZUIRUNTIME_API FQuartzUIActionPolicy final
{
public:
	static constexpr int32 MaxBoundActions = 64;
	static constexpr int32 MaxRegisteredActions = 64;
	static bool IsValidBoundAction(const FQuartzUIBoundAction& Action);
	static bool IsValidNamedAction(FName ActionName);
	/** Strictly decodes the exact {"action":"..."} reserved endpoint payload. */
	static bool TryParseNamedActionRequest(const FString& PayloadJson, FName& OutActionName);
	static bool TrySerializeBoundActions(
		const TArray<FQuartzUIBoundAction>& Actions,
		FString& OutPayloadJson);
};