// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/Views/STreeView.h" class FSequencer; class FMenuBuilder; class UMovieScene; class UMovieSceneNodeGroup; struct FSequencerNodeGroupTreeNode; struct FSequencerNodeGroupNode; class SSequencerGroupManager : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SSequencerGroupManager) {} SLATE_END_ARGS() void Construct(const FArguments& InArgs, TWeakPtr InWeakSequencer); ~SSequencerGroupManager(); TSharedPtr GetSequencer() const { return WeakSequencer.Pin(); } const FSlateBrush* GetIconBrush(TSharedPtr NodeGroupTreeNode) const; void RefreshNodeGroups() { bNodeGroupsDirty = true; } UMovieScene* GetMovieScene() const; private: virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override; void UpdateTree(); void HandleTreeSelectionChanged(TSharedPtr InSelectedNode, ESelectInfo::Type SelectionType); void SelectItemsInGroup(FSequencerNodeGroupNode* NodeGroupNode); void RequestDeleteNodeGroup(FSequencerNodeGroupNode* NodeGroupNode); void RemoveSelectedItemsFromNodeGroup(); void CreateNodeGroup(); void GetSelectedItemsNodePaths(TSet& OutSelectedNodePaths) const; public: void SelectSelectedItemsInSequencer(); void SelectItemsSelectedInSequencer(); /** Request entering rename editing for a selection set, after setup and any refresh have completed */ void RequestRenameNodeGroup(UMovieSceneNodeGroup* NodeGroup) { RequestedRenameNodeGroup = NodeGroup; } private: TSharedPtr OnContextMenuOpening(); private: /** The sequencer UI instance that is currently open */ TWeakPtr WeakSequencer; TSharedPtr>> TreeView; TArray> NodeGroupsTree; /** A collection of NodePaths for all items which are in all node groups, for quick processing */ TSet AllNodeGroupItems; /** If not null, enter rename editing for this set after any setup and refresh have completed */ UMovieSceneNodeGroup* RequestedRenameNodeGroup; bool bNodeGroupsDirty; bool bSynchronizingSelection; };