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

82 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Map.h"
#include "EventHandlers/ISequenceDataEventHandler.h"
#include "EventHandlers/MovieSceneDataEventContainer.h"
#include "MVVM/Extensions/DynamicExtensionContainer.h"
#include "MVVM/ViewModelTypeID.h"
#include "Misc/Guid.h"
#include "Templates/SharedPointer.h"
class UMovieSceneTrack;
namespace UE::MovieScene { class ISequenceDataEventHandler; }
struct FMovieSceneBinding;
namespace UE
{
namespace Sequencer
{
class FObjectBindingModel;
class FPlaceholderObjectBindingModel;
class FSequenceModel;
class FViewModel;
struct FViewModelChildren;
class SEQUENCER_API FObjectBindingModelStorageExtension
: public IDynamicExtension
, private UE::MovieScene::TIntrusiveEventHandler<UE::MovieScene::ISequenceDataEventHandler>
{
public:
UE_SEQUENCER_DECLARE_VIEW_MODEL_TYPE_ID(FObjectBindingModelStorageExtension);
FObjectBindingModelStorageExtension();
/**
* Implementation function for creating a new model for a binding from its ID. May return a placeholder if the binding does not yet exist.
* @param Binding The binding to create a model for
*/
TSharedPtr<FViewModel> GetOrCreateModelForBinding(const FGuid& Binding);
/**
* Implementation function for creating a new model for a binding
* @param Binding The binding to create a model for
*/
TSharedPtr<FViewModel> GetOrCreateModelForBinding(const FMovieSceneBinding& Binding);
TSharedPtr<FObjectBindingModel> FindModelForObjectBinding(const FGuid& InObjectBindingID) const;
virtual void OnCreated(TSharedRef<FViewModel> InWeakOwner) override;
virtual void OnReinitialize() override;
private:
void OnBindingAdded(const FMovieSceneBinding& Binding) override;
void OnBindingRemoved(const FGuid& ObjectBindingID) override;
void OnTrackAddedToBinding(UMovieSceneTrack* Track, const FGuid& Binding) override;
void OnTrackRemovedFromBinding(UMovieSceneTrack* Track, const FGuid& Binding) override;
void OnBindingParentChanged(const FGuid& Binding, const FGuid& NewParent) override;
TSharedPtr<FObjectBindingModel> CreateModelForObjectBinding(const FMovieSceneBinding& Binding);
TSharedPtr<FViewModel> CreatePlaceholderForObjectBinding(const FGuid& ObjectID);
TSharedPtr<FViewModel> FindPlaceholderForObjectBinding(const FGuid& InObjectBindingID) const;
void Compact();
private:
TMap<FGuid, TWeakPtr<FObjectBindingModel>> ObjectBindingToModel;
TMap<FGuid, TWeakPtr<FPlaceholderObjectBindingModel>> ObjectBindingToPlaceholder;
FSequenceModel* OwnerModel;
};
} // namespace Sequencer
} // namespace UE