Files
DTFluxAPI/Source/DTFluxAPIStatus/Private/DTFluxAPIStatusModule.cpp

175 lines
5.1 KiB
C++
Raw Normal View History

#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<FLevelEditorModule>(TEXT("LevelEditor"));
// // FDTFluxAPIModule& DTFluxApi =
// // FModuleManager::LoadModuleChecked<FDTFluxAPIModule>(TEXT("DTFluxAPI"));
// const TSharedPtr<FExtender> 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<SDockTab> 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)