Files
UnrealEngine/Engine/Source/Editor/EditorWidgets/Private/SAssetDiscoveryIndicator.h
2025-05-18 13:04:45 +08:00

109 lines
3.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Animation/CurveHandle.h"
#include "Animation/CurveSequence.h"
#include "AssetDiscoveryIndicator.h"
#include "AssetRegistry/IAssetRegistry.h"
#include "Internationalization/Text.h"
#include "Layout/Margin.h"
#include "Layout/Visibility.h"
#include "Math/Color.h"
#include "Math/Vector2D.h"
#include "Misc/Attribute.h"
#include "Misc/Optional.h"
#include "Styling/SlateColor.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Widgets/SCompoundWidget.h"
struct FGeometry;
/** An indicator for the progress of the asset registry background search */
class SAssetDiscoveryIndicator : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS( SAssetDiscoveryIndicator )
: _ScaleMode(EAssetDiscoveryIndicatorScaleMode::Scale_None)
, _FadeIn(true)
{
// This widget has no interactive controls and is used as an overlay,
// so removing it from the hit test grid will stop it from eating scroll events.
_Visibility = EVisibility::SelfHitTestInvisible;
}
/** The way the indicator will scale out when done displaying progress */
SLATE_ARGUMENT( EAssetDiscoveryIndicatorScaleMode::Type, ScaleMode )
/** The padding to apply to the background of the indicator */
SLATE_ARGUMENT( FMargin, Padding )
/** If true, this widget will fade in after a short delay */
SLATE_ARGUMENT( bool, FadeIn )
SLATE_END_ARGS()
/** Destructor */
virtual ~SAssetDiscoveryIndicator();
/** Constructs this widget with InArgs */
void Construct( const FArguments& InArgs );
// SCompoundWidget interface
virtual void Tick( const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime ) override;
/** Handles updating the progress from the asset registry */
void OnAssetRegistryFileLoadProgress(const IAssetRegistry::FFileLoadProgressUpdateData& ProgressUpdateData);
/** Handles updating the progress from the asset registry */
void OnAssetRegistryFilesLoaded();
/** Gets the main status text */
FText GetMainStatusText() const;
/** Gets the sub status text */
FText GetSubStatusText() const;
/** Gets the progress bar fraction */
TOptional<float> GetProgress() const;
/** Gets the sub status text visbility */
EVisibility GetSubStatusTextVisibility() const;
/** Get the current wrap point for the status text */
float GetStatusTextWrapWidth() const;
/** Gets the background's opacity */
FSlateColor GetBorderBackgroundColor() const;
/** Gets the whole widget's opacity */
FLinearColor GetIndicatorColorAndOpacity() const;
/** Gets the whole widget's opacity */
FVector2D GetIndicatorDesiredSizeScale() const;
/** Gets the whole widget's visibility */
EVisibility GetIndicatorVisibility() const;
private:
/** The main status text */
FText MainStatusText;
/** The sub status text (if any) */
FText SubStatusText;
/** The asset registry's asset discovery progress as a percentage */
TOptional<float> Progress;
/** The current wrap point for the status text */
float StatusTextWrapWidth;
/** The way the indicator will scale in/out before/after displaying progress */
EAssetDiscoveryIndicatorScaleMode::Type ScaleMode;
/** The fade in/out animation */
FCurveSequence FadeAnimation;
FCurveHandle FadeCurve;
FCurveHandle ScaleCurve;
};