Files
PHY/Source/PHY/Public/UI/PHYAttributePageWidget.h

73 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "PHYAttributePageWidget.generated.h"
class UPHYAttributeGroupWidget;
class UScrollBox;
class UTextBlock;
class UUniformGridPanel;
class UVerticalBox;
/**
* @brief 属性分页子控件。
*
* 分页只负责标题和分组容器,具体属性项由分组和属性行子控件承载。
*/
UCLASS(BlueprintType, Blueprintable)
class PHY_API UPHYAttributePageWidget : public UUserWidget
{
GENERATED_BODY()
public:
/** @brief 构造属性分页控件。 */
UPHYAttributePageWidget(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
/** @brief 构建原生分页 WidgetTree。 */
virtual TSharedRef<SWidget> RebuildWidget() override;
/** @brief 同步分页显示。 */
virtual void SynchronizeProperties() override;
/** @brief 设置分页标题。 */
UFUNCTION(BlueprintCallable, Category="PHY|UI|Attributes")
void SetPageTitle(FText InPageTitle);
/** @brief 清理当前分页内所有分组。 */
UFUNCTION(BlueprintCallable, Category="PHY|UI|Attributes")
void ClearGroups();
/** @brief 添加一个属性分组。 */
UFUNCTION(BlueprintCallable, Category="PHY|UI|Attributes")
UPHYAttributeGroupWidget* AddGroup(FText GroupTitle);
protected:
/** @brief 构造原生分页树。 */
void BuildNativeWidgetTree();
/** @brief 刷新分页标题。 */
void UpdatePageWidgets();
/** @brief 分页标题。 */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="PHY|UI|Attributes")
FText PageTitle;
/** @brief 标题文本。 */
UPROPERTY(Transient)
TObjectPtr<UTextBlock> TitleText;
/** @brief 分组滚动区域。 */
UPROPERTY(Transient)
TObjectPtr<UScrollBox> GroupsScrollBox;
/** @brief 分组容器。 */
UPROPERTY(Transient)
TObjectPtr<UUniformGridPanel> GroupsGrid;
/** @brief 当前分页分组数量,用于双列排版。 */
int32 GroupCount = 0;
};