// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreTypes.h" #include "Templates/SharedPointer.h" #include "Containers/Array.h" #include "Containers/ContainersFwd.h" #include "UObject/ObjectMacros.h" #include "UObject/Class.h" #include "MovieSceneKeyStruct.h" #include "SequencerChannelTraits.h" #include "Channels/MovieSceneChannelHandle.h" #include "Channels/MovieSceneBoolChannel.h" #include "Channels/MovieSceneByteChannel.h" #include "Channels/MovieSceneDoubleChannel.h" #include "Channels/MovieSceneFloatChannel.h" #include "Channels/MovieSceneIntegerChannel.h" #include "Channels/MovieSceneEventChannel.h" #include "Channels/MovieSceneObjectPathChannel.h" #include "Channels/MovieSceneTimeWarpChannel.h" #include "Sections/MovieSceneStringSection.h" #include "Sections/MovieSceneParticleSection.h" #include "Sections/MovieSceneActorReferenceSection.h" struct FKeyHandle; struct FKeyDrawParams; class SWidget; class ISequencer; class FMenuBuilder; class FStructOnScope; class ISectionLayoutBuilder; /** Overrides for adding or updating a key for non-standard channels */ MOVIESCENETOOLS_API FKeyHandle AddOrUpdateKey(FMovieSceneDoubleChannel* Channel, UMovieSceneSection* SectionToKey, const TMovieSceneExternalValue& EditorData, FFrameNumber InTime, ISequencer& Sequencer, const FGuid& InObjectBindingID, FTrackInstancePropertyBindings* PropertyBindings); MOVIESCENETOOLS_API FKeyHandle AddOrUpdateKey(FMovieSceneFloatChannel* Channel, UMovieSceneSection* SectionToKey, const TMovieSceneExternalValue& EditorData, FFrameNumber InTime, ISequencer& Sequencer, const FGuid& InObjectBindingID, FTrackInstancePropertyBindings* PropertyBindings); MOVIESCENETOOLS_API FKeyHandle AddOrUpdateKey(FMovieSceneActorReferenceData* Channel, UMovieSceneSection* SectionToKey, FFrameNumber InTime, ISequencer& Sequencer, const FGuid& InObjectBindingID, FTrackInstancePropertyBindings* PropertyBindings); MOVIESCENETOOLS_API FKeyHandle AddOrUpdateKey(FMovieSceneTimeWarpChannel* Channel, UMovieSceneSection* SectionToKey, FFrameNumber InTime, ISequencer& Sequencer, const FGuid& InObjectBindingID, FTrackInstancePropertyBindings* PropertyBindings); /** Key editor overrides */ MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneBoolChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneByteChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneIntegerChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneDoubleChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneFloatChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneStringChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneObjectPathChannel* Channel); MOVIESCENETOOLS_API bool CanCreateKeyEditor(const FMovieSceneActorReferenceData* Channel); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API TSharedRef CreateKeyEditor(const TMovieSceneChannelHandle& Channel, const UE::Sequencer::FCreateKeyEditorParams& Params); MOVIESCENETOOLS_API UMovieSceneKeyStructType* InstanceGeneratedStruct(FMovieSceneByteChannel* Channel, FSequencerKeyStructGenerator* Generator); MOVIESCENETOOLS_API UMovieSceneKeyStructType* InstanceGeneratedStruct(FMovieSceneTimeWarpChannel* Channel, FSequencerKeyStructGenerator* Generator); MOVIESCENETOOLS_API UMovieSceneKeyStructType* InstanceGeneratedStruct(FMovieSceneObjectPathChannel* Channel, FSequencerKeyStructGenerator* Generator); MOVIESCENETOOLS_API void PostConstructKeyInstance(const TMovieSceneChannelHandle& ChannelHandle, FKeyHandle InHandle, FStructOnScope* Struct); MOVIESCENETOOLS_API void PostConstructKeyInstance(const TMovieSceneChannelHandle& ChannelHandle, FKeyHandle InHandle, FStructOnScope* Struct); MOVIESCENETOOLS_API void PostConstructKeyInstance(const TMovieSceneChannelHandle& ChannelHandle, FKeyHandle InHandle, FStructOnScope* Struct); /** Key drawing overrides */ MOVIESCENETOOLS_API void DrawKeys(FMovieSceneDoubleChannel* Channel, TArrayView InKeyHandles, const UMovieSceneSection* InOwner, TArrayView OutKeyDrawParams); MOVIESCENETOOLS_API void DrawKeys(FMovieSceneFloatChannel* Channel, TArrayView InKeyHandles, const UMovieSceneSection* InOwner, TArrayView OutKeyDrawParams); MOVIESCENETOOLS_API void DrawKeys(FMovieSceneParticleChannel* Channel, TArrayView InKeyHandles, const UMovieSceneSection* InOwner, TArrayView OutKeyDrawParams); MOVIESCENETOOLS_API void DrawKeys(FMovieSceneEventChannel* Channel, TArrayView InKeyHandles, const UMovieSceneSection* InOwner, TArrayView OutKeyDrawParams); /** Context menu overrides */ MOVIESCENETOOLS_API void ExtendSectionMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API void ExtendSectionMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API void ExtendSectionMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API void ExtendSectionMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API void ExtendSectionMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API TSharedPtr ExtendSidebarMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& InChannels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API TSharedPtr ExtendSidebarMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& InChannels,const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API TSharedPtr ExtendSidebarMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& InChannels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API TSharedPtr ExtendSidebarMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& InChannels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API TSharedPtr ExtendSidebarMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& InChannels, const TArray>& InWeakSections, TWeakPtr InWeakSequencer); MOVIESCENETOOLS_API void ExtendKeyMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, TWeakPtr InSequencer); MOVIESCENETOOLS_API void ExtendKeyMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, TWeakPtr InSequencer); MOVIESCENETOOLS_API void ExtendKeyMenu(FMenuBuilder& OuterMenuBuilder, TSharedPtr MenuExtender, TArray>&& Channels, TWeakPtr InSequencer); /** Curve editor models */ MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& DoubleChannel) { return true; } MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& FloatChannel) { return true; } MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& IntegerChannel) { return true; } MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& BoolChannel) { return true; } MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& ByteChannel) { return true; } MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& EventChannel) { return true; } MOVIESCENETOOLS_API inline bool SupportsCurveEditorModels(const TMovieSceneChannelHandle& TimeWarpChannel) { return true; } MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& DoubleChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& FloatChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& IntegerChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& BoolChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& ByteChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& EventChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API TUniquePtr CreateCurveEditorModel(const TMovieSceneChannelHandle& TimeWarpChannel, const UE::Sequencer::FCreateCurveEditorModelParams& Params); MOVIESCENETOOLS_API bool ShouldShowCurve(const FMovieSceneFloatChannel* Channel, UMovieSceneSection* InSection); MOVIESCENETOOLS_API bool ShouldShowCurve(const FMovieSceneDoubleChannel* Channel, UMovieSceneSection* InSection); MOVIESCENETOOLS_API TSharedPtr CreateChannelModel(const TMovieSceneChannelHandle& InChannelHandle, const UE::Sequencer::FSectionModel& InSection, FName InChannelName);