You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
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:
committed by
Marc.Audy@epicgames.com
parent
e2ba04378b
commit
69d9a1a087
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user