Files
UnrealEngineUWP/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Public/ControlRigSpaceChannelCurveModel.h
mike zyracki 370c84b6a9 Sequencer: Space Switching Curve Editor Space view was getting lost on undo since the ChannelHandle would become invaid, need to keep track of OnDestroy callback so we can recreate it like the other curve models do.
#jira UE-140294
#preflight 61f8717180608c70299d66d5
#rb max.chen

#ROBOMERGE-AUTHOR: mike.zyracki
#ROBOMERGE-SOURCE: CL 18801893 in //UE5/Release-5.0/... via CL 18802182 via CL 18821541
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v908-18788545)

[CL 18821629 by mike zyracki in ue5-main branch]
2022-02-02 01:45:52 -05:00

62 lines
3.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreTypes.h"
#include "UObject/WeakObjectPtr.h"
#include "UObject/WeakObjectPtrTemplates.h"
#include "KeyBarCurveModel.h"
#include "Sequencer/MovieSceneControlRigSpaceChannel.h"
#include "Channels/MovieSceneChannelHandle.h"
#include "Framework/MultiBox/MultiBoxBuilder.h"
class UMovieSceneSection;
class ISequencer;
class FControlRigSpaceChannelCurveModel : public FKeyBarCurveModel
{
public:
static ECurveEditorViewID ViewID;
FControlRigSpaceChannelCurveModel(TMovieSceneChannelHandle<FMovieSceneControlRigSpaceChannel> InChannel, UMovieSceneSection* InOwningSection, TWeakPtr<ISequencer> InWeakSequencer);
~FControlRigSpaceChannelCurveModel();
//FCurveModel
virtual const void* GetCurve() const override;
virtual void Modify() override;
virtual void DrawCurve(const FCurveEditor& CurveEditor, const FCurveEditorScreenSpace& ScreenSpace, TArray<TTuple<double, double>>& InterpolatingPoints) const override;
virtual void GetKeys(const FCurveEditor& CurveEditor, double MinTime, double MaxTime, double MinValue, double MaxValue, TArray<FKeyHandle>& OutKeyHandles) const override;
virtual void GetKeyDrawInfo(ECurvePointType PointType, const FKeyHandle InKeyHandle, FKeyDrawInfo& OutDrawInfo) const override;
virtual void GetKeyPositions(TArrayView<const FKeyHandle> InKeys, TArrayView<FKeyPosition> OutKeyPositions) const override;
virtual void SetKeyPositions(TArrayView<const FKeyHandle> InKeys, TArrayView<const FKeyPosition> InKeyPositions, EPropertyChangeType::Type ChangeType) override;
virtual void GetKeyAttributes(TArrayView<const FKeyHandle> InKeys, TArrayView<FKeyAttributes> OutAttributes) const override;
virtual void SetKeyAttributes(TArrayView<const FKeyHandle> InKeys, TArrayView<const FKeyAttributes> InAttributes, EPropertyChangeType::Type ChangeType = EPropertyChangeType::Unspecified) override;
virtual void GetCurveAttributes(FCurveAttributes& OutCurveAttributes) const override;
virtual void SetCurveAttributes(const FCurveAttributes& InCurveAttributes) override;
virtual void GetTimeRange(double& MinTime, double& MaxTime) const override;
virtual void GetValueRange(double& MinValue, double& MaxValue) const override;
virtual int32 GetNumKeys() const override;
virtual void GetNeighboringKeys(const FKeyHandle InKeyHandle, TOptional<FKeyHandle>& OutPreviousKeyHandle, TOptional<FKeyHandle>& OutNextKeyHandle) const override {}
virtual bool Evaluate(double ProspectiveTime, double& OutValue) const override;
virtual void AddKeys(TArrayView<const FKeyPosition> InKeyPositions, TArrayView<const FKeyAttributes> InAttributes, TArrayView<TOptional<FKeyHandle>>* OutKeyHandles) override;
virtual void RemoveKeys(TArrayView<const FKeyHandle> InKeys) override;
virtual void CreateKeyProxies(TArrayView<const FKeyHandle> InKeyHandles, TArrayView<UObject*> OutObjects) override;
//FKeyBarCurveModel
virtual void BuildContextMenu(const FCurveEditor& CurveEditor,FMenuBuilder& MenuBuilder, TOptional<FCurvePointHandle> ClickedPoint);
virtual TArray<FKeyBarCurveModel::FBarRange> FindRanges();
private:
void FixupCurve();
private:
TMovieSceneChannelHandle<FMovieSceneControlRigSpaceChannel> ChannelHandle;
TWeakObjectPtr<UMovieSceneSection> WeakSection;
TWeakPtr<ISequencer> WeakSequencer;
FDelegateHandle OnDestroyHandle;
};