// Copyright Epic Games, Inc. All Rights Reserved. #include "MVVM/ViewModels/TimeWarpChannelModel.h" #include "MVVM/ViewModels/SectionModel.h" #include "MVVM/ViewModels/OutlinerColumns/OutlinerColumnTypes.h" #include "MVVM/Extensions/ITrackExtension.h" #include "MVVM/Views/ViewUtilities.h" #include "SequencerUtilities.h" #include "Framework/MultiBox/MultiBoxBuilder.h" #define LOCTEXT_NAMESPACE "TimeWarpChannelModel" namespace UE::Sequencer { FTimeWarpChannelModel::FTimeWarpChannelModel(FName InChannelName, TWeakPtr InSection, FMovieSceneChannelHandle InChannel) : FChannelModel(InChannelName, InSection, InChannel) {} TSharedPtr FTimeWarpChannelModel::CreateOutlinerViewForColumn(const FCreateOutlinerViewParams& InParams, const FName& InColumnName) { TViewModelPtr OutlinerItem = GetLinkedOutlinerItem(); if (InColumnName == FCommonOutlinerNames::Add) { return MakeButton( LOCTEXT("ChangeTimeWarpToolTip", "Change Time Warp to utilize a different curve type"), FAppStyle::GetBrush("Sequencer.Outliner.Indicators.TimeWarp"), FOnGetContent::CreateSP(this, &FTimeWarpChannelModel::BuildReplaceTimeWarpSubMenu), OutlinerItem.AsModel()); } return nullptr; } void FTimeWarpChannelModel::BuildContextMenu(FMenuBuilder& MenuBuilder, TViewModelPtr GroupOwner) { TViewModelPtr Track = GetLinkedOutlinerItem().AsModel()->FindAncestorOfType(); if (Track) { MenuBuilder.AddSubMenu( LOCTEXT("ReplaceTimeWarp", "Replace With"), FText(), FNewMenuDelegate::CreateSP(this, &FTimeWarpChannelModel::PopulateReplaceTimeWarpSubMenu) ); } } TSharedRef FTimeWarpChannelModel::BuildReplaceTimeWarpSubMenu() { FMenuBuilder MenuBuilder(true, nullptr); PopulateReplaceTimeWarpSubMenu(MenuBuilder); return MenuBuilder.MakeWidget(); } void FTimeWarpChannelModel::PopulateReplaceTimeWarpSubMenu(FMenuBuilder& MenuBuilder) { TViewModelPtr Track = GetLinkedOutlinerItem().AsModel()->FindAncestorOfType(); if (Track) { FSequencerUtilities::PopulateTimeWarpChannelSubMenu(MenuBuilder, Track); } } } // namespace UE::Sequencer #undef LOCTEXT_NAMESPACE