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

QuartzUIProviderBindingComponent: 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/QuartzUIProviderBindingComponent.h) · integration recipe · practical guide

EQuartzUIProviderBindingComponentState

Public type. Feature-owned provider activation state for one exact local player.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUIProviderBindingComponent recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

Avoid: Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L16)

FQuartzUIProviderBindingComponentStateChanged

Public delegate. Provider Binding Component State Changed: callback signature for actor-owned provider activation with exact-player resolution and retry.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUIProviderBindingComponent recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

Avoid: Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L26)

FQuartzUIProviderBindingComponentFailed

Public delegate. Provider Binding Component Failed: callback signature for actor-owned provider activation with exact-player resolution and retry.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUIProviderBindingComponent recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

Avoid: Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L31)

UQuartzUIProviderBindingComponent

Public type. Instantiates app-registered providers for the exact local player resolved through this component's controller, HUD, pawn, or owner chain. A project can add this component, or a Blueprint subclass with a provider subset, through stock GameFeatureAction_AddComponents. Component removal releases every provider while the GameInstance-owned browser shell remains.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUIProviderBindingComponent recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

Avoid: Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L45)

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 "QuartzUIBindingScope.h"
#include "QuartzUIBindingComponentBase.h"

#include "QuartzUIProviderBindingComponent.generated.h"

class ULocalPlayer;
class UQuartzUIProvider;
class UQuartzUIProviderSet;
class UQuartzUIView;

/** Feature-owned provider activation state for one exact local player. */
UENUM(BlueprintType)
enum class EQuartzUIProviderBindingComponentState : uint8
{
	Inactive,
	WaitingForLocalPlayer,
	WaitingForShell,
	WaitingForProviders,
	Bound,
	Failed
};

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(
	FQuartzUIProviderBindingComponentStateChanged,
	EQuartzUIProviderBindingComponentState, PreviousState,
	EQuartzUIProviderBindingComponentState, NewState);

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(
	FQuartzUIProviderBindingComponentFailed,
	FName, ErrorCode);

/**
 * Instantiates app-registered providers for the exact local player resolved
 * through this component's controller, HUD, pawn, or owner chain.
 *
 * A project can add this component, or a Blueprint subclass with a provider
 * subset, through stock GameFeatureAction_AddComponents. Component removal
 * releases every provider while the GameInstance-owned browser shell remains.
 */
UCLASS(BlueprintType, Blueprintable, ClassGroup = (QuartzUI),
	meta = (BlueprintSpawnableComponent, DisplayName = "QuartzUI Provider Binding"))
class QUARTZUIRUNTIME_API UQuartzUIProviderBindingComponent : public UQuartzUIBindingComponentBase
{
	GENERATED_BODY()

public:
	UQuartzUIProviderBindingComponent();

	/** Requests provider activation now and reconciles ordinary startup races. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|Providers",
		meta = (DisplayName = "Activate UI Providers"))
	bool ActivateProviderBinding();

	/** Idempotently cancels retries and releases all feature-owned providers. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|Providers",
		meta = (DisplayName = "Deactivate UI Providers"))
	bool DeactivateProviderBinding();

	/** Rebuilds a failed or pending binding without recreating the component. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|Providers",
		meta = (DisplayName = "Retry UI Providers"))
	bool RetryProviderBinding();

	UFUNCTION(BlueprintPure, Category = "QuartzUI|Providers")
	TArray<UQuartzUIProvider*> GetBoundProviders() const;

	UFUNCTION(BlueprintPure, Category = "QuartzUI|Providers")
	UQuartzUIProvider* GetBoundProvider(TSubclassOf<UQuartzUIProvider> ProviderClass) const;

	UFUNCTION(BlueprintPure, Category = "QuartzUI|Providers")
	EQuartzUIProviderBindingComponentState GetBindingState() const { return BindingState; }

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|Providers")
	FQuartzUIProviderBindingComponentStateChanged OnBindingStateChanged;

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|Providers")
	FQuartzUIProviderBindingComponentFailed OnBindingFailed;

	/**
	 * Optional feature subset. Empty binds every provider registered by the shell
	 * app. Every listed exact class must also be registered in that app asset.
	 */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|Providers")
	TArray<TSubclassOf<UQuartzUIProvider>> ProviderClasses;

	/** Optional reusable set merged with ProviderClasses before exact-class validation. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|Providers")
	TSoftObjectPtr<UQuartzUIProviderSet> ProviderSet;

protected:
	virtual bool HasLiveBinding() const override;
	virtual EQuartzUIBindingAttachResult AttachBinding(
		ULocalPlayer* LocalPlayer,
		UQuartzUIView* Shell,
		FName& OutError) override;
	virtual void ReleaseBinding() override;
	virtual void HandleBindingAttached() override;
	virtual void HandleBindingLifecycleStateChanged(
		EQuartzUIBindingComponentLifecycleState PreviousState,
		EQuartzUIBindingComponentLifecycleState NewState) override;
	virtual void HandleBindingFailure(FName ErrorCode) override;

private:
	bool ResolveProviderClasses(
		UQuartzUIView* View,
		TArray<UClass*>& OutClasses,
		FName& OutError) const;
	void ReleaseProviders();
	void ReconcileProviderStates();

	UFUNCTION()
	void HandleProviderStateChanged(
		EQuartzUIBindingScopeState PreviousState,
		EQuartzUIBindingScopeState NewState);

	UFUNCTION()
	void HandleProviderFailed(FName ErrorCode);

	UPROPERTY(Transient)
	TArray<TObjectPtr<UQuartzUIProvider>> BoundProviders;

	UPROPERTY(Transient)
	TObjectPtr<UQuartzUIView> BoundView;

	EQuartzUIProviderBindingComponentState BindingState =
		EQuartzUIProviderBindingComponentState::Inactive;
	bool bReleasingProviders = false;
};