// Copyright Epic Games, Inc. All Rights Reserved. #include "InstanceDataObjectFixupToolModule.h" #include "InstanceDataObjectFixupTool.h" #include "WorkspaceMenuStructure.h" #include "WorkspaceMenuStructureModule.h" #define LOCTEXT_NAMESPACE "InstanceDataObjectFixupToolModule" static const FName InstanceDataObjectFixupToolTabName = FName(TEXT("InstanceDataObjectFixupTool")); static const FName InstanceDataObjectFixupToolDialogName = FName(TEXT("LoosePropertyFixup")); void FInstanceDataObjectFixupToolModule::StartupModule() { } void FInstanceDataObjectFixupToolModule::ShutdownModule() { } bool FInstanceDataObjectFixupToolModule::OpenInstanceDataObjectFixupTool() const { TSharedPtr DockTab = FGlobalTabmanager::Get()->TryInvokeTab(FTabId(InstanceDataObjectFixupToolTabName)); if (!DockTab) { return false; } DockTab->DrawAttention(); return true; } TSharedRef FInstanceDataObjectFixupToolModule::CreateInstanceDataObjectFixupTab( const FSpawnTabArgs& TabArgs, TConstArrayView> InstanceDataObjects, TObjectPtr InstanceDataObjectsOwner) const { const TSharedRef InstanceDataObjectFixupTool = SNew(SInstanceDataObjectFixupTool) .InstanceDataObjects(InstanceDataObjects) .InstanceDataObjectsOwner(InstanceDataObjectsOwner); TSharedRef DockTab = SNew(SDockTab) .TabRole(ETabRole::NomadTab) [ InstanceDataObjectFixupTool ]; InstanceDataObjectFixupTool->SetDockTab(DockTab); InstanceDataObjectFixupTool->GenerateDetailsViews(); return DockTab; } void FInstanceDataObjectFixupToolModule::CreateInstanceDataObjectFixupDialog( TConstArrayView> InstanceDataObjects, TObjectPtr InstanceDataObjectsOwner) const { FText DisplayName; if (InstanceDataObjects.Num() == 1) { DisplayName = FText::Format(LOCTEXT("SingleObjectFixupTabTitle", "{0} Fix-up"), FText::FromName(InstanceDataObjects[0]->GetFName())); } else { FString ClassName; for (UObject* Object : InstanceDataObjects) { if (ClassName.IsEmpty()) { ClassName = Object->GetClass()->GetName(); } else if (ClassName != Object->GetName()) { ClassName.Empty(); break; } } if (ClassName.IsEmpty()) { DisplayName = FText::Format(LOCTEXT("MultiEditObjectFixupTabTitle", "{0} Objects Fixup"), InstanceDataObjects.Num()); } else { DisplayName = FText::Format(LOCTEXT("MultiEditObjectFixupTabTitleWithClass", "{0} {1} Objects Fixup"), InstanceDataObjects.Num(), FText::FromString(ClassName)); } } FGlobalTabmanager::Get()->RegisterNomadTabSpawner(InstanceDataObjectFixupToolDialogName, FOnSpawnTab::CreateLambda( [&InstanceDataObjects, InstanceDataObjectsOwner](const FSpawnTabArgs& TabArgs) { return FInstanceDataObjectFixupToolModule::Get().CreateInstanceDataObjectFixupTab(TabArgs, InstanceDataObjects, InstanceDataObjectsOwner); })) .SetDisplayName(DisplayName) .SetGroup(WorkspaceMenu::GetMenuStructure().GetToolsCategory()) .SetMenuType(ETabSpawnerMenuType::Hidden); if (const TSharedPtr DockTab = FGlobalTabmanager::Get()->TryInvokeTab(FTabId(InstanceDataObjectFixupToolDialogName))) { DockTab->DrawAttention(); } } #undef LOCTEXT_NAMESPACE IMPLEMENT_MODULE(FInstanceDataObjectFixupToolModule, InstanceDataObjectFixupTool)