Files
2025-05-18 13:04:45 +08:00

175 lines
5.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "AnimatedRange.h"
#include "Delegates/Delegate.h"
#include "Misc/EnumClassFlags.h"
#include "Misc/FrameNumber.h"
#include "Misc/FrameRate.h"
#include "Misc/FrameTime.h"
#include "MovieSceneMarkedFrame.h"
#include "MovieSceneSequenceID.h"
#include "SequencerWidgetsDelegates.h"
#include "Widgets/Input/NumericTypeInterface.h"
namespace EMovieScenePlayerStatus
{
enum Type : int;
}
/** Enum specifying how to find the nearest key */
enum class ENearestKeyOption : uint8
{
NKO_None = 0x00,
/* Search keys */
NKO_SearchKeys = 0x01,
/* Search sections */
NKO_SearchSections = 0x02,
/* Search markers */
NKO_SearchMarkers = 0x04,
/** Search all tracks */
NKO_SearchAllTracks UE_DEPRECATED(5.4, "Search all tracks has been deprecated") = 0x08
};
ENUM_CLASS_FLAGS(ENearestKeyOption);
struct FTimeSliderArgs
{
FTimeSliderArgs()
: ScrubPosition(0)
, ViewRange(FAnimatedRange(0.0f, 5.0f))
, ClampRange(FAnimatedRange(-FLT_MAX / 2.f, FLT_MAX / 2.f))
, AllowZoom(true)
{}
/** The scrub position */
TAttribute<FFrameTime> ScrubPosition;
/** The scrub position text */
TAttribute<FString> ScrubPositionText;
/** The parent sequence that the scrub position display text is relative to */
TAttribute<FMovieSceneSequenceID> ScrubPositionParent;
/** Called when the scrub position parent sequence is changed */
FOnScrubPositionParentChanged OnScrubPositionParentChanged;
/** Attribute for the parent sequence chain of the current sequence */
TAttribute<TArray<FMovieSceneSequenceID>> ScrubPositionParentChain;
/** View time range */
TAttribute< FAnimatedRange > ViewRange;
/** Clamp time range */
TAttribute< FAnimatedRange > ClampRange;
/** Called when the scrub position changes */
FOnScrubPositionChanged OnScrubPositionChanged;
/** Called right before the scrubber begins to move */
FSimpleDelegate OnBeginScrubberMovement;
/** Called right after the scrubber handle is released by the user */
FSimpleDelegate OnEndScrubberMovement;
/** Called when the view range changes */
FOnViewRangeChanged OnViewRangeChanged;
/** Called when the clamp range changes */
FOnTimeRangeChanged OnClampRangeChanged;
/** Delegate that is called when getting the nearest key */
FOnGetNearestKey OnGetNearestKey;
/** Attribute defining the active sub-sequence range for this controller */
TAttribute<TOptional<TRange<FFrameNumber>>> SubSequenceRange;
/** Attribute defining the playback range for this controller */
TAttribute<TRange<FFrameNumber>> PlaybackRange;
/** Attribute defining the time bounds for this controller. The time bounds should be a subset of the playback range. */
TAttribute<TRange<FFrameNumber>> TimeBounds;
/** Attribute for the current sequence's display rate */
TAttribute<FFrameRate> DisplayRate;
/** Attribute for the current sequence's tick resolution */
TAttribute<FFrameRate> TickResolution;
/** Delegate that is called when the playback range wants to change */
FOnFrameRangeChanged OnPlaybackRangeChanged;
/** Called right before the playback range starts to be dragged */
FSimpleDelegate OnPlaybackRangeBeginDrag;
/** Called right after the playback range has finished being dragged */
FSimpleDelegate OnPlaybackRangeEndDrag;
/** Attribute defining the selection range for this controller */
TAttribute<TRange<FFrameNumber>> SelectionRange;
/** Delegate that is called when the selection range wants to change */
FOnFrameRangeChanged OnSelectionRangeChanged;
/** Called right before the selection range starts to be dragged */
FSimpleDelegate OnSelectionRangeBeginDrag;
/** Called right after the selection range has finished being dragged */
FSimpleDelegate OnSelectionRangeEndDrag;
/** Called right before a mark starts to be dragged */
FSimpleDelegate OnMarkBeginDrag;
/** Called right after a mark has finished being dragged */
FSimpleDelegate OnMarkEndDrag;
/** Attribute for the current sequence's vertical frames */
TAttribute<TSet<FFrameNumber>> VerticalFrames;
/** Attribute for the current sequence's marked frames */
TAttribute<TArray<FMovieSceneMarkedFrame>> MarkedFrames;
/** Attribute for the marked frames that might need to be shown, but do not belong to the current sequence*/
TAttribute<TArray<FMovieSceneMarkedFrame>> GlobalMarkedFrames;
/** Called when the marked frame needs to be set */
FOnSetMarkedFrame OnSetMarkedFrame;
/** Called when a marked frame is added */
FOnAddMarkedFrame OnAddMarkedFrame;
/** Called when a marked frame is deleted */
FOnDeleteMarkedFrame OnDeleteMarkedFrame;
/** Called when all marked frames should be deleted */
FSimpleDelegate OnDeleteAllMarkedFrames;
/** Round the scrub position to an integer during playback */
TAttribute<EMovieScenePlayerStatus::Type> PlaybackStatus;
/** Attribute defining whether the playback range is locked */
TAttribute<bool> IsPlaybackRangeLocked;
/** Attribute defining whether the marked frames are locked */
TAttribute<bool> AreMarkedFramesLocked;
/** Attribute defining the time snap interval */
TAttribute<float> TimeSnapInterval;
/** Called when toggling the playback range lock */
FSimpleDelegate OnTogglePlaybackRangeLocked;
/** Called when toggling the marked frames lock */
FSimpleDelegate OnToggleMarkedFramesLocked;
/** If we are allowed to zoom */
bool AllowZoom;
/** Numeric Type interface for converting between frame numbers and display formats. */
TSharedPtr<INumericTypeInterface<double>> NumericTypeInterface;
};