// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "HAL/Platform.h" #include "IDetailCustomization.h" #include "Templates/SharedPointer.h" #include "Generators/MovieSceneEasingCurves.h" #include "Widgets/SCompoundWidget.h" class IDetailLayoutBuilder; enum class EMovieSceneBuiltInEasing : uint8; class FReply; class IPropertyHandle; DECLARE_DELEGATE_OneParam(FEasingFunctionGridWidget_OnClicked, EMovieSceneBuiltInEasing); /** Widget showing a grid of curves including their names. * Curves are grouped within rows, e.g. Exponential in, out, in-out in one row. * A filter can be used to exclude several curves from the grid. */ class SEasingFunctionGridWidget : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SEasingFunctionGridWidget) {} /** The easing curve filter containing all curve types that should be excluded.In case the filter is empty, all curve types will be shown. */ SLATE_ATTRIBUTE(TSet, FilterExclude) SLATE_EVENT(FEasingFunctionGridWidget_OnClicked, OnTypeChanged) SLATE_END_ARGS() void Construct(const FArguments& InArgs); private: struct FGroup { FString GroupName; TArray> Values; }; FGroup& FindOrAddGroup(TArray& Groups, const FString& GroupName); TArray ConstructGroups(const TSet& FilterExclude); FReply OnTypeButtonClicked(EMovieSceneBuiltInEasing type); FEasingFunctionGridWidget_OnClicked OnClickedDelegate; TAttribute> FilterExcludeAttribute; };