// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "Containers/ArrayView.h" #include "CoreTypes.h" #include "CurveEditorTypes.h" #include "CurveModel.h" #include "Curves/KeyHandle.h" #include "Math/Color.h" #include "Math/Range.h" #include "Misc/Optional.h" #include "Templates/Tuple.h" #include "UObject/NameTypes.h" #include "UObject/UnrealType.h" class FCurveEditor; class FMenuBuilder; struct FCurveEditorScreenSpace; struct FCurvePointHandle; struct FKeyAttributes; struct FKeyDrawInfo; struct FKeyPosition; /** * Class that provides functionality to represents keys as continuous ranges. */ class CURVEEDITOR_API FKeyBarCurveModel: public FCurveModel { public: FKeyBarCurveModel(); ~FKeyBarCurveModel(); virtual const void* GetCurve() const override { return nullptr; } virtual void Modify() override {}; virtual void DrawCurve(const FCurveEditor& CurveEditor, const FCurveEditorScreenSpace& ScreenSpace, TArray>& InterpolatingPoints) const override{}; virtual void GetKeys(double MinTime, double MaxTime, double MinValue, double MaxValue, TArray& OutKeyHandles) const override {}; virtual void AddKeys(TArrayView InPositions, TArrayView InAttributes, TArrayView>* OutKeyHandles = nullptr) override {}; virtual void RemoveKeys(TArrayView InKeys, double InCurrentTime) override {}; virtual void GetKeyPositions(TArrayView InKeys, TArrayView OutKeyPositions) const override {}; virtual void SetKeyPositions(TArrayView InKeys, TArrayView InKeyPositions,const EPropertyChangeType::Type ChangeType = EPropertyChangeType::Unspecified) override {}; virtual void GetKeyDrawInfo(ECurvePointType PointType, const FKeyHandle InKeyHandle, FKeyDrawInfo& OutDrawInfo) const override {}; virtual void GetTimeRange(double& MinTime, double& MaxTime) const override {}; virtual void GetValueRange(double& MinValue, double& MaxValue) const override {}; virtual int32 GetNumKeys() const override { return 0; } virtual void GetNeighboringKeys(const FKeyHandle InKeyHandle, TOptional& OutPreviousKeyHandle, TOptional& OutNextKeyHandle) const override {}; virtual bool Evaluate(double InTime, double& OutValue) const override { return false; } /* * New Virtuals for Key Bar Curve Model */ virtual void BuildContextMenu(const FCurveEditor& CurveEditor, FMenuBuilder& MenuBuilder, TOptional ClickedPoint) {}; /** * Bar Ranges for the Keys */ struct CURVEEDITOR_API FBarRange { /* Spaces have ifinite ranges, Constraints don't*/ bool bRangeIsInfinite = true; TRange Range; FName Name; FLinearColor Color; }; /** * Find all of the ranges in this model. This should return an increasing set of ranges. */ virtual TArray FindRanges() { TArray Temp; return Temp; } };