Files
UnrealEngineUWP/Engine/Source/Runtime/UMG/Private/Components/EditableText.cpp
Chris Gagnon 930e33cb48 Copying //UE4/Dev-Editor to Dev-Main (//UE4/Dev-Main) for 4.23 From CL 6837861
#rb none

[CL 6838042 by Chris Gagnon in Main branch]
2019-06-04 15:42:48 -04:00

234 lines
6.2 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "Components/EditableText.h"
#include "UObject/ConstructorHelpers.h"
#include "Engine/Font.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Widgets/Input/SEditableText.h"
#include "Slate/SlateBrushAsset.h"
#define LOCTEXT_NAMESPACE "UMG"
/////////////////////////////////////////////////////
// UEditableText
static FEditableTextStyle* DefaultEditableTextStyle = nullptr;
UEditableText::UEditableText(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
if (DefaultEditableTextStyle == nullptr)
{
// HACK: THIS SHOULD NOT COME FROM CORESTYLE AND SHOULD INSTEAD BE DEFINED BY ENGINE TEXTURES/PROJECT SETTINGS
DefaultEditableTextStyle = new FEditableTextStyle(FCoreStyle::Get().GetWidgetStyle<FEditableTextStyle>("NormalEditableText"));
// Unlink UMG default colors from the editor settings colors.
DefaultEditableTextStyle->UnlinkColors();
}
WidgetStyle = *DefaultEditableTextStyle;
ColorAndOpacity_DEPRECATED = FLinearColor::Black;
if (!IsRunningDedicatedServer())
{
static ConstructorHelpers::FObjectFinder<UFont> RobotoFontObj(*UWidget::GetDefaultFontName());
Font_DEPRECATED = FSlateFontInfo(RobotoFontObj.Object, 12, FName("Bold"));
}
IsReadOnly = false;
IsPassword = false;
MinimumDesiredWidth = 0.0f;
IsCaretMovedWhenGainFocus = true;
SelectAllTextWhenFocused = false;
RevertTextOnEscape = false;
ClearKeyboardFocusOnCommit = true;
SelectAllTextOnCommit = false;
AllowContextMenu = true;
VirtualKeyboardDismissAction = EVirtualKeyboardDismissAction::TextChangeOnDismiss;
Clipping = EWidgetClipping::ClipToBounds;
AccessibleBehavior = ESlateAccessibleBehavior::Auto;
bCanChildrenBeAccessible = false;
}
void UEditableText::ReleaseSlateResources(bool bReleaseChildren)
{
Super::ReleaseSlateResources(bReleaseChildren);
MyEditableText.Reset();
}
TSharedRef<SWidget> UEditableText::RebuildWidget()
{
MyEditableText = SNew( SEditableText )
.Style( &WidgetStyle )
.MinDesiredWidth( MinimumDesiredWidth )
.IsCaretMovedWhenGainFocus( IsCaretMovedWhenGainFocus )
.SelectAllTextWhenFocused( SelectAllTextWhenFocused )
.RevertTextOnEscape( RevertTextOnEscape )
.ClearKeyboardFocusOnCommit( ClearKeyboardFocusOnCommit )
.SelectAllTextOnCommit( SelectAllTextOnCommit )
.OnTextChanged( BIND_UOBJECT_DELEGATE( FOnTextChanged, HandleOnTextChanged ) )
.OnTextCommitted( BIND_UOBJECT_DELEGATE( FOnTextCommitted, HandleOnTextCommitted ) )
.VirtualKeyboardType( EVirtualKeyboardType::AsKeyboardType( KeyboardType.GetValue() ) )
.VirtualKeyboardOptions(VirtualKeyboardOptions)
.VirtualKeyboardDismissAction(VirtualKeyboardDismissAction)
.Justification( Justification );
return MyEditableText.ToSharedRef();
}
void UEditableText::SynchronizeProperties()
{
Super::SynchronizeProperties();
TAttribute<FText> TextBinding = PROPERTY_BINDING(FText, Text);
TAttribute<FText> HintTextBinding = PROPERTY_BINDING(FText, HintText);
MyEditableText->SetText(TextBinding);
MyEditableText->SetHintText(HintTextBinding);
MyEditableText->SetIsReadOnly(IsReadOnly);
MyEditableText->SetIsPassword(IsPassword);
MyEditableText->SetAllowContextMenu(AllowContextMenu);
MyEditableText->SetVirtualKeyboardDismissAction(VirtualKeyboardDismissAction);
MyEditableText->SetJustification(Justification);
// TODO UMG Complete making all properties settable on SEditableText
ShapedTextOptions.SynchronizeShapedTextProperties(*MyEditableText);
}
FText UEditableText::GetText() const
{
if ( MyEditableText.IsValid() )
{
return MyEditableText->GetText();
}
return Text;
}
void UEditableText::SetText(FText InText)
{
Text = InText;
if ( MyEditableText.IsValid() )
{
MyEditableText->SetText(Text);
}
}
void UEditableText::SetIsPassword(bool InbIsPassword)
{
IsPassword = InbIsPassword;
if ( MyEditableText.IsValid() )
{
MyEditableText->SetIsPassword(IsPassword);
}
}
void UEditableText::SetHintText(FText InHintText)
{
HintText = InHintText;
if ( MyEditableText.IsValid() )
{
MyEditableText->SetHintText(HintText);
}
}
void UEditableText::SetIsReadOnly(bool InbIsReadyOnly)
{
IsReadOnly = InbIsReadyOnly;
if ( MyEditableText.IsValid() )
{
MyEditableText->SetIsReadOnly(IsReadOnly);
}
}
void UEditableText::SetClearKeyboardFocusOnCommit(bool bInClearKeyboardFocusOnCommit)
{
ClearKeyboardFocusOnCommit = bInClearKeyboardFocusOnCommit;
MyEditableText->SetClearKeyboardFocusOnCommit(ClearKeyboardFocusOnCommit);
}
void UEditableText::HandleOnTextChanged(const FText& InText)
{
OnTextChanged.Broadcast(InText);
}
void UEditableText::HandleOnTextCommitted(const FText& InText, ETextCommit::Type CommitMethod)
{
OnTextCommitted.Broadcast(InText, CommitMethod);
}
void UEditableText::PostLoad()
{
Super::PostLoad();
if ( GetLinkerUE4Version() < VER_UE4_DEPRECATE_UMG_STYLE_ASSETS )
{
if ( Style_DEPRECATED != nullptr )
{
const FEditableTextStyle* StylePtr = Style_DEPRECATED->GetStyle<FEditableTextStyle>();
if ( StylePtr != nullptr )
{
WidgetStyle = *StylePtr;
}
Style_DEPRECATED = nullptr;
}
if ( BackgroundImageSelected_DEPRECATED != nullptr )
{
WidgetStyle.BackgroundImageSelected = BackgroundImageSelected_DEPRECATED->Brush;
BackgroundImageSelected_DEPRECATED = nullptr;
}
if ( BackgroundImageComposing_DEPRECATED != nullptr )
{
WidgetStyle.BackgroundImageComposing = BackgroundImageComposing_DEPRECATED->Brush;
BackgroundImageComposing_DEPRECATED = nullptr;
}
if ( CaretImage_DEPRECATED != nullptr )
{
WidgetStyle.CaretImage = CaretImage_DEPRECATED->Brush;
CaretImage_DEPRECATED = nullptr;
}
}
if (GetLinkerUE4Version() < VER_UE4_DEPRECATE_UMG_STYLE_OVERRIDES)
{
if (Font_DEPRECATED.HasValidFont())
{
WidgetStyle.Font = Font_DEPRECATED;
Font_DEPRECATED = FSlateFontInfo();
}
if (ColorAndOpacity_DEPRECATED != FLinearColor::Black)
{
WidgetStyle.ColorAndOpacity = ColorAndOpacity_DEPRECATED;
ColorAndOpacity_DEPRECATED = FLinearColor::Black;
}
}
}
#if WITH_ACCESSIBILITY
TSharedPtr<SWidget> UEditableText::GetAccessibleWidget() const
{
return MyEditableText;
}
#endif
#if WITH_EDITOR
const FText UEditableText::GetPaletteCategory()
{
return LOCTEXT("Input", "Input");
}
#endif
/////////////////////////////////////////////////////
#undef LOCTEXT_NAMESPACE