Files
unreal-mcp/Source/UnrealMCPSetup/Private/ClaudeCodeMenuExtender.cpp
T

66 lines
2.4 KiB
C++

#include "ClaudeCodeMenuExtender.h"
#include "UnrealMCPSetupLog.h"
#include "ClaudeCodeInitializer.h"
#include "ToolMenus.h"
#include "ToolMenu.h"
#include "ToolMenuSection.h"
#include "ISettingsModule.h"
#define LOCTEXT_NAMESPACE "FClaudeCodeMenuExtender"
void FClaudeCodeMenuExtender::Register()
{
// Pattern from UE5 source (LevelEditorMenu.cpp ExtendMenuBar):
// - ExtendMenu + FindOrAddSection(NAME_None)
// - InsertPosition on the ENTRY, not the section
// - Anchor name is "Help" (short form, not the full qualified name)
UToolMenu* MenuBar = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu");
FToolMenuSection& Section = MenuBar->FindOrAddSection(NAME_None);
FToolMenuEntry& SubMenu = Section.AddSubMenu(
"ClaudeCodeMenu",
LOCTEXT("MenuLabel", "Claude Code"),
LOCTEXT("MenuTooltip", "Claude Code tools for this project"),
FNewToolMenuDelegate::CreateStatic(&FClaudeCodeMenuExtender::BuildMenu)
);
// "Actor" in the menu bar is the entry named "Actions" (dynamic label, see LevelEditorMenu.cpp).
// Using After("Actions") places Claude Code between Actor and Help.
SubMenu.InsertPosition = FToolMenuInsert("Actions", EToolMenuInsertType::After);
}
void FClaudeCodeMenuExtender::BuildMenu(UToolMenu* Menu)
{
FToolMenuSection& Section = Menu->FindOrAddSection("ClaudeCodeActions");
Section.AddMenuEntry(
"InitClaudeCode",
LOCTEXT("InitLabel", "Init Claude Code"),
LOCTEXT("InitTooltip", "Initialisation de Claude Code pour ce projet"),
FSlateIcon(),
FUIAction(FExecuteAction::CreateStatic(&FClaudeCodeMenuExtender::OnInitClaudeCodeClicked))
);
Section.AddMenuEntry(
"OpenMCPSettings",
LOCTEXT("SettingsLabel", "Configuration du port MCP..."),
LOCTEXT("SettingsTooltip", "Ouvrir les paramètres du port MCP dans les Project Settings"),
FSlateIcon(FAppStyle::GetAppStyleSetName(), "Icons.Settings"),
FUIAction(FExecuteAction::CreateStatic(&FClaudeCodeMenuExtender::OnOpenSettingsClicked))
);
}
void FClaudeCodeMenuExtender::OnOpenSettingsClicked()
{
ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
if (SettingsModule)
{
SettingsModule->ShowViewer(TEXT("Project"), TEXT("Plugins"), TEXT("UnrealMCP"));
}
}
void FClaudeCodeMenuExtender::OnInitClaudeCodeClicked()
{
UE_LOG(LogUnrealMCPSetup, Display, TEXT("User clicked 'Init Claude Code'"));
FClaudeCodeInitializer::Run();
}
#undef LOCTEXT_NAMESPACE