// Copyright Epic Games, Inc. All Rights Reserved. #include "DataLayerEditorModule.h" #include "DataLayer/DataLayerEditorSubsystem.h" #include "DataLayer/DataLayerInstanceCustomization.h" #include "DataLayer/DataLayerNameEditSink.h" #include "DataLayer/DataLayerPropertyTypeCustomization.h" #include "DataLayer/SDataLayerBrowser.h" #include "EditorWidgetsModule.h" #include "HAL/Platform.h" #include "Modules/ModuleManager.h" #include "ObjectNameEditSinkRegistry.h" #include "PropertyEditorDelegates.h" #include "PropertyEditorModule.h" #include "UObject/NameTypes.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SWidget.h" class AActor; IMPLEMENT_MODULE(FDataLayerEditorModule, DataLayerEditor ); static const FName NAME_ActorDataLayer(TEXT("ActorDataLayer")); static const FName NAME_DataLayerInstance(TEXT("DataLayerInstance")); void FDataLayerEditorModule::StartupModule() { FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropertyModule.RegisterCustomPropertyTypeLayout(NAME_ActorDataLayer, FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared(); })); PropertyModule.RegisterCustomClassLayout(NAME_DataLayerInstance, FOnGetDetailCustomizationInstance::CreateStatic(&FDataLayerInstanceDetails::MakeInstance)); FEditorWidgetsModule& EditorWidgetsModule = FModuleManager::LoadModuleChecked("EditorWidgets"); EditorWidgetsModule.GetObjectNameEditSinkRegistry()->RegisterObjectNameEditSink(MakeShared()); } void FDataLayerEditorModule::ShutdownModule() { if (FPropertyEditorModule* PropertyModule = FModuleManager::GetModulePtr("PropertyEditor")) { PropertyModule->UnregisterCustomPropertyTypeLayout(NAME_ActorDataLayer); PropertyModule->UnregisterCustomPropertyTypeLayout(NAME_DataLayerInstance); } } TSharedRef FDataLayerEditorModule::CreateDataLayerBrowser() { TSharedRef NewDataLayerBrowser = SNew(SDataLayerBrowser); DataLayerBrowser = NewDataLayerBrowser; return NewDataLayerBrowser; } void FDataLayerEditorModule::SyncDataLayerBrowserToDataLayer(const UDataLayerInstance* DataLayerInstance) { if (DataLayerBrowser.IsValid()) { TSharedRef Browser = StaticCastSharedRef(DataLayerBrowser.Pin().ToSharedRef()); Browser->SyncDataLayerBrowserToDataLayer(DataLayerInstance); } } bool FDataLayerEditorModule::AddActorToDataLayers(AActor* Actor, const TArray& DataLayers) { return UDataLayerEditorSubsystem::Get()->AddActorToDataLayers(Actor, DataLayers); }