Files
UnrealEngine/Engine/Source/Editor/CurveEditor/Public/CurveEditorSettings.h
2025-05-18 13:04:45 +08:00

268 lines
10 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "Containers/UnrealString.h"
#include "CoreMinimal.h"
#include "HAL/Platform.h"
#include "Math/Color.h"
#include "Misc/Optional.h"
#include "UObject/Object.h"
#include "UObject/ObjectMacros.h"
#include "UObject/SoftObjectPtr.h"
#include "UObject/UObjectGlobals.h"
#include "CurveEditorSettings.generated.h"
class UClass;
/** Defines visibility states for the tangents in the curve editor. */
UENUM()
enum class ECurveEditorTangentVisibility : uint8
{
/** All tangents should be visible. */
AllTangents,
/** Only tangents from selected keys should be visible. */
SelectedKeys,
/** Don't display tangents. */
NoTangents
};
/** Defines the position to center the zoom about in the curve editor. */
UENUM()
enum class ECurveEditorZoomPosition : uint8
{
/** Playhead. */
CurrentTime UMETA(DisplayName = "Playhead"),
/** Mouse Position. */
MousePosition UMETA(DisplayName = "Mouse Position"),
};
/** Defines the axis to snap to when dragging. */
UENUM()
enum class ECurveEditorSnapAxis : uint8
{
/** Don't snap to any axis when dragging. */
CESA_None UMETA(DisplayName = "None"),
/* Snap to the x axis when dragging. */
CESA_X UMETA(DisplayName = "X Only"),
/* Snap to the y axis when dragging. */
CESA_Y UMETA(DisplayName = "Y Only")
};
/** Custom Color Object*/
USTRUCT()
struct FCustomColorForChannel
{
GENERATED_BODY()
FCustomColorForChannel() : Object(nullptr), Color(1.0f, 1.0f, 1.0f, 1.0f) {};
UPROPERTY(EditAnywhere, Category = "Custom Colors")
TSoftClassPtr<UObject> Object;
UPROPERTY(EditAnywhere, Category = "Custom Colors")
FString PropertyName;
UPROPERTY(EditAnywhere, Category = "Custom Colors")
FLinearColor Color;
};
/** Custom Color Object*/
USTRUCT()
struct FCustomColorForSpaceSwitch
{
GENERATED_BODY()
FCustomColorForSpaceSwitch() : Color(1.0f, 1.0f, 1.0f, 1.0f) {};
UPROPERTY(EditAnywhere, Category = "Space Switch Colors")
FString ControlName;
UPROPERTY(EditAnywhere, Category = "Space Switch Colors")
FLinearColor Color;
};
/** Serializable options for curve editor. */
UCLASS(config=EditorPerProjectUserSettings)
class CURVEEDITOR_API UCurveEditorSettings : public UObject
{
public:
GENERATED_BODY()
DECLARE_MULTICAST_DELEGATE(FOnCustomColorsChanged);
DECLARE_MULTICAST_DELEGATE(FOnAxisSnappingChanged);
DECLARE_MULTICAST_DELEGATE(FOnShowValueIndicatorsChanged);
UCurveEditorSettings();
/** Gets whether or not the curve editor auto frames the selected curves. */
bool GetAutoFrameCurveEditor() const;
/** Sets whether or not the curve editor auto frames the selected curves. */
void SetAutoFrameCurveEditor(bool InbAutoFrameCurveEditor);
/** Gets whether or not the curve editor shows key bar style curves, like for constraints and spaces. */
bool GetShowBars() const;
/** Sets whether or not the curve editor shows key bar style curves, like for constraints and spaces. */
void SetShowBars(bool InShowBars);
/** Gets the number of pixels to pad input framing */
int32 GetFrameInputPadding() const;
/** Sets the number of pixels to pad input framing */
void SetFrameInputPadding(int32 InFrameInputPadding);
/** Gets the number of pixels to pad output framing */
int32 GetFrameOutputPadding() const;
/** Sets the number of pixels to pad output framing */
void SetFrameOutputPadding(int32 InFrameOutputPadding);
/** Gets whether or not to show buffered curves in the curve editor. */
bool GetShowBufferedCurves() const;
/** Sets whether or not to show buffered curves in the curve editor. */
void SetShowBufferedCurves(bool InbShowBufferedCurves);
/** Gets whether or not to show curve tool tips in the curve editor. */
bool GetShowCurveEditorCurveToolTips() const;
/** Sets whether or not to show curve tool tips in the curve editor. */
void SetShowCurveEditorCurveToolTips(bool InbShowCurveEditorCurveToolTips);
/** Gets the current tangent visibility. */
ECurveEditorTangentVisibility GetTangentVisibility() const;
/** Sets the current tangent visibility. */
void SetTangentVisibility(ECurveEditorTangentVisibility InTangentVisibility);
/** Get zoom in/out position (mouse position or current time). */
ECurveEditorZoomPosition GetZoomPosition() const;
/** Set zoom in/out position (mouse position or current time). */
void SetZoomPosition(ECurveEditorZoomPosition InZoomPosition);
/** Get snap axis. */
ECurveEditorSnapAxis GetSnapAxis() const;
/** Set snap axis. */
void SetSnapAxis(ECurveEditorSnapAxis InSnapAxis);
/** Get whether to snap the time to the currently selected key. */
bool GetSnapTimeToSelection() const;
/** Set whether to snap the time to the currently selected key. */
void SetSnapTimeToSelection(bool bInSnapTimeToSelection);
/** Set the selection color. */
void SetSelectionColor(const FLinearColor& InColor);
/** Get the selection color. */
FLinearColor GetSelectionColor() const;
/** Get custom color for object and property if it exists, if it doesn't the optional won't be set */
TOptional<FLinearColor> GetCustomColor(UClass* InClass, const FString& InPropertyName) const;
/** Set Custom Color for the specified parameters. */
void SetCustomColor(UClass* InClass, const FString& InPropertyName, FLinearColor InColor);
/** Delete Custom Color for the specified parameters. */
void DeleteCustomColor(UClass* InClass, const FString& InPropertyName);
/** Gets the multicast delegate which is run whenever custom colors have changed. */
FOnCustomColorsChanged& GetOnCustomColorsChanged() { return OnCustomColorsChangedEvent; }
/** Gets the multicast delegate which is run whenever axis snapping has changed. */
FOnAxisSnappingChanged& GetOnAxisSnappingChanged() { return OnAxisSnappingChangedEvent; }
/** Gets the multicast delegate which is run whenever showing the value indicator lines has changed. */
FOnShowValueIndicatorsChanged& OnShowValueIndicatorsChanged() { return OnShowValueIndicatorsChangedEvent; }
/** Get custom color for space name. Parent and World are reserved names and will be used instead of the specified control name. */
TOptional<FLinearColor> GetSpaceSwitchColor(const FString& InControlName) const;
/** Set Custom Space SwitchColor for the specified control name. */
void SetSpaceSwitchColor(const FString& InControlName, FLinearColor InColor);
/** Delete Custom Space Switch Color for the specified control name. */
void DeleteSpaceSwitchColor(const FString& InControlName);
/** Helper function to get next random linear color*/
static FLinearColor GetNextRandomColor();
/** Gets the tree view width percentage */
float GetTreeViewWidth() const { return TreeViewWidth; }
/** Sets the tree view width percentage */
void SetTreeViewWidth(float InTreeViewWidth);
/** Gets how sensitive the selection marquee should be when selecting points. */
float GetMarqueePointSensitivity() const { return FMath::Clamp(MarqueePointSensitivity, 0.f, 1.f); }
/** Sets how sensitive the selection marquee should be when selecting points. */
void SetMarqueePointSensitivity(float InMarqueePointSensitivity);
/** @return Whether to draw a value indicator line for the minimum and maximum key in the selected key range. */
bool GetShowValueIndicators() const { return bShowValueIndicators; }
/** Sets whether to draw a value indicator line for the minimum and maximum key in the selected key range. */
void SetShowValueIndicators(bool bValue);
protected:
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
UPROPERTY( config, EditAnywhere, Category="Curve Editor" )
bool bAutoFrameCurveEditor;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
bool bShowBars;
/* Number of pixels to add as padding in the input axis when framing curve keys */
UPROPERTY( config, EditAnywhere, Category="Curve Editor", meta=(ClampMin=0) )
int32 FrameInputPadding;
/* Number of pixels to add as padding in the output axis when framing curve keys */
UPROPERTY( config, EditAnywhere, Category="Curve Editor", meta=(ClampMin=0) )
int32 FrameOutputPadding;
UPROPERTY( config, EditAnywhere, Category="Curve Editor" )
bool bShowBufferedCurves;
UPROPERTY( config, EditAnywhere, Category="Curve Editor" )
bool bShowCurveEditorCurveToolTips;
UPROPERTY( config, EditAnywhere, Category="Curve Editor" )
ECurveEditorTangentVisibility TangentVisibility;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
ECurveEditorZoomPosition ZoomPosition;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
ECurveEditorSnapAxis SnapAxis;
UPROPERTY( config, EditAnywhere, Category="Curve Editor")
bool bSnapTimeToSelection;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
FLinearColor SelectionColor;
UPROPERTY(config, EditAnywhere, Category="Curve Editor")
TArray<FCustomColorForChannel> CustomColors;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
FLinearColor ParentSpaceCustomColor;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
FLinearColor WorldSpaceCustomColor;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
TArray<FCustomColorForSpaceSwitch> ControlSpaceCustomColors;
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
float TreeViewWidth;
/**
* Determines how close you must move the selection marque to the center of a point in order to select it.
*
* This is the percentage of point's center to the point's widget border that must be overlapped with the marquee in order for the point to be selected.
* 1.0 means as soon as marquee overlaps any portion of the point.
* 0.0 means you must touch the point's center to select it.
*/
UPROPERTY(config, EditAnywhere, Category = "Curve Editor", meta = (ClampMin = 0.0, ClampMax = 1.0))
float MarqueePointSensitivity = 0.45f;
/** When you select a single curve, whether to draw a dotted line for the minimum and maximum key in the selected key range. */
UPROPERTY(config, EditAnywhere, Category = "Curve Editor")
bool bShowValueIndicators = true;
private:
FOnCustomColorsChanged OnCustomColorsChangedEvent;
FOnAxisSnappingChanged OnAxisSnappingChangedEvent;
FOnShowValueIndicatorsChanged OnShowValueIndicatorsChangedEvent;
};