Files
2025-05-18 13:04:45 +08:00

90 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "MVVM/Extensions/IDraggableTrackAreaExtension.h"
#include "MVVM/Extensions/ILayerBarExtension.h"
#include "MVVM/Extensions/ISelectableExtension.h"
#include "MVVM/Extensions/ISnappableExtension.h"
#include "MVVM/Extensions/IStretchableExtension.h"
#include "MVVM/Extensions/ITrackLaneExtension.h"
#include "MVVM/Extensions/LinkedOutlinerExtension.h"
#include "MVVM/Extensions/ViewModelExtensionCollection.h"
#include "MVVM/ICastable.h"
#include "MVVM/ViewModels/ViewModel.h"
#include "Math/Range.h"
#include "Templates/SharedPointer.h"
namespace UE::Sequencer { class ILayerBarExtension; }
namespace UE::Sequencer { template <typename T> struct TAutoRegisterViewModelTypeID; }
struct FFrameNumber;
namespace UE
{
namespace Sequencer
{
class FSequenceModel;
class SEQUENCER_API FLayerBarModel
: public FViewModel
, public FLinkedOutlinerExtension
, public ITrackLaneExtension
, public ISelectableExtension
, public ISnappableExtension
, public IDraggableTrackAreaExtension
, public IStretchableExtension
, protected TViewModelExtensionCollection<ILayerBarExtension>
{
public:
UE_SEQUENCER_DECLARE_CASTABLE(FLayerBarModel, FViewModel
, FLinkedOutlinerExtension
, ITrackLaneExtension
, ISelectableExtension
, ISnappableExtension
, IDraggableTrackAreaExtension
, IStretchableExtension
);
FLayerBarModel(TWeakPtr<FViewModel> LayerRoot);
~FLayerBarModel();
/*~ ITrackLaneExtension Interface */
TSharedPtr<ITrackLaneWidget> CreateTrackLaneView(const FCreateTrackLaneViewParams& InParams) override;
FTrackLaneVirtualAlignment ArrangeVirtualTrackLaneView() const override;
/*~ ISelectableExtension Interface */
ESelectionIntent IsSelectable() const override;
/*~ ISnappableExtension Interface */
void AddToSnapField(const ISnapCandidate& Candidate, ISnapField& SnapField) const override;
/*~ IDraggableTrackAreaExtension Interface */
bool CanDrag() const override;
void OnBeginDrag(IDragOperation& DragOperation) override;
void OnEndDrag(IDragOperation& DragOperation) override;
/*~ IStretchableExtension Interface */
void OnInitiateStretch(IStretchOperation& StretchOperation, EStretchConstraint Constraint, FStretchParameters* InOutGlobalParameters) override;
public:
TRange<FFrameNumber> ComputeRange() const;
void Offset(FFrameNumber Offset);
private:
/*~ FViewModel interface */
void OnConstruct() override;
void OnDestruct() override;
/*~ TViewModelExtensionCollection Interface */
void OnExtensionsDirtied() override;
};
} // namespace Sequencer
} // namespace UE