// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. #include "IntegralKeyDetailsCustomization.h" #include "Misc/Attribute.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Styling/SlateTypes.h" #include "SlateOptMacros.h" #include "Widgets/Input/SCheckBox.h" #include "DetailWidgetRow.h" #include "IDetailPropertyRow.h" #include "DetailCategoryBuilder.h" #include "DetailLayoutBuilder.h" #include "Curves/IntegralCurve.h" #include "Sections/MovieSceneBoolSection.h" #include "Sections/MovieSceneParticleSection.h" #include "MovieSceneToolHelpers.h" #define LOCTEXT_NAMESPACE "IntegralKeyDetailsCustomization" TSharedRef FIntegralKeyDetailsCustomization::MakeInstance(TWeakObjectPtr InSection) { return MakeShareable(new FIntegralKeyDetailsCustomization(InSection)); } BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void FIntegralKeyDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) { if(Section.IsValid()) { TSharedPtr ValueProperty = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(FIntegralKey, Value)); if(ValueProperty.IsValid()) { TSharedPtr ValueWidget = nullptr; if(Section->IsA()) { ValueWidget = SNew(SCheckBox) .IsChecked_Lambda([ValueProperty]() { int32 Value = 0; if(ValueProperty->GetValue(Value) == FPropertyAccess::Success) { return (Value != 0) ? ECheckBoxState::Checked : ECheckBoxState::Unchecked; } return ECheckBoxState::Undetermined; }) .OnCheckStateChanged_Lambda([ValueProperty](ECheckBoxState InState) { int32 Value = (InState == ECheckBoxState::Checked) ? 1 : 0; ValueProperty->SetValue(Value); }); } else if(Section->IsA()) { UEnum* Enum = FindObject(ANY_PACKAGE, TEXT("EParticleKey"), true); check(Enum); ValueWidget = MovieSceneToolHelpers::MakeEnumComboBox( Enum, TAttribute::Create(TAttribute::FGetter::CreateLambda([ValueProperty]() { int32 Value = 0; ValueProperty->GetValue(Value); return Value; })), FOnEnumSelectionChanged::CreateLambda([ValueProperty](int32 Selection, ESelectInfo::Type SelectionType) { ValueProperty->SetValue(Selection); })); } else { ValueWidget = ValueProperty->CreatePropertyValueWidget(); } DetailBuilder.EditCategory("Key") .AddProperty("Value") .CustomWidget() .NameContent() [ ValueProperty->CreatePropertyNameWidget() ] .ValueContent() [ ValueWidget.ToSharedRef() ]; } } } END_SLATE_FUNCTION_BUILD_OPTIMIZATION #undef LOCTEXT_NAMESPACE