// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Widgets/Input/SNumericDropDown.h" #include "Containers/ArrayView.h" #include "Misc/FrameNumber.h" #include "MVVM/ViewModels/ViewModel.h" #include "MVVM/ViewModels/ViewModelHierarchy.h" #define LOCTEXT_NAMESPACE "SequencerHelpers" class FSequencer; class IKeyArea; class UMovieSceneSection; class UMovieSceneTrack; namespace UE { namespace Sequencer { class FChannelModel; class IOutlinerExtension; struct FViewModelVariantIterator; } // namespace Sequencer } // namespace UE class SequencerHelpers { public: using FViewModel = UE::Sequencer::FViewModel; /** * Gets the key areas from the requested node */ static void GetAllKeyAreas(TSharedPtr DataModel, TSet>& KeyAreas); /** * Gets the channels from the requested node */ static void GetAllChannels(TSharedPtr DataModel, TSet>& Channels); /** * Get the section index that relates to the specified time * @return the index corresponding to the highest overlapping section, or nearest section where no section overlaps the current time */ static int32 GetSectionFromTime(TArrayView InSections, FFrameNumber Time); /** * Get descendant nodes */ static void GetDescendantNodes(TSharedRef DataModel, TSet >& Nodes); /** * Gets all sections from the requested node */ static void GetAllSections(TSharedPtr DataModel, TSet>& Sections); /** * Perform default selection for the specified mouse event, based on the current hotspot */ static void PerformDefaultSelection(FSequencer& Sequencer, const FPointerEvent& MouseEvent); /** * Attempt to summon a context menu for the current hotspot */ static TSharedPtr SummonContextMenu(FSequencer& Sequencer, const FGeometry& MyGeometry, const FPointerEvent& MouseEvent); /* * Build a sub menu for adding a new track section */ static void BuildNewSectionMenu(const TWeakPtr& InWeakSequencer , const int32 InRowIndex , const TWeakObjectPtr& InTrackWeak , FMenuBuilder& MenuBuilder); /* * Build an inline menu or sub menu for editing track section(s) */ static void BuildEditSectionMenu(const TWeakPtr& InWeakSequencer , const TArray>& InWeakSections , FMenuBuilder& MenuBuilder , const bool bInSubMenu); /* * Build an inline menu or sub menu for editing track(s) */ static void BuildEditTrackMenu(const TWeakPtr& InWeakSequencer , const TArray>& InWeakTracks , FMenuBuilder& MenuBuilder , const bool bInSubMenu); /* * Build a menu for selection the blend algorithm */ static void BuildBlendingMenu(const TWeakPtr& InWeakSequencer , const TWeakObjectPtr& InTrackWeak , FMenuBuilder& MenuBuilder); /** * Gets all section objects from track area models */ static TArray> GetSectionObjectsFromTrackAreaModels(const UE::Sequencer::FViewModelVariantIterator& InTrackAreaModels); /** * Sorts an array of outliner items by start time of the first layer bar or selection order * @param Sequencer The Sequencer that the outliner items belong to * @param InItems The list of outliner items to sort * @param bInSortByItemOrder If true, sorts by the order of the item in the array instead of by start time of the layer bar * @param bInDescending If true, sorts in reverse order instead of ascending * @param bInTransact If true, creates an editor transaction that can be undone */ static void SortOutlinerItems(FSequencer& Sequencer , const TArray>& InItems , const bool bInSortByItemOrder , const bool bInDescending , const bool bInTransact = true); }; #undef LOCTEXT_NAMESPACE