You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
343 lines
8.5 KiB
C++
343 lines
8.5 KiB
C++
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "ProjectLauncherPrivatePCH.h"
|
|
#include "SWidgetSwitcher.h"
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "SProjectLauncher"
|
|
|
|
|
|
/* SProjectLauncher structors
|
|
*****************************************************************************/
|
|
|
|
SProjectLauncher::SProjectLauncher()
|
|
:bAdvanced(false)
|
|
{
|
|
if (GConfig != NULL)
|
|
{
|
|
GConfig->GetBool(TEXT("FProjectLauncher"), TEXT("AdvancedMode"), bAdvanced, GEngineIni);
|
|
}
|
|
}
|
|
|
|
SProjectLauncher::~SProjectLauncher( )
|
|
{
|
|
if (GConfig != NULL)
|
|
{
|
|
GConfig->SetBool(TEXT("FProjectLauncher"), TEXT("AdvancedMode"), bAdvanced, GEngineIni);
|
|
}
|
|
|
|
if (LauncherWorker.IsValid())
|
|
{
|
|
LauncherWorker->Cancel();
|
|
FPlatformProcess::Sleep(0.5f);
|
|
}
|
|
}
|
|
|
|
|
|
/* SProjectLauncher interface
|
|
*****************************************************************************/
|
|
|
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
void SProjectLauncher::Construct( const FArguments& InArgs, const TSharedRef<SDockTab>& ConstructUnderMajorTab, const TSharedPtr<SWindow>& ConstructUnderWindow, const FProjectLauncherModelRef& InModel )
|
|
{
|
|
FProjectLauncherCommands::Register();
|
|
|
|
Model = InModel;
|
|
|
|
// create & initialize main menu bar
|
|
TSharedRef<FWorkspaceItem> RootMenuGroup = FWorkspaceItem::NewGroup(LOCTEXT("RootMenuGroup", "Root"));
|
|
|
|
FMenuBarBuilder MenuBarBuilder = FMenuBarBuilder(TSharedPtr<FUICommandList>());
|
|
MenuBarBuilder.AddPullDownMenu(
|
|
LOCTEXT("WindowMenuLabel", "Window"),
|
|
FText::GetEmpty(),
|
|
FNewMenuDelegate::CreateStatic(&SProjectLauncher::FillWindowMenu, RootMenuGroup),
|
|
"Window"
|
|
);
|
|
|
|
ChildSlot
|
|
[
|
|
SAssignNew(WidgetSwitcher, SWidgetSwitcher)
|
|
.WidgetIndex((int32)ELauncherPanels::Launch)
|
|
|
|
// Empty Panel
|
|
+ SWidgetSwitcher::Slot()
|
|
[
|
|
SNew(SBorder)
|
|
]
|
|
|
|
// SProjectLauncher Panel
|
|
+ SWidgetSwitcher::Slot()
|
|
[
|
|
SNew(SSplitter)
|
|
.Style(FEditorStyle::Get(), "ContentBrowser.Splitter")
|
|
.Orientation(Orient_Vertical)
|
|
|
|
// Simple SProjectLauncher
|
|
+ SSplitter::Slot()
|
|
.Value(0.7f)
|
|
[
|
|
SNew(SVerticalBox)
|
|
|
|
+ SVerticalBox::Slot()
|
|
.AutoHeight()
|
|
.Padding(2)
|
|
[
|
|
SNew(SHorizontalBox)
|
|
|
|
// Project Bar
|
|
+ SHorizontalBox::Slot()
|
|
.AutoWidth()
|
|
[
|
|
SNew(SProjectLauncherProjectPicker, InModel)
|
|
]
|
|
|
|
// Advanced Button
|
|
+ SHorizontalBox::Slot()
|
|
.HAlign(HAlign_Right)
|
|
[
|
|
SNew(SBorder)
|
|
.Padding(2)
|
|
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
|
|
[
|
|
SNew(SCheckBox)
|
|
.Style(FEditorStyle::Get(), "ToggleButtonCheckbox")
|
|
.IsFocusable(true)
|
|
.ToolTipText(LOCTEXT("ToggleAdvancedOptionsToolTipText", "Toggles Advanced Options"))
|
|
.OnCheckStateChanged(this, &SProjectLauncher::OnAdvancedChanged)
|
|
.IsChecked(this, &SProjectLauncher::OnIsAdvanced)
|
|
[
|
|
SNew(SHorizontalBox)
|
|
|
|
// Icon
|
|
+ SHorizontalBox::Slot()
|
|
.VAlign(VAlign_Center)
|
|
[
|
|
SNew(SImage)
|
|
.Image(this, &SProjectLauncher::GetAdvancedToggleBrush)
|
|
]
|
|
|
|
// Text
|
|
+ SHorizontalBox::Slot()
|
|
.AutoWidth()
|
|
.VAlign(VAlign_Center)
|
|
.Padding(4,0,4,0)
|
|
[
|
|
SNew(STextBlock)
|
|
.TextStyle(FCoreStyle::Get(), "Toolbar.Label")
|
|
.ShadowOffset(FVector2D::UnitVector)
|
|
.Text(LOCTEXT("AdvancedButton", "Advanced"))
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
|
|
+ SVerticalBox::Slot()
|
|
.FillHeight(1)
|
|
.Padding(2)
|
|
[
|
|
SNew(SBorder)
|
|
[
|
|
SAssignNew(LaunchList, SProjectLauncherSimpleDeviceListView, InModel)
|
|
.OnProfileRun(this, &SProjectLauncher::OnProfileRun)
|
|
.IsAdvanced(this, &SProjectLauncher::GetIsAdvanced)
|
|
]
|
|
]
|
|
]
|
|
|
|
+ SSplitter::Slot()
|
|
.Value(0.3f)
|
|
[
|
|
SNew(SBorder)
|
|
[
|
|
SNew(SVerticalBox)
|
|
|
|
+ SVerticalBox::Slot()
|
|
.AutoHeight()
|
|
.Padding(2)
|
|
[
|
|
SNew(SBorder)
|
|
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
|
|
.Padding(4.0)
|
|
[
|
|
SNew(SHorizontalBox)
|
|
|
|
+ SHorizontalBox::Slot()
|
|
.AutoWidth()
|
|
[
|
|
SNew(STextBlock)
|
|
.TextStyle(FCoreStyle::Get(), "Toolbar.Label")
|
|
.ShadowOffset(FVector2D::UnitVector)
|
|
.Text(LOCTEXT("ProjectLauncherCustomProfilesTitle", "Custom Launch Profiles"))
|
|
]
|
|
|
|
+ SHorizontalBox::Slot()
|
|
.HAlign(HAlign_Right)
|
|
[
|
|
SNew(SButton)
|
|
.ButtonStyle(FEditorStyle::Get(), "ToggleButton")
|
|
.ToolTipText(LOCTEXT("ProjectLauncherCustomProfileAdd", "Add a new custom launch profile."))
|
|
.ContentPadding(0)
|
|
.OnClicked(this, &SProjectLauncher::OnAddCustomLaunchProfileClicked)
|
|
[
|
|
SNew(SImage)
|
|
.Image(FCoreStyle::Get().GetBrush("EditableComboBox.Add"))
|
|
.ColorAndOpacity(FSlateColor(FLinearColor::White))
|
|
]
|
|
]
|
|
]
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.FillHeight(1)
|
|
.Padding(2)
|
|
[
|
|
SAssignNew(ProfileList, SBorder)
|
|
.BorderImage(FEditorStyle::GetBrush("NoBorder"))
|
|
.Padding(0)
|
|
[
|
|
// Simple Launch List
|
|
SNew(SProjectLauncherProfileListView, InModel)
|
|
.OnProfileEdit(this, &SProjectLauncher::OnProfileEdit)
|
|
.OnProfileRun(this, &SProjectLauncher::OnProfileRun)
|
|
.OnProfileDelete(this, &SProjectLauncher::OnProfileDelete)
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
|
|
// Launch Settings
|
|
+ SWidgetSwitcher::Slot()
|
|
[
|
|
SAssignNew(ProfileSettingsPanel, SProjectLauncherSettings, InModel)
|
|
.OnCloseClicked(this, &SProjectLauncher::OnProfileSettingsClose)
|
|
.OnDeleteClicked(this, &SProjectLauncher::OnProfileDelete)
|
|
]
|
|
|
|
// Progress Panel
|
|
+ SWidgetSwitcher::Slot()
|
|
[
|
|
SAssignNew(ProgressPanel, SProjectLauncherProgress)
|
|
.OnCloseClicked(this, &SProjectLauncher::OnProgressClose)
|
|
.OnRerunClicked(this, &SProjectLauncher::OnRerunClicked)
|
|
]
|
|
];
|
|
}
|
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
|
|
/* SProjectLauncher implementation
|
|
*****************************************************************************/
|
|
|
|
void SProjectLauncher::FillWindowMenu( FMenuBuilder& MenuBuilder, TSharedRef<FWorkspaceItem> RootMenuGroup )
|
|
{
|
|
#if !WITH_EDITOR
|
|
MenuBuilder.BeginSection("WindowGlobalTabSpawners", LOCTEXT("UfeMenuGroup", "Unreal Frontend"));
|
|
{
|
|
FGlobalTabmanager::Get()->PopulateTabSpawnerMenu(MenuBuilder, RootMenuGroup);
|
|
}
|
|
MenuBuilder.EndSection();
|
|
#endif //!WITH_EDITOR
|
|
}
|
|
|
|
/* SProjectLauncher callbacks
|
|
*****************************************************************************/
|
|
|
|
void SProjectLauncher::OnAdvancedChanged(const ECheckBoxState NewCheckedState)
|
|
{
|
|
bAdvanced = (NewCheckedState == ECheckBoxState::Checked);
|
|
}
|
|
|
|
ECheckBoxState SProjectLauncher::OnIsAdvanced() const
|
|
{
|
|
return (bAdvanced) ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
|
|
}
|
|
|
|
const FSlateBrush* SProjectLauncher::GetAdvancedToggleBrush() const
|
|
{
|
|
return FEditorStyle::GetBrush("LauncherCommand.AdvancedBuild.Medium");
|
|
}
|
|
|
|
bool SProjectLauncher::GetIsAdvanced() const
|
|
{
|
|
return bAdvanced;
|
|
}
|
|
|
|
void SProjectLauncher::OnProfileEdit(const ILauncherProfileRef& Profile)
|
|
{
|
|
Model->SelectProfile(Profile);
|
|
WidgetSwitcher->SetActiveWidgetIndex(ELauncherPanels::ProfileEditor);
|
|
}
|
|
|
|
void SProjectLauncher::OnProfileRun(const ILauncherProfileRef& Profile)
|
|
{
|
|
LauncherProfile = Profile;
|
|
LauncherWorker = Model->GetSProjectLauncher()->Launch(Model->GetDeviceProxyManager(), Profile);
|
|
|
|
if (LauncherWorker.IsValid())
|
|
{
|
|
ProgressPanel->SetLauncherWorker(LauncherWorker.ToSharedRef());
|
|
WidgetSwitcher->SetActiveWidgetIndex(ELauncherPanels::Progress);
|
|
}
|
|
}
|
|
|
|
void SProjectLauncher::OnProfileDelete(const ILauncherProfileRef& Profile)
|
|
{
|
|
Model->GetProfileManager()->RemoveProfile(Profile);
|
|
}
|
|
|
|
FReply SProjectLauncher::OnAddCustomLaunchProfileClicked()
|
|
{
|
|
ILauncherProfileRef Profile = Model->GetProfileManager()->AddNewProfile();
|
|
|
|
OnProfileEdit(Profile);
|
|
|
|
ProfileSettingsPanel->EnterEditMode();
|
|
|
|
return FReply::Handled();
|
|
}
|
|
|
|
FReply SProjectLauncher::OnProfileSettingsClose()
|
|
{
|
|
if (LauncherWorker.IsValid())
|
|
{
|
|
LauncherWorker->Cancel();
|
|
}
|
|
LauncherProfile.Reset();
|
|
|
|
WidgetSwitcher->SetActiveWidgetIndex(ELauncherPanels::Launch);
|
|
|
|
return FReply::Handled();
|
|
}
|
|
|
|
FReply SProjectLauncher::OnProgressClose()
|
|
{
|
|
if (LauncherWorker.IsValid())
|
|
{
|
|
LauncherWorker->Cancel();
|
|
}
|
|
LauncherProfile.Reset();
|
|
|
|
WidgetSwitcher->SetActiveWidgetIndex(ELauncherPanels::Launch);
|
|
|
|
return FReply::Handled();
|
|
}
|
|
|
|
FReply SProjectLauncher::OnRerunClicked()
|
|
{
|
|
if (LauncherWorker.IsValid())
|
|
{
|
|
LauncherWorker->Cancel();
|
|
}
|
|
LauncherWorker = Model->GetSProjectLauncher()->Launch(Model->GetDeviceProxyManager(), LauncherProfile.ToSharedRef());
|
|
|
|
if (LauncherWorker.IsValid())
|
|
{
|
|
ProgressPanel->SetLauncherWorker(LauncherWorker.ToSharedRef());
|
|
}
|
|
|
|
return FReply::Handled();
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|