// Copyright Epic Games, Inc. All Rights Reserved. #include "ToolElementRegistry.h" #include "Widgets/SNullWidget.h" void FToolElementRegistrationArgs::UpdateWidget() { } void FToolElementRegistrationArgs::ResetWidget() { } FToolElementRegistrationArgs::FToolElementRegistrationArgs( EToolElement InToolElementType) : ToolElementType(InToolElementType), StyleClassName("Section") { } FToolElementRegistrationArgs::FToolElementRegistrationArgs( FName InStyleClassName ) : ToolElementType(EToolElement::Section), StyleClassName(InStyleClassName) { } FToolElementRegistrationArgs::FToolElementRegistrationArgs( UE::DisplayBuilders::FBuilderKey InBuilderKey ) : ToolElementType(EToolElement::Section) , StyleClassName( InBuilderKey.ToName() ) , BuilderKey( InBuilderKey ) { } TSharedPtr FToolElementRegistrationArgs::GenerateWidget() { return nullptr; } TSharedRef FToolElementRegistrationArgs::GenerateWidgetSharedRef() { if (TSharedPtr Widget = GenerateWidget()) { return Widget.ToSharedRef(); } return SNullWidget::NullWidget; } FToolElementRegistrationKey::FToolElementRegistrationKey(FName InName, EToolElement InToolElementType ) : Name(InName), ToolElementType(InToolElementType) { FString KeyStr = Name.ToString().AppendChar(' '); KeyStr.AppendInt( static_cast(ToolElementType)); KeyString = KeyStr; } FString FToolElementRegistrationKey::GetKeyString() { return KeyString; } FToolElement::FToolElement( const FName InName, TSharedRef InBuilderArgs) : FToolElementRegistrationKey( InName, InBuilderArgs->ToolElementType), RegistrationArgs(InBuilderArgs) { } void FToolElement::SetRegistrationArgs(TSharedRef InRegistrationArgs) { RegistrationArgs = InRegistrationArgs; } TSharedRef FToolElement::GenerateWidget() { return RegistrationArgs->GenerateWidget().ToSharedRef(); } FToolElementRegistry::FToolElementRegistry() { ToolElementKeyToToolElementMap.Reset(); } FToolElementRegistry& FToolElementRegistry::Get() { static FToolElementRegistry Registry; return Registry; } TSharedPtr FToolElementRegistry::GetToolElementSP(FToolElementRegistrationKey& ToolElementKey) { TSharedPtr* Element = ToolElementKeyToToolElementMap.Find(*(ToolElementKey.GetKeyString())); return Element != nullptr ? *Element : nullptr; } TSharedRef< SWidget > FToolElementRegistry::GenerateWidget( TSharedRef ToolElementKeySR, TSharedPtr RegistrationArgsSP, bool bUpdateRegistrationArgs) { if (const TSharedPtr Element = GetToolElementSP(ToolElementKeySR.Get())) { const bool bHasNewRegistrationArgs = RegistrationArgsSP != nullptr; const TSharedRef TempArgsSR = Element->RegistrationArgs; if (bHasNewRegistrationArgs) { Element->RegistrationArgs = RegistrationArgsSP.ToSharedRef(); } const TSharedPtr Widget = Element->RegistrationArgs->GenerateWidget(); if ( !bUpdateRegistrationArgs && bHasNewRegistrationArgs ) { Element->RegistrationArgs = TempArgsSR; } return Widget != nullptr && Widget.IsValid() ? Widget.ToSharedRef() : SNullWidget::NullWidget; } return SNullWidget::NullWidget; } void FToolElementRegistry::RegisterElement(const TSharedRef ToolElement) { ToolElementKeyToToolElementMap.Add(*ToolElement->GetKeyString(), ToolElement); } void FToolElementRegistry::UnregisterElement(const TSharedRef ToolElement) { ToolElementKeyToToolElementMap.Remove(*ToolElement->GetKeyString()); }