#include "DTFluxRaceResultModule.h" #include "LevelEditor.h" #include "Widget/SDTFluxRaceResultWidget.h" #include "Widget/Style/DTFluxRaceResultStyle.h" #define LOCTEXT_NAMESPACE "FDTFluxRaceResultModule" DEFINE_LOG_CATEGORY(logDTFluxRaceResult) FName DTFLUXRACERESULT_API FDTFluxRaceResult::RaceResultTabId = "DTFluxRaceResult"; FText DTFLUXRACERESULT_API FDTFluxRaceResult::RaceResultTabDisplayName = FText::FromString(TEXT("DTFlux RaceResult")); void DTFLUXRACERESULT_API FDTFluxRaceResult::StartupModule() { UE_LOG(logDTFluxRaceResult, Warning, TEXT("DTFluxRaceResult Module Started")) FDTFluxRaceResultStyle::RegisterStyle(); InitMenuExtension(); RegisterRaceResultTab(); } #pragma region MenuExtension void DTFLUXRACERESULT_API FDTFluxRaceResult::InitMenuExtension() { UToolMenus::RegisterStartupCallback( FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FDTFluxRaceResult::RegisterMenuExtensions)); } void DTFLUXRACERESULT_API FDTFluxRaceResult::RegisterMenuExtensions() { // Étendre le menu enregistré if (UToolMenu* DTFluxMenu = UToolMenus::Get()->ExtendMenu("DTFlux.MainMenu")) { FToolMenuSection& ToolsSection = DTFluxMenu->FindOrAddSection("Tools"); ToolsSection.AddMenuEntry( "DTFluxRaceResult", FText::FromString("RaceResult"), FText::FromString("Launch DTFlux RaceResult Control Panel"), FSlateIcon(FDTFluxRaceResultStyle::GetStyleSetName(), "LevelEditor.Tab.IconRaceResult"), FUIAction(FExecuteAction::CreateRaw(this, &FDTFluxRaceResult::OnButtonClicked)) ); } } void FDTFluxRaceResult::CreateSubmenu(UToolMenu* Menu) { // Section 2 : Tools FToolMenuSection& ToolsSection = Menu->FindOrAddSection("Tools"); ToolsSection.Label = FText::FromString("Tools"); ToolsSection.AddMenuEntry( "DTFluxRaceResult", FText::FromString("RaceResult"), FText::FromString("Launch Race Result WebAdmin Console"), FSlateIcon(FDTFluxRaceResultStyle::GetStyleSetName(), "LevelEditor.Tab.IconRaceResult"), // Adaptez selon votre icône FUIAction(FExecuteAction::CreateRaw(this, &FDTFluxRaceResult::OnButtonClicked)) ); } void DTFLUXRACERESULT_API FDTFluxRaceResult::OnButtonClicked() { FGlobalTabmanager::Get()->TryInvokeTab(RaceResultTabId); UE_LOG(LogTemp, Log, TEXT("Race Result Launched")) } #pragma endregion EditorTab #pragma region void DTFLUXRACERESULT_API FDTFluxRaceResult::RegisterRaceResultTab() { FTabSpawnerEntry& SpawnerEntry = FGlobalTabmanager::Get()->RegisterNomadTabSpawner( RaceResultTabId, FOnSpawnTab::CreateRaw(this, &FDTFluxRaceResult::OnSpawnTab) ) .SetDisplayName(RaceResultTabDisplayName) .SetTooltipText(FText::FromString(TEXT("Race Result Control Panel"))); } TSharedRef DTFLUXRACERESULT_API FDTFluxRaceResult::OnSpawnTab(const FSpawnTabArgs& SpawnTabArgs) { return SNew( SDockTab ) .TabRole(ETabRole::NomadTab) // .ShouldAutosize(true) [ SNew(SDTFluxRaceResultWidget) ]; } #pragma endregion void DTFLUXRACERESULT_API FDTFluxRaceResult::ShutdownModule() { FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(RaceResultTabId); FDTFluxRaceResultStyle::UnregisterStyle(); } // // // Dans votre code de debug // void DTFLUXRACERESULT_API FDTFluxRaceResult::DebugMenus() // { // UToolMenus* ToolMenus = UToolMenus::Get(); // if (ToolMenus) // { // TArray MenuNames; // ToolMenus->GetAllMenuNames(MenuNames); // // UE_LOG(logDTFluxRaceResult, Warning, TEXT("=== ALL AVAILABLE MENUS ===")); // for (const FName& MenuName : MenuNames) // { // UE_LOG(logDTFluxRaceResult, Warning, TEXT("Menu: %s"), *MenuName.ToString()); // // // Obtenir les sections de chaque menu // UToolMenu* Menu = ToolMenus->FindMenu(MenuName); // if (Menu) // { // for (const FToolMenuSection& Section : Menu->Sections) // { // UE_LOG(logDTFluxRaceResult, Warning, TEXT(" Section: %s"), *Section.Name.ToString()); // } // } // } // UE_LOG(logDTFluxRaceResult, Warning, TEXT("=== END MENU LIST ===")); // } // } // void DTFLUXRACERESULT_API FDTFluxRaceResult::AddMenu(FMenuBarBuilder& MenuBarBuilder) // { // MenuBarBuilder.AddPullDownMenu( // FText::FromString("DTFlux"), // FText::FromString("DTFlux API Tools"), // FNewMenuDelegate::CreateRaw(this, &FDTFluxRaceResult::FillMenu) // ); // } // void DTFLUXRACERESULT_API FDTFluxRaceResult::FillMenu(FMenuBuilder& MenuBuilder) // { // MenuBuilder.AddMenuEntry( // FText::FromString("RaceResult ControlPanel"), // FText::FromString("Launch RaceResult Control Panel"), // FSlateIcon(FDTFluxRaceResultStyle::GetStyleSetName(), "LevelEditor.Tab.IconRaceResult"), // FExecuteAction::CreateRaw(this, &FDTFluxRaceResult::OnButtonClicked) // ); // MenuBuilder.EndSection(); // } #undef LOCTEXT_NAMESPACE IMPLEMENT_MODULE(FDTFluxRaceResult, DTFluxRaceResult)