// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Widgets/Views/SListView.h" #include "IDetailsView.h" #include "AnimationModifier.h" DECLARE_DELEGATE_OneParam(FOnModifierArray, const TArray>&); DECLARE_DELEGATE_RetVal_OneParam(bool, FOnCanModifierArray, const TArray>&); DECLARE_DELEGATE_OneParam(FOnSingleModifier, const TWeakObjectPtr&); /** Data representation of a modifier in the listview */ struct FModifierListviewItem { TSubclassOf Class; TWeakObjectPtr Instance; int32 Index; UClass* OuterClass; }; typedef TSharedPtr ModifierListviewItem; class SModifierListView : public SCompoundWidget { SLATE_BEGIN_ARGS(SModifierListView) : _Items(nullptr) {} SLATE_ARGUMENT(TArray*, Items) SLATE_ARGUMENT(TSharedPtr, InstanceDetailsView) SLATE_ARGUMENT(FOnModifierArray, OnApplyModifier); SLATE_ARGUMENT(FOnCanModifierArray, OnCanRevertModifier) SLATE_ARGUMENT(FOnModifierArray, OnRevertModifier); SLATE_ARGUMENT(FOnModifierArray, OnRemoveModifier); SLATE_ARGUMENT(FOnSingleModifier, OnOpenModifier); SLATE_ARGUMENT(FOnSingleModifier, OnMoveUpModifier); SLATE_ARGUMENT(FOnSingleModifier, OnMoveDownModifier); SLATE_END_ARGS() void Construct(const FArguments& InArgs); TSharedRef OnGenerateWidgetForList(ModifierListviewItem Item, const TSharedRef& OwnerTable); void OnSelectionChanged(ModifierListviewItem SelectedItem, ESelectInfo::Type SelectInfo); /** Context menu callbacks for modifier actions */ void OnApplyModifier(); void OnRemoveModifier(); void OnOpenModifier(); void OnRevertModifier(); bool OnCanRevertModifier(); void OnMoveUpModifier(); void OnMoveDownModifier(); /** Retrieve currently select Modifier instances */ const TArray> GetSelectedModifierInstances(); /** Refreshes the listview panel */ void Refresh(); /** Generate the context menu widget when requested */ TSharedPtr OnContextMenuOpening(); protected: /** UI elements and listview data */ TSharedPtr> Listview; TArray* ListviewItems; TSharedPtr InstanceDetailsView; /** Delegates back to SAnimationModifiersTab functionality */ FOnModifierArray OnApplyModifierDelegate; FOnModifierArray OnRevertModifierDelegate; FOnCanModifierArray OnCanRevertModifierDelegate; FOnModifierArray OnRemoveModifierDelegate; FOnSingleModifier OnOpenModifierDelegate; FOnSingleModifier OnMoveUpModifierDelegate; FOnSingleModifier OnMoveDownModifierDelegate; /** Check whether or not selected modifier can moved in either direction */ bool CanMoveSelectedItemUp(); bool CanMoveSelectedItemDown(); };