123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- // Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
- #include "SExtAssetDiscoveryIndicator.h"
- #include "ExtContentBrowserSingleton.h"
- #include "Widgets/SBoxPanel.h"
- #include "Widgets/Layout/SBorder.h"
- #include "Widgets/Notifications/SProgressBar.h"
- #include "Widgets/Text/STextBlock.h"
- #include "Widgets/Layout/SBox.h"
- #include "EditorStyleSet.h"
- #include "AssetRegistry/AssetRegistryModule.h"
- #define LOCTEXT_NAMESPACE "AssetDiscoveryIndicator"
- namespace AssetDiscoveryIndicatorConstants
- {
- static const FMargin Padding(4, 0);
- static const FMargin SubStatusTextPadding(2, 0, 4, 0);
- }
- SExtAssetDiscoveryIndicator::~SExtAssetDiscoveryIndicator()
- {
- if ( FModuleManager::Get().IsModuleLoaded(TEXT("AssetRegistry")) )
- {
- FExtAssetRegistry& AssetRegistry = FExtContentBrowserSingleton::GetAssetRegistry();
- AssetRegistry.OnAssetGatherProgressUpdated().RemoveAll( this );
- //AssetRegistryModule.Get().OnFilesLoaded().RemoveAll( this );
- }
- }
- void SExtAssetDiscoveryIndicator::Construct( const FArguments& InArgs )
- {
- FExtAssetRegistry& AssetRegistry = FExtContentBrowserSingleton::GetAssetRegistry();
- AssetRegistry.OnAssetGatherProgressUpdated().AddSP( this, &SExtAssetDiscoveryIndicator::OnAssetRegistryFileLoadProgress );
- //AssetRegistryModule.Get().OnFilesLoaded().AddSP( this, &SExtAssetDiscoveryIndicator::OnAssetRegistryFilesLoaded );
- ScaleMode = InArgs._ScaleMode;
- FadeAnimation = FCurveSequence();
- FadeAnimation.AddCurve(0.f, 4.f); // Add some space at the beginning to delay before fading in
- ScaleCurve = FadeAnimation.AddCurve(4.f, 0.75f);
- FadeCurve = FadeAnimation.AddCurve(4.75f, 0.75f);
- FadeAnimation.AddCurve(5.5f, 1.f); // Add some space at the end to cause a short delay before fading out
- MainStatusText = LOCTEXT("InitializingAssetDiscovery", "Initializing Asset Discovery");
- StatusTextWrapWidth = 0.0f;
- if (AssetRegistry.IsGatheringAssets() )
- {
- // Loading assets, marquee while discovering package files
- Progress = TOptional<float>();
- if ( InArgs._FadeIn )
- {
- FadeAnimation.Play( this->AsShared() );
- }
- else
- {
- FadeAnimation.JumpToEnd();
- }
- }
- else
- {
- // Already done loading assets, set to complete and don't play the complete animation
- Progress = 1.f;
- }
- ChildSlot
- [
- SNew(SVerticalBox)
- +SVerticalBox::Slot()
- .Padding(InArgs._Padding)
- .HAlign(HAlign_Center)
- [
- SNew(SBorder)
- .BorderImage(FAppStyle::GetBrush("ToolPanel.GroupBorder"))
- .Padding(0)
- //.BorderBackgroundColor(this, &SExtAssetDiscoveryIndicator::GetBorderBackgroundColor)
- //.ColorAndOpacity(this, &SExtAssetDiscoveryIndicator::GetIndicatorColorAndOpacity)
- .DesiredSizeScale(this, &SExtAssetDiscoveryIndicator::GetIndicatorDesiredSizeScale)
- .Visibility(this, &SExtAssetDiscoveryIndicator::GetIndicatorVisibility)
- .VAlign(VAlign_Center)
- [
- #if 0
- SNew(SVerticalBox)
- // Text
- +SVerticalBox::Slot()
- .AutoHeight()
- .Padding(AssetDiscoveryIndicatorConstants::Padding)
- [
- SNew(SVerticalBox)
- +SVerticalBox::Slot()
- .AutoHeight()
- [
- SNew(STextBlock)
- .Font(FAppStyle::GetFontStyle("AssetDiscoveryIndicator.MainStatusFont"))
- .Text(this, &SExtAssetDiscoveryIndicator::GetMainStatusText)
- .WrapTextAt(this, &SExtAssetDiscoveryIndicator::GetStatusTextWrapWidth)
- .Justification(ETextJustify::Center)
- ]
- +SVerticalBox::Slot()
- .AutoHeight()
- [
- SNew(SBox)
- .Padding(AssetDiscoveryIndicatorConstants::SubStatusTextPadding)
- .Visibility(this, &SExtAssetDiscoveryIndicator::GetSubStatusTextVisibility)
- [
- SNew(STextBlock)
- .Font(FAppStyle::GetFontStyle("AssetDiscoveryIndicator.SubStatusFont"))
- .Text(this, &SExtAssetDiscoveryIndicator::GetSubStatusText)
- .WrapTextAt(this, &SExtAssetDiscoveryIndicator::GetStatusTextWrapWidth)
- .Justification(ETextJustify::Center)
- ]
- ]
- ]
- // Progress bar
- +SVerticalBox::Slot()
- .AutoHeight()
- .Padding(AssetDiscoveryIndicatorConstants::Padding)
- [
- SNew(SProgressBar)
- .Percent(this, &SExtAssetDiscoveryIndicator::GetProgress)
- ]
- #endif
- SNew(SHorizontalBox)
- // Progress bar
- + SHorizontalBox::Slot()
- //.Padding(AssetDiscoveryIndicatorConstants::Padding)
- .Padding(AssetDiscoveryIndicatorConstants::Padding)
- [
- SNew(SBox)
- .Padding(0)
- .WidthOverride(100.f)
- .MinDesiredWidth(100.f)
- [
- SNew(SProgressBar)
- .Percent(this, &SExtAssetDiscoveryIndicator::GetProgress)
- ]
- ]
- // Text
- + SHorizontalBox::Slot()
- .AutoWidth()
- .Padding(AssetDiscoveryIndicatorConstants::Padding)
- [
- SNew(SBox)
- //.Padding(AssetDiscoveryIndicatorConstants::SubStatusTextPadding)
- .Padding(0)
- .Visibility(this, &SExtAssetDiscoveryIndicator::GetSubStatusTextVisibility)
- [
- SNew(STextBlock)
- .Font(FAppStyle::GetFontStyle("AssetDiscoveryIndicator.SubStatusFont"))
- .Text(this, &SExtAssetDiscoveryIndicator::GetSubStatusText)
- .WrapTextAt(this, &SExtAssetDiscoveryIndicator::GetStatusTextWrapWidth)
- .Justification(ETextJustify::Center)
- ]
- ]
- ]
- ]
- ];
- }
- void SExtAssetDiscoveryIndicator::Tick( const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime )
- {
- // Calculate the wrapping width based on our complete alloted width
- // We do this rather than auto-wrap because the size of the text changes, and auto-wrapping prevents the text block from being able to grow if the text shrinks
- StatusTextWrapWidth = AllottedGeometry.GetLocalSize().X - (AssetDiscoveryIndicatorConstants::Padding.Left + AssetDiscoveryIndicatorConstants::Padding.Right);
- }
- void SExtAssetDiscoveryIndicator::OnAssetRegistryFileLoadProgress(const FExtAssetRegistry::FAssetGatherProgressUpdateData& ProgressUpdateData)
- {
- if (ProgressUpdateData.bIsDiscoveringAssetFiles)
- {
- // Marquee while we're discovering asset files as we can't yet show an accurate percentage
- Progress = TOptional<float>();
- MainStatusText = LOCTEXT("DiscoveringAssetFiles", "Discovering Asset Files");
- SubStatusText = FText::Format(LOCTEXT("XFilesFoundFmt", "{0} files found"), FText::AsNumber(ProgressUpdateData.NumTotalAssets));
- }
- else
- {
- if (ProgressUpdateData.NumTotalAssets > 0)
- {
- Progress = ProgressUpdateData.NumAssetsProcessedByAssetRegistry / (float)ProgressUpdateData.NumTotalAssets;
- }
- else
- {
- Progress = 0.0f;
- }
- if (ProgressUpdateData.NumAssetsPendingDataLoad > 0)
- {
- MainStatusText = LOCTEXT("DiscoveringAssetData", "Discovering Asset Data");
- SubStatusText = FText::Format(LOCTEXT("XAssetsRemainingFmt", "{0} assets remaining"), FText::AsNumber(ProgressUpdateData.NumAssetsPendingDataLoad));
- }
- else
- {
- const int32 NumAssetsLeftToProcess = ProgressUpdateData.NumTotalAssets - ProgressUpdateData.NumAssetsProcessedByAssetRegistry;
- if (NumAssetsLeftToProcess == 0)
- {
- OnAssetRegistryFilesLoaded();
- }
- else
- {
- //if (FadeAnimation.IsAtStart())
- {
- FadeAnimation.JumpToEnd();
- }
- MainStatusText = LOCTEXT("ProcessingAssetData", "Processing Asset Data");
- SubStatusText = FText::Format(LOCTEXT("XAssetsRemainingFmt", "{0} assets remaining"), FText::AsNumber(NumAssetsLeftToProcess));
- }
- }
- }
- }
- void SExtAssetDiscoveryIndicator::OnAssetRegistryFilesLoaded()
- {
- if (!FadeAnimation.IsAtStart())
- {
- MainStatusText = LOCTEXT("FinishedAssetDiscovery", "Finished Asset Discovery");
- SubStatusText = FText::GetEmpty();
- if (FadeAnimation.IsPlaying())
- {
- if (FadeAnimation.IsForward())
- {
- // Still fading in - reverse so we fade back out
- FadeAnimation.Reverse();
- }
- else
- {
- // Do nothing - already fading out
- }
- }
- else
- {
- // Play the fade out animation
- FadeAnimation.PlayReverse(this->AsShared());
- }
- }
- }
- FText SExtAssetDiscoveryIndicator::GetMainStatusText() const
- {
- return MainStatusText;
- }
- FText SExtAssetDiscoveryIndicator::GetSubStatusText() const
- {
- return SubStatusText;
- }
- TOptional<float> SExtAssetDiscoveryIndicator::GetProgress() const
- {
- return Progress;
- }
- EVisibility SExtAssetDiscoveryIndicator::GetSubStatusTextVisibility() const
- {
- return (SubStatusText.IsEmpty()) ? EVisibility::Collapsed : EVisibility::Visible;
- }
- float SExtAssetDiscoveryIndicator::GetStatusTextWrapWidth() const
- {
- return StatusTextWrapWidth;
- }
- FSlateColor SExtAssetDiscoveryIndicator::GetBorderBackgroundColor() const
- {
- return FSlateColor(FLinearColor(1, 1, 1, 0.8f * FadeCurve.GetLerp()));
- }
- FLinearColor SExtAssetDiscoveryIndicator::GetIndicatorColorAndOpacity() const
- {
- return FLinearColor(1, 1, 1, FadeCurve.GetLerp());
- }
- FVector2D SExtAssetDiscoveryIndicator::GetIndicatorDesiredSizeScale() const
- {
- const float Lerp = ScaleCurve.GetLerp();
- switch (ScaleMode)
- {
- case EAssetDiscoveryIndicatorScaleMode::Scale_Horizontal: return FVector2D(Lerp, 1);
- case EAssetDiscoveryIndicatorScaleMode::Scale_Vertical: return FVector2D(1, Lerp);
- case EAssetDiscoveryIndicatorScaleMode::Scale_Both: return FVector2D(Lerp, Lerp);
- default:
- return FVector2D(1, 1);
- }
- }
- EVisibility SExtAssetDiscoveryIndicator::GetIndicatorVisibility() const
- {
- //return FadeAnimation.IsAtStart() ? EVisibility::Collapsed : EVisibility::HitTestInvisible;
- return FExtContentBrowserSingleton::GetAssetRegistry().IsGatheringAssets() ? EVisibility::HitTestInvisible : EVisibility::Collapsed;
- }
- #undef LOCTEXT_NAMESPACE
|