Switching DTFluxApi Tab Implementation to use the more modern UToolMenus approach API
This commit is contained in:
@ -31,6 +31,7 @@ public class DTFluxAPIStatus : ModuleRules
|
||||
"DTFluxCoreSubsystem",
|
||||
"InputCore",
|
||||
"OutputLog",
|
||||
"ToolMenus",
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@ -14,9 +14,9 @@ FText DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::StatusTabDisplayName = FText::
|
||||
|
||||
void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::StartupModule()
|
||||
{
|
||||
FDTFluxStatusStyle::RegisterStyle();
|
||||
InitMenuExtension();
|
||||
RegisterStatusTab();
|
||||
FDTFluxStatusStyle::RegisterStyle();
|
||||
}
|
||||
|
||||
|
||||
@ -25,45 +25,109 @@ void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::StartupModule()
|
||||
|
||||
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());
|
||||
// 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);
|
||||
|
||||
MenuExtender->AddMenuBarExtension(
|
||||
"Help",
|
||||
EExtensionHook::Before,
|
||||
nullptr,
|
||||
FMenuBarExtensionDelegate::CreateRaw(this, &FDTFluxAPIStatusModule::AddMenu)
|
||||
UToolMenus::RegisterStartupCallback(
|
||||
FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FDTFluxAPIStatusModule::RegisterMenus)
|
||||
);
|
||||
LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::AddMenu(FMenuBarBuilder& MenuBarBuilder)
|
||||
void FDTFluxAPIStatusModule::RegisterMenus()
|
||||
{
|
||||
MenuBarBuilder.AddPullDownMenu(
|
||||
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"),
|
||||
FNewMenuDelegate::CreateRaw(this, &FDTFluxAPIStatusModule::FillMenu)
|
||||
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 DTFLUXAPISTATUS_API FDTFluxAPIStatusModule::FillMenu(FMenuBuilder& MenuBuilder)
|
||||
void FDTFluxAPIStatusModule::CreateSubmenu(UToolMenu* Menu)
|
||||
{
|
||||
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();
|
||||
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);
|
||||
|
||||
@ -13,10 +13,11 @@ public:
|
||||
|
||||
#pragma region MenuExtention
|
||||
void InitMenuExtension();
|
||||
void AddMenu(FMenuBarBuilder& MenuBarBuilder);
|
||||
void FillMenu(FMenuBuilder& MenuBuilder);
|
||||
void RegisterMenus();
|
||||
void CreateSubmenu(UToolMenu* Menu);
|
||||
// void AddMenu(FMenuBarBuilder& MenuBarBuilder);
|
||||
// void FillMenu(FMenuBuilder& MenuBuilder);
|
||||
void OnButtonClicked();
|
||||
// void OnWsEvent(TEnumAsByte<EDTFluxWsStatus> WsResponseEvent) const;
|
||||
#pragma endregion
|
||||
|
||||
#pragma region EditorTab
|
||||
@ -25,7 +26,6 @@ public:
|
||||
private:
|
||||
static FName StatusTabId;
|
||||
static FText StatusTabDisplayName;
|
||||
|
||||
TSharedPtr<class SDTFluxStatusWidget> StatusWidget;
|
||||
#pragma endregion
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user