// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "StateTreeViewModel.h" #include "Widgets/Views/STreeView.h" class UStateTreeEditorData; class UStateTreeState; class SScrollBox; class FActionTreeViewDragDrop : public FDragDropOperation { public: DRAG_DROP_OPERATOR_TYPE(FActionTreeViewDragDrop, FDragDropOperation); static TSharedRef New(const UStateTreeState* InState) { return MakeShareable(new FActionTreeViewDragDrop(InState)); } const UStateTreeState* GetDraggedState() const { return State; } private: FActionTreeViewDragDrop(const UStateTreeState* InState) : State(InState) { } const UStateTreeState* State; }; class SStateTreeView : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SStateTreeView) {} SLATE_END_ARGS() SStateTreeView(); ~SStateTreeView(); void Construct(const FArguments& InArgs, TSharedRef StateTreeViewModel); void SavePersistentExpandedStates(); private: virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override; void UpdateTree(bool bExpandPersistent = false); // ViewModel handlers void HandleModelAssetChanged(); void HandleModelStatesRemoved(const TSet& AffectedParents); void HandleModelStatesMoved(const TSet& AffectedParents, const TSet& MovedStates); void HandleModelStateAdded(UStateTreeState* ParentState, UStateTreeState* NewState); void HandleModelStatesChanged(const TSet& AffectedStates, const FPropertyChangedEvent& PropertyChangedEvent); void HandleModelSelectionChanged(const TArray>& SelectedStates); // Treeview handlers TSharedRef HandleGenerateRow(TWeakObjectPtr InState, const TSharedRef& InOwnerTableView); void HandleGetChildren(TWeakObjectPtr InParent, TArray>& OutChildren); void HandleTreeSelectionChanged(TWeakObjectPtr InSelectedItem, ESelectInfo::Type SelectionType); TSharedPtr HandleContextMenuOpening(); // Action handlers FReply HandleAddStateButton(); void HandleRenameState(UStateTreeState* State); void HandleAddState(UStateTreeState* AfterItem); void HandleAddChildState(UStateTreeState* ParentItem); void HandleDeleteItems(); TSharedPtr StateTreeViewModel; TSharedPtr>> TreeView; TSharedPtr ExternalScrollbar; TSharedPtr ViewBox; TArray> Subtrees; UStateTreeState* RequestedRenameState; bool bItemsDirty; bool bUpdatingSelection; };