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
 |