49 lines
1.7 KiB
C++
49 lines
1.7 KiB
C++
#include "ClaudeCodeMenuExtender.h"
|
|
#include "UnrealMCPSetupLog.h"
|
|
#include "ClaudeCodeInitializer.h"
|
|
#include "ToolMenus.h"
|
|
#include "ToolMenu.h"
|
|
#include "ToolMenuSection.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))
|
|
);
|
|
}
|
|
|
|
void FClaudeCodeMenuExtender::OnInitClaudeCodeClicked()
|
|
{
|
|
UE_LOG(LogUnrealMCPSetup, Display, TEXT("User clicked 'Init Claude Code'"));
|
|
FClaudeCodeInitializer::Run();
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|