Files
FunnyGirl/Source/FunnyGirlEditor/Public/Morph/AnimTimeline/SAnimEditorBase.h
T
2026-05-19 13:42:41 +07:00

63 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
// Vendored for FunnyGirlEditor (adapted from UE Persona private SAnimEditorBase).
#pragma once
#include "CoreMinimal.h"
#include "UObject/GCObject.h"
#include "IPersonaPreviewScene.h"
#include "Widgets/SCompoundWidget.h"
#include "PersonaDelegates.h"
class UAnimationAsset;
class UAnimPreviewInstance;
class FUNNYGIRLEDITOR_API SAnimEditorBase : public SCompoundWidget, public FGCObject
{
public:
SLATE_BEGIN_ARGS(SAnimEditorBase)
: _DisplayAnimTimeline(true)
, _DisplayAnimScrubBar(false)
, _DisplayAnimScrubBarEditing(false)
{}
SLATE_EVENT(FOnObjectsSelected, OnObjectsSelected)
SLATE_ARGUMENT(bool, DisplayAnimTimeline)
SLATE_ARGUMENT(bool, DisplayAnimScrubBar)
SLATE_ARGUMENT(bool, DisplayAnimScrubBarEditing)
SLATE_END_ARGS()
void Construct(const FArguments& InArgs, const TSharedPtr<IPersonaPreviewScene>& InPreviewScene);
float GetViewMinInput() const { return ViewMinInput; }
float GetViewMaxInput() const { return ViewMaxInput; }
float GetMinInput() const { return 0.0f; }
float GetMaxInput() const { return GetSequenceLength(); }
void SetInputViewRange(float InViewMinInput, float InViewMaxInput);
float GetScrubValue() const;
void OnSelectionChanged(const TArray<UObject*>& SelectedItems);
// FGCObject
virtual void AddReferencedObjects(FReferenceCollector& Collector) override {}
virtual FString GetReferencerName() const override { return TEXT("FunnyGirlVendoredSAnimEditorBase"); }
virtual TSharedRef<SWidget> CreateDocumentAnchor();
protected:
virtual TSharedRef<SWidget> CreateAnimTimelineWidget() = 0;
virtual TSharedRef<SWidget> ConstructAnimScrubPanel(bool bDisplayAnimScrubBarEditing);
virtual UAnimationAsset* GetEditorObject() const = 0;
float GetSequenceLength() const;
TSharedRef<IPersonaPreviewScene> GetPreviewScene() const { return PreviewScenePtr.Pin().ToSharedRef(); }
protected:
TWeakPtr<IPersonaPreviewScene> PreviewScenePtr;
TSharedPtr<SVerticalBox> EditorPanels;
TSharedPtr<SVerticalBox> NonScrollEditorPanels;
FOnObjectsSelected OnObjectsSelectedDelegate;
float ViewMinInput = 0.0f;
float ViewMaxInput = 0.0f;
};