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

108 lines
3.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Templates/SharedPointer.h"
#include "Containers/SortedMap.h"
#include "Misc/Guid.h"
#include "Delegates/DelegateCombinations.h"
#include "UObject/WeakObjectPtr.h"
#include "UObject/WeakObjectPtrTemplates.h"
#include "MovieSceneSequenceID.h"
#include "EventHandlers/ISignedObjectEventHandler.h"
#include "EventHandlers/ISequenceDataEventHandler.h"
#include "SequencerCoreFwd.h"
#include "MVVM/ViewModels/ViewModel.h"
#include "MVVM/Extensions/IOutlinerExtension.h"
#include "MVVM/Extensions/IGeometryExtension.h"
#include "MVVM/Extensions/ISortableExtension.h"
#include "MVVM/Extensions/ICurveEditorTreeItemExtension.h"
class ISequencer;
class FSequencer;
class FCurveEditor;
class UMovieScene;
class UMovieSceneSequence;
namespace UE
{
namespace Sequencer
{
class FEditorViewModel;
class FSequenceModel;
class FSequencerEditorViewModel;
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnInitializeSequenceModel, TSharedPtr<FEditorViewModel>, TSharedPtr<FSequenceModel>);
class SEQUENCER_API FSequenceModel
: public FViewModel
, public ISortableExtension
, public IOutlinerDropTargetOutlinerExtension
, public UE::MovieScene::ISignedObjectEventHandler
, public UE::MovieScene::ISequenceDataEventHandler
{
public:
UE_SEQUENCER_DECLARE_CASTABLE(FSequenceModel, FViewModel, ISortableExtension, IOutlinerDropTargetOutlinerExtension);
static FOnInitializeSequenceModel CreateExtensionsEvent;
FSequenceModel(TWeakPtr<FSequencerEditorViewModel> InEditorViewModel);
void InitializeExtensions();
FMovieSceneSequenceID GetSequenceID() const;
UMovieSceneSequence* GetSequence() const;
UMovieScene* GetMovieScene() const;
void SetSequence(UMovieSceneSequence* InSequence, FMovieSceneSequenceID InSequenceID);
TSharedPtr<FSequencerEditorViewModel> GetEditor() const;
TSharedPtr<ISequencer> GetSequencer() const;
TSharedPtr<FSequencer> GetSequencerImpl() const;
TSharedPtr<FViewModel> GetBottomSpacer() const { return BottomSpacer; }
/*~ ISignedObjectEventHandler */
void OnPostUndo() override;
void OnModifiedIndirectly(UMovieSceneSignedObject*) override;
void OnModifiedDirectly(UMovieSceneSignedObject*) override;
/*~ ISortableExtension */
void SortChildren() override;
FSortingKey GetSortingKey() const override;
void SetCustomOrder(int32 InCustomOrder) override;
/*~ Begin ISequenceDataEventHandler */
virtual void OnDecorationAdded(UObject* AddedDecoration) override;
virtual void OnDecorationRemoved(UObject* RemovedDecoration) override;
/*~ End ISequenceDataEventHandler */
/*~ IOutlinerDropTargetOutlinerExtension */
TOptional<EItemDropZone> CanAcceptDrop(const FViewModelPtr& TargetModel, const FDragDropEvent& DragDropEvent, EItemDropZone InItemDropZone) override;
void PerformDrop(const FViewModelPtr& TargetModel, const FDragDropEvent& DragDropEvent, EItemDropZone InItemDropZone) override;
static EViewModelListType GetDecorationModelListType();
private:
FViewModelListHead RootOutlinerItems;
FViewModelListHead DecorationModelList;
TWeakObjectPtr<UMovieSceneSequence> WeakSequence;
TWeakPtr<FSequencerEditorViewModel> WeakEditor;
TSharedPtr<FViewModel> BottomSpacer;
FMovieSceneSequenceID SequenceID;
MovieScene::TNonIntrusiveEventHandler<MovieScene::ISignedObjectEventHandler> SequenceEventHandler;
MovieScene::TNonIntrusiveEventHandler<MovieScene::ISignedObjectEventHandler> MovieSceneEventHandler;
MovieScene::TNonIntrusiveEventHandler<MovieScene::ISequenceDataEventHandler> MovieSceneDataEventHandler;
};
} // namespace Sequencer
} // namespace UE