You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Removed redundant private include paths from build.cs files. Fixed include paths to be relative to the private or public folders. Hid or removed includes that reached into other private module folders. Updated PublicInclude paths when necessary. #jira #preflight 631e281694758d0bf2ea1399 [CL 21960082 by bryan sefcik in ue5-main branch]
224 lines
6.4 KiB
C++
224 lines
6.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "Widgets/Project/SProjectLauncherProjectPicker.h"
|
|
|
|
#include "DesktopPlatformModule.h"
|
|
#include "Styling/AppStyle.h"
|
|
#include "Framework/Application/SlateApplication.h"
|
|
#include "Framework/Commands/UIAction.h"
|
|
#include "Framework/MultiBox/MultiBoxBuilder.h"
|
|
#include "Textures/SlateIcon.h"
|
|
#include "Widgets/SBoxPanel.h"
|
|
#include "Widgets/Input/SComboButton.h"
|
|
#include "Widgets/Layout/SBorder.h"
|
|
#include "Widgets/Text/STextBlock.h"
|
|
|
|
#include "Widgets/Shared/SProjectLauncherFormLabel.h"
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "SProjectLauncherUnrealProjectPicker"
|
|
|
|
|
|
/* SProjectLauncherProjectPicker structors
|
|
*****************************************************************************/
|
|
|
|
SProjectLauncherProjectPicker::~SProjectLauncherProjectPicker()
|
|
{
|
|
if (Model.IsValid())
|
|
{
|
|
Model->OnProfileSelected().RemoveAll(this);
|
|
}
|
|
}
|
|
|
|
|
|
/* SProjectLauncherProjectPicker interface
|
|
*****************************************************************************/
|
|
|
|
void SProjectLauncherProjectPicker::Construct(const FArguments& InArgs, const TSharedRef<FProjectLauncherModel>& InModel)
|
|
{
|
|
Model = InModel;
|
|
|
|
LaunchProfileAttr = InArgs._LaunchProfile;
|
|
|
|
ChildSlot
|
|
[
|
|
MakeProjectWidget()
|
|
];
|
|
}
|
|
|
|
|
|
/* SProjectLauncherProjectPicker implementation
|
|
*****************************************************************************/
|
|
|
|
TSharedRef<SWidget> SProjectLauncherProjectPicker::MakeProjectMenuWidget()
|
|
{
|
|
FMenuBuilder MenuBuilder(true, NULL);
|
|
{
|
|
if (LaunchProfileAttr.IsBound())
|
|
{
|
|
FUIAction AnyProjectAction(FExecuteAction::CreateSP(this, &SProjectLauncherProjectPicker::HandleAnyProjectClicked, FString("Any")));
|
|
MenuBuilder.AddMenuEntry(LOCTEXT("AnyProjectAction", "Any Project"), LOCTEXT("AnyProjectActionHint", "This profile can be used on any project."), FSlateIcon(), AnyProjectAction);
|
|
}
|
|
|
|
const TArray<FString>& AvailableGames = FGameProjectHelper::GetAvailableGames();
|
|
for (int32 Index = 0; Index < AvailableGames.Num(); ++Index)
|
|
{
|
|
FString ProjectPath = FPaths::RootDir() / AvailableGames[Index] / AvailableGames[Index] + TEXT(".uproject");
|
|
FUIAction ProjectAction(FExecuteAction::CreateSP(this, &SProjectLauncherProjectPicker::HandleProjectMenuEntryClicked, ProjectPath));
|
|
MenuBuilder.AddMenuEntry(FText::FromString(AvailableGames[Index]), FText::FromString(ProjectPath), FSlateIcon(), ProjectAction);
|
|
}
|
|
|
|
MenuBuilder.AddMenuSeparator();
|
|
|
|
FUIAction BrowseAction(FExecuteAction::CreateSP(this, &SProjectLauncherProjectPicker::HandleProjectMenuEntryClicked, FString()));
|
|
MenuBuilder.AddMenuEntry(LOCTEXT("BrowseAction", "Browse..."), LOCTEXT("BrowseActionHint", "Browse for a project on your computer"), FSlateIcon(), BrowseAction);
|
|
}
|
|
|
|
return MenuBuilder.MakeWidget();
|
|
}
|
|
|
|
|
|
TSharedRef<SWidget> SProjectLauncherProjectPicker::MakeProjectWidget()
|
|
{
|
|
TSharedRef<SWidget> Widget = SNew(SBorder)
|
|
.BorderImage(FAppStyle::GetBrush("ToolPanel.GroupBorder"))
|
|
.Padding(0)
|
|
[
|
|
SNew(SHorizontalBox)
|
|
|
|
+ SHorizontalBox::Slot()
|
|
.Padding(16, 0, 12, 0)
|
|
.AutoWidth()
|
|
[
|
|
SNew(SProjectLauncherFormLabel)
|
|
.ErrorToolTipText(NSLOCTEXT("ProjectLauncherBuildValidation", "NoProjectSelectedError", "A Project must be selected."))
|
|
.ErrorVisibility(this, &SProjectLauncherProjectPicker::HandleValidationErrorIconVisibility, ELauncherProfileValidationErrors::NoProjectSelected)
|
|
.LabelText(LOCTEXT("ProjectComboBoxLabel", "Project"))
|
|
]
|
|
|
|
+ SHorizontalBox::Slot()
|
|
.AutoWidth()
|
|
[
|
|
// project selector
|
|
SNew(SComboButton)
|
|
.ButtonContent()
|
|
[
|
|
SNew(STextBlock)
|
|
.Text(this, &SProjectLauncherProjectPicker::HandleProjectComboButtonText)
|
|
]
|
|
.ContentPadding(FMargin(4.0f, 0.0f, 4.0f, 0.0f))
|
|
.MenuContent()
|
|
[
|
|
MakeProjectMenuWidget()
|
|
]
|
|
.ToolTipText(this, &SProjectLauncherProjectPicker::HandleProjectComboButtonToolTip)
|
|
]
|
|
];
|
|
|
|
return Widget;
|
|
}
|
|
|
|
|
|
/* SProjectLauncherProjectPicker callbacks
|
|
*****************************************************************************/
|
|
|
|
FText SProjectLauncherProjectPicker::HandleProjectComboButtonText() const
|
|
{
|
|
if (LaunchProfileAttr.IsBound())
|
|
{
|
|
ILauncherProfilePtr Profile = LaunchProfileAttr.Get();
|
|
if (Profile.IsValid() && Profile->HasProjectSpecified())
|
|
{
|
|
return FText::FromString(Profile->GetProjectName());
|
|
}
|
|
return LOCTEXT("AnyProjectAction", "Any Project");
|
|
}
|
|
|
|
FString Name = Model->GetProfileManager()->GetProjectName();
|
|
if (!Name.IsEmpty())
|
|
{
|
|
return FText::FromString(Name);
|
|
}
|
|
|
|
return LOCTEXT("SelectProjectText", "Select...");
|
|
}
|
|
|
|
|
|
FText SProjectLauncherProjectPicker::HandleProjectComboButtonToolTip() const
|
|
{
|
|
return LOCTEXT("SelectProjectText_Tooltip", "Select or browse for a project");
|
|
}
|
|
|
|
|
|
void SProjectLauncherProjectPicker::HandleAnyProjectClicked(FString ProjectPath)
|
|
{
|
|
if (LaunchProfileAttr.IsBound())
|
|
{
|
|
ILauncherProfilePtr Profile = LaunchProfileAttr.Get();
|
|
if (Profile.IsValid())
|
|
{
|
|
Profile->SetProjectSpecified(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void SProjectLauncherProjectPicker::HandleProjectMenuEntryClicked(FString ProjectPath)
|
|
{
|
|
if (ProjectPath.IsEmpty())
|
|
{
|
|
FString DefaultPath = FPaths::RootDir();
|
|
|
|
TSharedPtr<SWindow> ParentWindow = FSlateApplication::Get().FindWidgetWindow(AsShared());
|
|
void* ParentWindowHandle = (ParentWindow.IsValid() && ParentWindow->GetNativeWindow().IsValid()) ? ParentWindow->GetNativeWindow()->GetOSWindowHandle() : nullptr;
|
|
|
|
TArray<FString> OutFiles;
|
|
if (FDesktopPlatformModule::Get()->OpenFileDialog(ParentWindowHandle, LOCTEXT("SelectProjectDialogTitle", "Select a project").ToString(), DefaultPath, TEXT(""), TEXT("Project files (*.uproject)|*.uproject"), EFileDialogFlags::None, OutFiles))
|
|
{
|
|
SetProjectPath(OutFiles[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SetProjectPath(ProjectPath);
|
|
}
|
|
}
|
|
|
|
|
|
void SProjectLauncherProjectPicker::SetProjectPath(FString ProjectPath)
|
|
{
|
|
if (LaunchProfileAttr.IsBound())
|
|
{
|
|
ILauncherProfilePtr Profile = LaunchProfileAttr.Get();
|
|
if (Profile.IsValid())
|
|
{
|
|
Profile->SetProjectSpecified(true);
|
|
Profile->SetProjectPath(ProjectPath);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Model->GetProfileManager()->SetProjectPath(ProjectPath);
|
|
}
|
|
}
|
|
|
|
|
|
EVisibility SProjectLauncherProjectPicker::HandleValidationErrorIconVisibility(ELauncherProfileValidationErrors::Type Error) const
|
|
{
|
|
// Profiles are always valid
|
|
if (LaunchProfileAttr.IsBound())
|
|
{
|
|
return EVisibility::Hidden;
|
|
}
|
|
|
|
ILauncherProfileManagerRef ProfileManager = Model->GetProfileManager();
|
|
if (ProfileManager->GetProjectName().IsEmpty())
|
|
{
|
|
return EVisibility::Visible;
|
|
}
|
|
return EVisibility::Hidden;
|
|
}
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|