#include "DTFluxAPIStatusModule.h" #include "LevelEditor.h" #include "widgets/DTFluxStatusWidget.h" #include "widgets/styles/DTFluxStatusStyle.h" #define LOCTEXT_NAMESPACE "FDTFluxAPIStatusModule" DEFINE_LOG_CATEGORY(logDTFluxStatus); FName DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::StatusTabId = "DTFluxStatusTab"; FText DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::StatusTabDisplayName = FText::FromString(TEXT("DTFlux Status")); void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::StartupModule() { FDTFluxStatusStyle::RegisterStyle(); InitMenuExtension(); RegisterStatusTab(); } #pragma region MenuExtension void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::InitMenuExtension() { // FLevelEditorModule& LevelEditorModule = // FModuleManager::LoadModuleChecked(TEXT("LevelEditor")); // // FDTFluxAPIModule& DTFluxApi = // // FModuleManager::LoadModuleChecked(TEXT("DTFluxAPI")); // const TSharedPtr MenuExtender = MakeShareable(new FExtender()); // // MenuExtender->AddMenuBarExtension( // "Help", // EExtensionHook::Before, // nullptr, // FMenuBarExtensionDelegate::CreateRaw(this, &FDTFluxAPIStatusModule::AddMenu) // ); // LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender); UToolMenus::RegisterStartupCallback( FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FDTFluxAPIStatusModule::RegisterMenus) ); } void FDTFluxAPIStatusModule::RegisterMenus() { UE_LOG(logDTFluxStatus, Warning, TEXT("Creating DTFlux menu")); // 1. Enregistrer le menu DTFlux UToolMenu* DTFluxMenu = UToolMenus::Get()->RegisterMenu("DTFlux.MainMenu"); if (DTFluxMenu) { CreateSubmenu(DTFluxMenu); } // 2. Ajouter ce menu à la barre principale if (UToolMenu* MainMenu = UToolMenus::Get()->ExtendMenu("MainFrame.MainMenu")) { FToolMenuSection& DTFluxMenuSection = MainMenu->FindOrAddSection("DTFlux"); DTFluxMenuSection.Label = FText::FromString("DTFlux"); DTFluxMenuSection.AddSubMenu( "DTFluxSubmenu", FText::FromString("DTFlux"), FText::FromString("DTFlux API Tools"), FNewToolMenuDelegate::CreateLambda([](UToolMenu* Menu) { // Référencer le menu enregistré if (UToolMenu* RegisteredMenu = UToolMenus::Get()->FindMenu("DTFlux.MainMenu")) { // Copier la structure du menu enregistré for (const FToolMenuSection& Section : RegisteredMenu->Sections) { Menu->Sections.Add(Section); } } }), false, FSlateIcon(FAppStyle::GetAppStyleSetName(), "LevelEditor.Tab.Icon") ); } } void FDTFluxAPIStatusModule::CreateSubmenu(UToolMenu* Menu) { FToolMenuSection& DTFluxAPISection = Menu->FindOrAddSection("DTFluxAPI"); DTFluxAPISection.Label = FText::FromString("DTFlux API"); // Cette section est vide pour le moment, prête pour de futurs boutons // Section 2 : Tools FToolMenuSection& ToolsSection = Menu->FindOrAddSection("Tools"); ToolsSection.Label = FText::FromString("Tools"); // Ajouter le bouton Status dans la section Tools DTFluxAPISection.AddMenuEntry( "DTFluxStatus", FText::FromString("DTFlux Status"), FText::FromString("Launch DTFlux Status Control Panel"), FSlateIcon(FDTFluxStatusStyle::GetStyleSetName(), "LevelEditor.Tab.Icon"), FUIAction(FExecuteAction::CreateRaw(this, &FDTFluxAPIStatusModule::OnButtonClicked)) ); } // void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::AddMenu(FMenuBarBuilder& MenuBarBuilder) // { // MenuBarBuilder.AddPullDownMenu( // FText::FromString("DTFlux"), // FText::FromString("DTFlux API Tools"), // FNewMenuDelegate::CreateRaw(this, &FDTFluxAPIStatusModule::FillMenu) // ); // } // void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::FillMenu(FMenuBuilder& MenuBuilder) // { // MenuBuilder.BeginSection(NAME_None, FText::FromString("DTFlux API")); // MenuBuilder.AddMenuEntry( // FText::FromString("Status"), // FText::FromString("Launch DTFlux Status"), // FSlateIcon(FDTFluxStatusStyle::GetStyleSetName(), "LevelEditor.Tab.Icon"), // FExecuteAction::CreateRaw(this, &FDTFluxAPIStatusModule::OnButtonClicked) // ); // MenuBuilder.EndSection(); // } void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::OnButtonClicked() { FGlobalTabmanager::Get()->TryInvokeTab(StatusTabId); UE_LOG(LogTemp, Log, TEXT("Status Tab Launched")) } #pragma endregion EditorTab #pragma region void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::RegisterStatusTab() { FTabSpawnerEntry& SpawnerEntry = FGlobalTabmanager::Get()->RegisterNomadTabSpawner( StatusTabId, FOnSpawnTab::CreateRaw(this, &FDTFluxAPIStatusModule::OnSpawnTab) ) .SetDisplayName(StatusTabDisplayName) .SetTooltipText(FText::FromString(TEXT("Status of DTFlux API external connections"))); } TSharedRef DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::OnSpawnTab(const FSpawnTabArgs& SpawnTabArgs) { return SNew( SDockTab ) .TabRole(ETabRole::NomadTab) // .ShouldAutosize(true) [ SNew(SDTFluxStatusWidget) ]; } #pragma endregion void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::ShutdownModule() { FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(StatusTabId); FDTFluxStatusStyle::UnregisterStyle(); } #undef LOCTEXT_NAMESPACE IMPLEMENT_MODULE(FDTFluxAPIStatusModule, DTFluxAPIStatus)