Files
UnrealEngineUWP/Engine/Source/Editor/DetailCustomizations/Private/DateTimeStructCustomization.cpp

235 lines
6.6 KiB
C++
Raw Normal View History

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "DateTimeStructCustomization.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Engine/GameViewportClient.h"
#include "PropertyHandle.h"
#include "Widgets/Input/SEditableTextBox.h"
#include "DetailWidgetRow.h"
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]
2016-09-21 18:16:12 -04:00
#include "InternationalizationSettingsModel.h"
#define LOCTEXT_NAMESPACE "DateTimeStructCustomization"
/* IDetailCustomization interface
*****************************************************************************/
void FDateTimeStructCustomization::CustomizeChildren( TSharedRef<IPropertyHandle> StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils )
{
/* do nothing */
}
void FDateTimeStructCustomization::CustomizeHeader( TSharedRef<IPropertyHandle> StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils )
{
PropertyHandle = StructPropertyHandle;
HeaderRow
.NameContent()
[
StructPropertyHandle->CreatePropertyNameWidget()
]
.ValueContent()
.MaxDesiredWidth(0.0f)
.MinDesiredWidth(125.0f)
[
SNew(SEditableTextBox)
.ClearKeyboardFocusOnCommit(false)
.IsEnabled(!PropertyHandle->IsEditConst())
.ForegroundColor(this, &FDateTimeStructCustomization::HandleTextBoxForegroundColor)
.OnTextChanged(this, &FDateTimeStructCustomization::HandleTextBoxTextChanged)
.OnTextCommitted(this, &FDateTimeStructCustomization::HandleTextBoxTextCommited)
.SelectAllTextOnCommit(true)
.Text(this, &FDateTimeStructCustomization::HandleTextBoxText)
];
}
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]
2016-09-21 18:16:12 -04:00
FDateTimeStructCustomization::FDateTimeStructCustomization()
: InputValid(true)
{
}
/* FDateTimeStructCustomization callbacks
*****************************************************************************/
FSlateColor FDateTimeStructCustomization::HandleTextBoxForegroundColor( ) const
{
if (InputValid)
{
static const FName InvertedForegroundName("InvertedForeground");
return FEditorStyle::GetSlateColor(InvertedForegroundName);
}
return FLinearColor::Red;
}
FText FDateTimeStructCustomization::HandleTextBoxText( ) const
{
TArray<void*> RawData;
PropertyHandle->AccessRawData(RawData);
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]
2016-09-21 18:16:12 -04:00
if (RawData.Num() != 1)
{
return LOCTEXT("MultipleValues", "Multiple Values");
}
auto DateTimePtr = static_cast<FDateTime*>(RawData[0]);
if (!DateTimePtr)
{
return FText::GetEmpty();
}
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]
2016-09-21 18:16:12 -04:00
return FText::FromString(ToDateTimeZoneString(*DateTimePtr));
}
void FDateTimeStructCustomization::HandleTextBoxTextChanged( const FText& NewText )
{
FDateTime DateTime;
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]
2016-09-21 18:16:12 -04:00
InputValid = ParseDateTimeZone(NewText.ToString(), DateTime);
}
void FDateTimeStructCustomization::HandleTextBoxTextCommited( const FText& NewText, ETextCommit::Type CommitInfo )
{
FDateTime ParsedDateTime;
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]
2016-09-21 18:16:12 -04:00
InputValid = ParseDateTimeZone(NewText.ToString(), ParsedDateTime);
if (InputValid && PropertyHandle.IsValid())
{
TArray<void*> RawData;
PropertyHandle->AccessRawData(RawData);
PropertyHandle->NotifyPreChange();
for (auto RawDataInstance : RawData)
{
*(FDateTime*)RawDataInstance = ParsedDateTime;
}
PropertyHandle->NotifyPostChange();
PropertyHandle->NotifyFinishedChangingProperties();
}
}
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]
2016-09-21 18:16:12 -04:00
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