175 lines
5.1 KiB
C++
175 lines
5.1 KiB
C++
#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) |