Files
UnrealEngine/Engine/Source/Developer/TargetPlatform/Private/SDeviceBrowserDefaultPlatformAddWidget.cpp
2025-05-18 13:04:45 +08:00

181 lines
4.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "SDeviceBrowserDefaultPlatformAddWidget.h"
#include "Internationalization/Text.h"
#include "Misc/MessageDialog.h"
#include "Misc/CoreMisc.h"
#include "SlateOptMacros.h"
#include "Widgets/Images/SImage.h"
#include "Widgets/Input/SButton.h"
#include "Widgets/Input/SEditableTextBox.h"
#include "Interfaces/ITargetPlatform.h"
#include "Interfaces/ITargetPlatformManagerModule.h"
#include "PlatformInfo.h"
#define LOCTEXT_NAMESPACE "SDeviceBrowserDefaultPlatformAddWidget"
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SDeviceBrowserDefaultPlatformAddWidget::Construct(const FArguments& InArgs, const FString& InPlatformName)
{
// callback for determining the visibility of the credentials box
auto CredentialsBoxVisibility = [this, InPlatformName]() -> EVisibility {
ITargetPlatform* Platform = GetTargetPlatformManager()->FindTargetPlatform(*InPlatformName);
if ((Platform != nullptr) && Platform->RequiresUserCredentials() != EPlatformAuthentication::Never)
{
return EVisibility::Visible;
}
return EVisibility::Collapsed;
};
// construct children
ChildSlot
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
[
SNew(SHorizontalBox)
// device identifier input
+ SHorizontalBox::Slot()
.HAlign(HAlign_Fill)
.Padding(4.0f, 0.0f, 0.0f, 0.0f)
[
SNew(SVerticalBox)
.ToolTipText(LOCTEXT("DeviceIdToolTip", "The device's unique identifier. Depending on the selected Platform, this can be a host name, an IP address, a MAC address or some other platform specific unique identifier."))
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Left)
[
SNew(STextBlock)
.Text(LOCTEXT("DeviceIdLabel", "Device Identifier:"))
]
+ SVerticalBox::Slot()
.FillHeight(1.0)
.Padding(0.0f, 4.0f, 0.0f, 0.0f)
[
SAssignNew(DeviceIdTextBox, SEditableTextBox)
]
]
// device name input
+ SHorizontalBox::Slot()
.HAlign(HAlign_Fill)
.Padding(4.0f, 0.0f, 0.0f, 0.0f)
[
SNew(SVerticalBox)
.ToolTipText(LOCTEXT("DeviceNameToolTip", "A display name for this device. Once the device is connected, this will be replaced with the device's actual name."))
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Left)
[
SNew(STextBlock)
.Text(LOCTEXT("DisplayNameLabel", "Display Name:"))
]
+ SVerticalBox::Slot()
.FillHeight(1.0)
.Padding(0.0f, 4.0f, 0.0f, 0.0f)
[
SAssignNew(DeviceNameTextBox, SEditableTextBox)
]
]
]
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
[
SNew(SHorizontalBox)
.Visibility_Lambda(CredentialsBoxVisibility)
// user name input
+ SHorizontalBox::Slot()
.FillWidth(0.5f)
.Padding(4.0f, 0.0f, 0.0f, 0.0f)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Left)
[
SNew(STextBlock)
.Text(LOCTEXT("UserNameLabel", "User:"))
]
+ SVerticalBox::Slot()
.FillHeight(1.0f)
.Padding(0.0f, 4.0f, 0.0f, 0.0f)
[
SAssignNew(UserNameTextBox, SEditableTextBox)
]
]
// user password input
+ SHorizontalBox::Slot()
.FillWidth(0.5f)
.Padding(4.0f, 0.0f, 0.0f, 0.0f)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Left)
[
SNew(STextBlock)
.Text(LOCTEXT("UserPasswordLabel", "Password:"))
]
+ SVerticalBox::Slot()
.FillHeight(1.0f)
.Padding(0.0f, 4.0f, 0.0f, 0.0f)
[
SAssignNew(UserPasswordTextBox, SEditableTextBox)
.IsPassword(true)
]
]
]
];
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
bool SDeviceBrowserDefaultPlatformAddWidget::IsInputValid(const FString& InPlatformName)
{
FString TextCheck = DeviceNameTextBox->GetText().ToString();
TextCheck.TrimStartAndEndInline();
if (!TextCheck.IsEmpty())
{
ITargetPlatform* Platform = GetTargetPlatformManager()->FindTargetPlatform(*InPlatformName);
if (!Platform || Platform->RequiresUserCredentials() != EPlatformAuthentication::Always)
{
return true;
}
// check user/password as well
TextCheck = UserNameTextBox->GetText().ToString();
TextCheck.TrimStartAndEndInline();
if (!TextCheck.IsEmpty())
{
// do not trim the password
return !UserPasswordTextBox->GetText().ToString().IsEmpty();
}
}
return false;
}
#undef LOCTEXT_NAMESPACE