Copying //UE4/Orion-Staging to //UE4/Dev-Main (Source: //UE4/Orion-Staging @ 3134206)

#lockdown Nick.Penwarden
#rb none
#codereview Andrew.Grant
==========================
MAJOR FEATURES + CHANGES
==========================

Change 2845744 on 2016/01/27 by Andrew.Grant

	Merging from //Orion/Dev-General @ 2845681

Change 2849210 on 2016/01/29 by Andrew.Grant

	Merging using //Orion/Dev-General/_To_//UE4/Orion-Stating

Change 2854307 on 2016/02/03 by Andrew.Grant

	Merging using //Orion/Dev-General/_To_//UE4/Orion-Stating

Change 2880059 on 2016/02/24 by Andrew.Grant

	Merging  //Orion/Dev-General @ 2879808

Change 2891205 on 2016/03/02 by Andrew.Grant

	Merging //Orion/Dev-General @ 2889885

Change 2904080 on 2016/03/10 by Andrew.Grant

	Merging using //Orion/Dev-General @ 2902652

Change 2950235 on 2016/04/20 by Andrew.Grant

	Automerged files from Dev-General

Change 2976227 on 2016/05/12 by Andrew.Grant

	Autoresolved files from using //Orion/Dev-General

Change 3016193 on 2016/06/16 by Andrew.Grant

	Merging //Orion/Dev-General @ 3015761

Change 3033336 on 2016/06/29 by Andrew.Grant

	Merging using //Orion/Dev-General/_To_//UE4/Orion-Stating

Change 3037514 on 2016/07/05 by Andrew.Grant

	Merging from //Orion/Dev-General @ 3037465

Change 3091216 on 2016/08/16 by Andrew.Grant

	Merging using //Orion/Dev-General/_To_//UE4/Orion-Stating

Change 3107127 on 2016/08/30 by Andrew.Grant

	Merging using //Orion/Dev-General/_To_//UE4/Orion-Stating

Change 3129090 on 2016/09/16 by Andrew.Grant

	Autoresolved files from Dev-Gen @ 3130045

Change 3130536 on 2016/09/19 by Andrew.Grant

	To Resolve

Change 3130537 on 2016/09/19 by Andrew.Grant

	Tricky merges?

Change 3130810 on 2016/09/19 by Andrew.Grant

	Merging from //Orion/Dev-General @ 3130045

Change 3130880 on 2016/09/19 by Andrew.Grant

	Blueprint fix

Change 3131009 on 2016/09/19 by Andrew.Grant

	removed spammy warning

Change 3131216 on 2016/09/19 by Andrew.Grant

	Content fixes for Orion-Staging

Change 3131700 on 2016/09/19 by Andrew.Grant

	Merging //UE4/Dev-Main to Orion-Staging (//UE4/Orion-Staging)

Change 3132144 on 2016/09/20 by Andrew.Grant

	Merging test framework work from Dev-General

Change 3132154 on 2016/09/20 by Andrew.Grant

	Fix for linux client

Change 3132179 on 2016/09/20 by Andrew.Grant

	Fixed breakages due to latest //UE4/Main

Change 3132948 on 2016/09/20 by Andrew.Grant

	Fix for UE-36216 (replicating 3125764 from ForniteMain)

Change 3133103 on 2016/09/20 by Andrew.Grant

	Added EpicCMSUIFramework and CommonUI to Fortnite plugin

Change 3133327 on 2016/09/20 by Andrew.Grant

	Orion automation improvements

Change 3133555 on 2016/09/20 by Andrew.Grant

	FIx for UE-36226

Change 3133996 on 2016/09/21 by Andrew.Grant

	REbuilt texture streaming

Change 3134204 on 2016/09/21 by Andrew.Grant

	Merging audio files from Orion with correct compression settings

Change 3134205 on 2016/09/21 by Andrew.Grant

	Fix for gameplay tag ordering from Orion, and fix for soak test report numbers

Change 3134206 on 2016/09/21 by Andrew.Grant

	Merging //UE4/Dev-Main to Orion-Staging (//UE4/Orion-Staging)

[CL 3135156 by Marc Audy in Main branch]
This commit is contained in:
Marc Audy
2016-09-21 18:16:12 -04:00
committed by Marc.Audy@epicgames.com
parent e2ba04378b
commit 69d9a1a087
110 changed files with 4247 additions and 1119 deletions

View File

@@ -2,6 +2,7 @@
#include "DetailCustomizationsPrivatePCH.h"
#include "DateTimeStructCustomization.h"
#include "InternationalizationSettingsModel.h"
#define LOCTEXT_NAMESPACE "DateTimeStructCustomization"
@@ -40,6 +41,12 @@ void FDateTimeStructCustomization::CustomizeHeader( TSharedRef<IPropertyHandle>
];
}
FDateTimeStructCustomization::FDateTimeStructCustomization()
: InputValid(true)
{
}
/* FDateTimeStructCustomization callbacks
*****************************************************************************/
@@ -60,7 +67,7 @@ FText FDateTimeStructCustomization::HandleTextBoxText( ) const
{
TArray<void*> RawData;
PropertyHandle->AccessRawData(RawData);
if (RawData.Num() != 1)
{
return LOCTEXT("MultipleValues", "Multiple Values");
@@ -72,22 +79,22 @@ FText FDateTimeStructCustomization::HandleTextBoxText( ) const
return FText::GetEmpty();
}
return FText::FromString(DateTimePtr->ToString());
return FText::FromString(ToDateTimeZoneString(*DateTimePtr));
}
void FDateTimeStructCustomization::HandleTextBoxTextChanged( const FText& NewText )
{
FDateTime DateTime;
InputValid = FDateTime::Parse(NewText.ToString(), DateTime);
InputValid = ParseDateTimeZone(NewText.ToString(), DateTime);
}
void FDateTimeStructCustomization::HandleTextBoxTextCommited( const FText& NewText, ETextCommit::Type CommitInfo )
{
FDateTime ParsedDateTime;
InputValid = FDateTime::Parse(NewText.ToString(), ParsedDateTime);
InputValid = ParseDateTimeZone(NewText.ToString(), ParsedDateTime);
if (InputValid && PropertyHandle.IsValid())
{
TArray<void*> RawData;
@@ -104,4 +111,120 @@ void FDateTimeStructCustomization::HandleTextBoxTextCommited( const FText& NewTe
}
int32 FDateTimeStructCustomization::GetLocalTimezone()
{
const UInternationalizationSettingsModel* const InternationalizationSettingsModel = GetDefault<UInternationalizationSettingsModel>();
if (!InternationalizationSettingsModel)
{
return TIMEZONE_UTC;
}
return InternationalizationSettingsModel->GetTimezoneValue();
}
bool FDateTimeStructCustomization::ParseDateTimeZone(const FString& DateTimeZoneString, FDateTime& OutDateTime)
{
static FString Delimiter = FString(TEXT(" "));
// Split our DatetimeZone string into a date and a timezone marker
FString DateString;
FString TimezoneString;
if (!DateTimeZoneString.Split(Delimiter, &DateString, &TimezoneString, ESearchCase::CaseSensitive, ESearchDir::FromEnd))
{
DateString = DateTimeZoneString;
}
// Trim surrounding whitespace
DateString = DateString.TrimTrailing().Trim();
TimezoneString = TimezoneString.TrimTrailing().Trim();
// Validate date
FDateTime LocalizedDate;
if (DateString.IsEmpty() || !FDateTime::Parse(DateString, LocalizedDate))
{
return false;
}
// Validate timezone marker
if (TimezoneString.IsEmpty())
{
// If no timezone is present, we assume the user's preferred timezone
OutDateTime = ConvertTime(LocalizedDate, GetLocalTimezone(), TIMEZONE_UTC);
return true;
}
// Fail if timezone string isn't numeric
if (!TimezoneString.IsNumeric())
{
return false;
}
// Convert timezone into int
int32 Timezone = FCString::Atoi(*TimezoneString);
Timezone = ConvertShortTimezone(Timezone);
// Check for timezones in the full-format HHMM, ex: -0500, +1345, etc
const int32 TimezoneHour = Timezone / 100;
const bool bHasValidMinuteOffset = ((FMath::Abs(Timezone) % 100) % 15 == 0);
const bool bIsTimezoneHourValid = (TimezoneHour >= -12 && TimezoneHour <= 14);
if (bHasValidMinuteOffset && bIsTimezoneHourValid)
{
OutDateTime = ConvertTime(LocalizedDate, Timezone, TIMEZONE_UTC);
return true;
}
// Not a valid time
return false;
}
FDateTime FDateTimeStructCustomization::ConvertTime(const FDateTime& InDate, int32 InTimezone, int32 OutTimezone)
{
if (InTimezone == OutTimezone)
{
return InDate;
}
// Timezone Hour ranges go from -12 to +14 from UTC
// Convert from whole-hour to the full-format HHMM (-5 -> -0500, 0 -> +0000, etc)
InTimezone = ConvertShortTimezone(InTimezone);
OutTimezone = ConvertShortTimezone(OutTimezone);
// Extract timezone minutes
const int32 InTimezoneMinutes = (FMath::Abs(InTimezone) % 100);
const int32 OutTimezoneMinutes = (FMath::Abs(OutTimezone) % 100);
// Calculate our Minutes difference
const int32 MinutesDifference = OutTimezoneMinutes - InTimezoneMinutes;
// Calculate our Hours difference
const int64 HoursDifference = (OutTimezone / 100) - (InTimezone / 100);
return FDateTime(InDate + FTimespan(HoursDifference, MinutesDifference, 0));
}
FString FDateTimeStructCustomization::ToDateTimeZoneString(const FDateTime& UTCDate)
{
const int32 DisplayTimezone = GetLocalTimezone();
const FDateTime LocalTime = ConvertTime(UTCDate, TIMEZONE_UTC, DisplayTimezone);
return FString::Printf(TEXT("%s %s%0.4d"), *LocalTime.ToString(), (DisplayTimezone >= 0 ? TEXT("+") : TEXT("")), DisplayTimezone);
}
int32 FDateTimeStructCustomization::ConvertShortTimezone(int32 ShortTimezone)
{
// Convert timezones from short-format into long format, -5 -> -0500
// Timezone Hour ranges go from -12 to +14 from UTC
if (ShortTimezone >= -12 && ShortTimezone <= 14)
{
return ShortTimezone * 100;
}
// Not a short-form timezone
return ShortTimezone;
}
#undef LOCTEXT_NAMESPACE