Files
UnrealEngineUWP/Engine/Source/Editor/Persona/Private/Customization/BlendParameterDetails.cpp
Lauren Barnes 6248f8d412 Replacing legacy EditorStyle calls with AppStyle
#preflight 6272a74d2f6d177be3c6fdda
#rb Matt.Kuhlenschmidt

#ROBOMERGE-OWNER: Lauren.Barnes
#ROBOMERGE-AUTHOR: lauren.barnes
#ROBOMERGE-SOURCE: CL 20057269 via CL 20070159 via CL 20072035 via CL 20072203
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)
#ROBOMERGE-CONFLICT from-shelf

[CL 20105363 by Lauren Barnes in ue5-main branch]
2022-05-09 13:12:28 -04:00

102 lines
3.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Customization/BlendParameterDetails.h"
#include "IDetailsView.h"
#include "PropertyHandle.h"
#include "IDetailChildrenBuilder.h"
#include "DetailWidgetRow.h"
#include "Animation/BlendSpace.h"
#define LOCTEXT_NAMESPACE "BlendParameterDetails"
void FBlendParameterDetails::CustomizeChildren(TSharedRef<IPropertyHandle> StructPropertyHandle, class IDetailChildrenBuilder& ChildBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils)
{
uint32 NumChildren;
StructPropertyHandle->GetNumChildren(NumChildren);
static const FName RangePropertyNames[NumRangeValues] = { GET_MEMBER_NAME_CHECKED(FBlendParameter, Min), GET_MEMBER_NAME_CHECKED(FBlendParameter, Max) };
for (uint32 ChildIndex = 0; ChildIndex < NumChildren; ++ChildIndex)
{
TSharedRef<IPropertyHandle> ChildHandle = StructPropertyHandle->GetChildHandle(ChildIndex).ToSharedRef();
const FName ChildName = ChildHandle->GetProperty()->GetFName();
bool bHandled = false;
// Pick out Min and Max range value properties
for (int32 RangeValueIndex = 0; RangeValueIndex < NumRangeValues; ++RangeValueIndex)
{
bHandled = (ChildName == RangePropertyNames[RangeValueIndex]);
if ( bHandled )
{
RangeProperties[RangeValueIndex] = ChildHandle;
bValidRangeValue[RangeValueIndex] = true;
ChildBuilder.AddCustomRow(ChildHandle->GetPropertyDisplayName())
.NameWidget
[
ChildHandle->CreatePropertyNameWidget()
]
.ValueWidget
[
SAssignNew(RangeBoxes[RangeValueIndex], SNumericEntryBox<float>)
.AllowSpin(false)
.Font(FAppStyle::GetFontStyle(TEXT("PropertyWindow.NormalFont")))
.Value(this, &FBlendParameterDetails::GetRangeValue, RangeValueIndex)
.OnValueChanged(this, &FBlendParameterDetails::OnRangeNumValueChanged, RangeValueIndex)
.OnValueCommitted(this, &FBlendParameterDetails::OnRangeNumValueCommitted, RangeValueIndex)
];
break;
}
}
if (!bHandled)
{
IDetailPropertyRow& Property = ChildBuilder.AddProperty(ChildHandle);
}
}
}
void FBlendParameterDetails::OnRangeNumValueCommitted(float FloatValue, ETextCommit::Type CommitType, const int32 RangeValueIndex) const
{
// Only commit the new value if it is valid
if (bValidRangeValue[RangeValueIndex])
{
RangeProperties[RangeValueIndex]->SetValue(FloatValue);
}
}
void FBlendParameterDetails::OnRangeNumValueChanged(float FloatValue, const int32 RangeValueIndex)
{
// Make sure Max stays bigger than Min (and the other way around)
float OtherValue;
if (RangeProperties[!RangeValueIndex]->GetValue(OtherValue) == FPropertyAccess::Success)
{
bValidRangeValue[RangeValueIndex] = true;
if (RangeValueIndex == 0 && FloatValue >= OtherValue)
{
bValidRangeValue[RangeValueIndex] = false;
}
else if ( RangeValueIndex == 1 && FloatValue <= OtherValue )
{
bValidRangeValue[RangeValueIndex] = false;
}
}
}
TOptional<float> FBlendParameterDetails::GetRangeValue(const int32 RangeValueIndex) const
{
TOptional<float> ReturnValue;
float RangeValue = 0.0f;
if (RangeProperties[RangeValueIndex]->GetValue(RangeValue) == FPropertyAccess::Success)
{
ReturnValue = RangeValue;
}
return ReturnValue;
}
#undef LOCTEXT_NAMESPACE