144 lines
6.8 KiB
C++
144 lines
6.8 KiB
C++
// Tencent is pleased to support the open source community by making UnLua available.
|
|
//
|
|
// Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
|
//
|
|
// Licensed under the MIT License (the "License");
|
|
// you may not use this file except in compliance with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://opensource.org/licenses/MIT
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and limitations under the License.
|
|
|
|
#include "MainMenuToolbar.h"
|
|
#include "ISettingsModule.h"
|
|
#include "UnLuaAboutScreen.h"
|
|
#include "UnLuaIntelliSenseGenerator.h"
|
|
#include "LevelEditor.h"
|
|
#include "UnLuaEditorCommands.h"
|
|
#include "UnLuaEditorFunctionLibrary.h"
|
|
#include "UnLuaEditorSettings.h"
|
|
#include "UnLuaFunctionLibrary.h"
|
|
#include "Interfaces/IMainFrameModule.h"
|
|
#include "ToolMenus.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "UnLuaMainMenuToolbar"
|
|
|
|
FMainMenuToolbar::FMainMenuToolbar()
|
|
: CommandList(new FUICommandList)
|
|
{
|
|
CommandList->MapAction(FUnLuaEditorCommands::Get().HotReload, FExecuteAction::CreateStatic(UUnLuaFunctionLibrary::HotReload), FCanExecuteAction());
|
|
|
|
CommandList->MapAction(FUnLuaEditorCommands::Get().GenerateIntelliSense, FExecuteAction::CreateLambda([]
|
|
{
|
|
FUnLuaIntelliSenseGenerator::Get()->UpdateAll();
|
|
}), FCanExecuteAction());
|
|
|
|
CommandList->MapAction(FUnLuaEditorCommands::Get().OpenRuntimeSettings, FExecuteAction::CreateLambda([]
|
|
{
|
|
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"))
|
|
SettingsModule->ShowViewer("Project", "Plugins", "UnLua");
|
|
}), FCanExecuteAction());
|
|
|
|
CommandList->MapAction(FUnLuaEditorCommands::Get().OpenEditorSettings, FExecuteAction::CreateLambda([]
|
|
{
|
|
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"))
|
|
SettingsModule->ShowViewer("Project", "Plugins", "UnLua Editor");
|
|
}), FCanExecuteAction());
|
|
|
|
CommandList->MapAction(FUnLuaEditorCommands::Get().ReportIssue, FExecuteAction::CreateLambda([]
|
|
{
|
|
const TCHAR* URL = TEXT("cmd");
|
|
const TCHAR* Params = TEXT("/k start https://github.com/Tencent/UnLua/issues/new/choose");
|
|
FPlatformProcess::ExecProcess(URL, Params, nullptr, nullptr, nullptr);
|
|
}), FCanExecuteAction());
|
|
|
|
CommandList->MapAction(FUnLuaEditorCommands::Get().About, FExecuteAction::CreateLambda([]
|
|
{
|
|
const FText AboutWindowTitle = LOCTEXT("AboutUnLua", "About UnLua");
|
|
|
|
TSharedPtr<SWindow> AboutWindow =
|
|
SNew(SWindow)
|
|
.Title(AboutWindowTitle)
|
|
.ClientSize(FVector2D(600.f, 200.f))
|
|
.SupportsMaximize(false).SupportsMinimize(false)
|
|
.SizingRule(ESizingRule::FixedSize)
|
|
[
|
|
SNew(SUnLuaAboutScreen)
|
|
];
|
|
|
|
IMainFrameModule& MainFrame = FModuleManager::LoadModuleChecked<IMainFrameModule>("MainFrame");
|
|
TSharedPtr<SWindow> ParentWindow = MainFrame.GetParentWindow();
|
|
|
|
if (ParentWindow.IsValid())
|
|
FSlateApplication::Get().AddModalWindow(AboutWindow.ToSharedRef(), ParentWindow.ToSharedRef());
|
|
else
|
|
FSlateApplication::Get().AddWindow(AboutWindow.ToSharedRef());
|
|
}), FCanExecuteAction());
|
|
}
|
|
|
|
void FMainMenuToolbar::Initialize()
|
|
{
|
|
#if ENGINE_MAJOR_VERSION >= 5
|
|
UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.User");
|
|
FToolMenuSection& Section = ToolbarMenu->AddSection("UnluaSettings");
|
|
Section.AddEntry(FToolMenuEntry::InitComboButton(
|
|
"UnluaSettings",
|
|
FUIAction(),
|
|
FOnGetContent::CreateRaw(this, &FMainMenuToolbar::GenerateUnLuaSettingsMenu),
|
|
LOCTEXT("UnLua_Label", "UnLua"),
|
|
LOCTEXT("UnLua_ToolTip", "UnLua"),
|
|
FSlateIcon("UnLuaEditorStyle", "UnLuaEditor.UnLuaLogo")
|
|
));
|
|
#else
|
|
TSharedPtr<FExtender> Extender = MakeShareable(new FExtender);
|
|
Extender->AddToolBarExtension("Settings", EExtensionHook::After, CommandList,
|
|
FToolBarExtensionDelegate::CreateLambda([this](FToolBarBuilder& Builder)
|
|
{
|
|
Builder.BeginSection(NAME_None);
|
|
Builder.AddComboButton(FUIAction(),
|
|
FOnGetContent::CreateRaw(this, &FMainMenuToolbar::GenerateUnLuaSettingsMenu),
|
|
LOCTEXT("UnLua_Label", "UnLua"),
|
|
LOCTEXT("UnLua_ToolTip", "UnLua"),
|
|
FSlateIcon("UnLuaEditorStyle", "UnLuaEditor.UnLuaLogo")
|
|
);
|
|
Builder.EndSection();
|
|
})
|
|
);
|
|
FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
|
|
LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(Extender);
|
|
#endif
|
|
const auto& Settings = *GetDefault<UUnLuaEditorSettings>();
|
|
if (Settings.UpdateMode == EUpdateMode::Start)
|
|
UUnLuaEditorFunctionLibrary::FetchNewVersion();
|
|
}
|
|
|
|
TSharedRef<SWidget> FMainMenuToolbar::GenerateUnLuaSettingsMenu()
|
|
{
|
|
const FUnLuaEditorCommands& Commands = FUnLuaEditorCommands::Get();
|
|
FMenuBuilder MenuBuilder(true, CommandList);
|
|
|
|
MenuBuilder.BeginSection(NAME_None, LOCTEXT("Section_Action", "Action"));
|
|
MenuBuilder.AddMenuEntry(Commands.HotReload, NAME_None, LOCTEXT("HotReload", "Hot Reload"));
|
|
MenuBuilder.AddMenuEntry(Commands.GenerateIntelliSense, NAME_None, LOCTEXT("GenerateIntelliSense", "Generate IntelliSense"));
|
|
MenuBuilder.EndSection();
|
|
|
|
MenuBuilder.BeginSection(NAME_None, LOCTEXT("Section_Help", "Help"));
|
|
MenuBuilder.AddSubMenu(LOCTEXT("Section_SettingsMenu", "Settings"),
|
|
LOCTEXT("Section_SettingsMenu_ToolTip", "UnLua Settings"),
|
|
FNewMenuDelegate::CreateLambda([Commands](FMenuBuilder& SubMenuBuilder)
|
|
{
|
|
SubMenuBuilder.AddMenuEntry(Commands.OpenRuntimeSettings, NAME_None, LOCTEXT("OpenRuntimeSettings", "Runtime"));
|
|
SubMenuBuilder.AddMenuEntry(Commands.OpenEditorSettings, NAME_None, LOCTEXT("OpenEditorSettings", "Editor"));
|
|
}));
|
|
MenuBuilder.AddMenuEntry(Commands.ReportIssue, NAME_None, LOCTEXT("ReportIssue", "Report Issue"));
|
|
MenuBuilder.AddMenuEntry(Commands.About, NAME_None, LOCTEXT("About", "About"));
|
|
MenuBuilder.EndSection();
|
|
|
|
return MenuBuilder.MakeWidget();
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|