Files
UnrealEngine/Engine/Source/Editor/KismetWidgets/Private/SScrubControlPanel.cpp
2025-05-18 13:04:45 +08:00

134 lines
4.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "SScrubControlPanel.h"
#include "EditorWidgetsModule.h"
#include "HAL/PlatformMath.h"
#include "ITransportControl.h"
#include "Layout/Children.h"
#include "Layout/Clipping.h"
#include "Layout/Margin.h"
#include "Math/Vector2D.h"
#include "Modules/ModuleManager.h"
#include "SlotBase.h"
#include "Styling/AppStyle.h"
#include "Types/SlateEnums.h"
#include "Widgets/Layout/SBorder.h"
#include "Widgets/Layout/SSpacer.h"
#include "Widgets/SBoxPanel.h"
#define LOCTEXT_NAMESPACE "SScrubControlPanel"
void SScrubControlPanel::Construct( const SScrubControlPanel::FArguments& InArgs )
{
ScrubWidget = NULL;
IsRealtimeStreamingMode = InArgs._IsRealtimeStreamingMode;
FEditorWidgetsModule& EditorWidgetsModule = FModuleManager::Get().LoadModuleChecked<FEditorWidgetsModule>( "EditorWidgets" );
FTransportControlArgs TransportControlArgs;
TransportControlArgs.OnForwardPlay = InArgs._OnClickedForwardPlay;
TransportControlArgs.OnRecord = InArgs._OnClickedRecord;
TransportControlArgs.OnBackwardPlay = InArgs._OnClickedBackwardPlay;
TransportControlArgs.OnForwardStep = InArgs._OnClickedForwardStep;
TransportControlArgs.OnBackwardStep = InArgs._OnClickedBackwardStep;
TransportControlArgs.OnForwardEnd = InArgs._OnClickedForwardEnd;
TransportControlArgs.OnBackwardEnd = InArgs._OnClickedBackwardEnd;
TransportControlArgs.OnToggleLooping = InArgs._OnClickedToggleLoop;
TransportControlArgs.OnGetLooping = InArgs._OnGetLooping;
TransportControlArgs.OnGetPlaybackMode = InArgs._OnGetPlaybackMode;
TransportControlArgs.OnGetRecording = InArgs._OnGetRecording;
TransportControlArgs.OnTickPlayback = InArgs._OnTickPlayback;
TransportControlArgs.OnGetRecordButtonVisibility = InArgs._OnGetRecordVisibility;
TransportControlArgs.WidgetsToCreate = InArgs._TransportControlWidgetsToCreate.Get(TArray<FTransportControlWidget>());
FTransportControlArgs TransportControlArgsForRealtimeStreamingMode;
TransportControlArgsForRealtimeStreamingMode.OnForwardPlay = TransportControlArgs.OnForwardPlay;
TransportControlArgsForRealtimeStreamingMode.OnForwardStep = TransportControlArgs.OnForwardStep;
TransportControlArgsForRealtimeStreamingMode.OnGetPlaybackMode = TransportControlArgs.OnGetPlaybackMode;
TransportControlArgsForRealtimeStreamingMode.OnGetRecording = TransportControlArgs.OnGetRecording;
TransportControlArgsForRealtimeStreamingMode.OnRecord = TransportControlArgs.OnRecord;
TransportControlArgsForRealtimeStreamingMode.OnGetRecordButtonVisibility = InArgs._OnGetRecordVisibility;
this->ChildSlot
.Padding( FMargin( 0.0f, 1.0f) )
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.HAlign(HAlign_Fill)
.VAlign(VAlign_Center)
.FillWidth(1)
.Padding( FMargin( 0.0f, 0.0f) )
[
SNew( SBorder )
[
SAssignNew(ScrubWidget, SScrubWidget)
.Clipping(EWidgetClipping::ClipToBounds)
.Value(InArgs._Value)
.NumOfKeys(InArgs._NumOfKeys)
.DisplayDrag(InArgs._DisplayDrag)
.bDisplayAnimScrubBarEditing(InArgs._bDisplayAnimScrubBarEditing)
.SequenceLength(InArgs._SequenceLength)
.OnValueChanged(InArgs._OnValueChanged)
.OnBeginSliderMovement(InArgs._OnBeginSliderMovement)
.OnEndSliderMovement(InArgs._OnEndSliderMovement)
.ViewInputMin(InArgs._ViewInputMin)
.ViewInputMax(InArgs._ViewInputMax)
.OnSetInputViewRange(InArgs._OnSetInputViewRange)
.OnCropAnimSequence(InArgs._OnCropAnimSequence)
.OnAddAnimSequence(InArgs._OnAddAnimSequence)
.OnAppendAnimSequence(InArgs._OnAppendAnimSequence)
.OnReZeroAnimSequence(InArgs._OnReZeroAnimSequence)
.bAllowZoom(InArgs._bAllowZoom)
.DraggableBars(InArgs._DraggableBars)
.OnBarDrag(InArgs._OnBarDrag)
.OnBarCommit(InArgs._OnBarCommit)
]
]
// Padding
+SHorizontalBox::Slot()
.AutoWidth()
[
// Padding to make controls line up with the track label widths.
// note: a more robust way to accomplish this would be nice.
SNew(SSpacer)
.Size(FVector2D(16.0f, 16.0f))
]
+SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SBorder)
.Padding(0.0f)
.BorderImage(FAppStyle::GetBrush("NoBorder"))
.Visibility(this, &SScrubControlPanel::GetRealtimeControlVisibility, false)
[
EditorWidgetsModule.CreateTransportControl(TransportControlArgs)
]
]
+SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SBorder)
.Padding(0.0f)
.BorderImage(FAppStyle::GetBrush("NoBorder"))
.Visibility(this, &SScrubControlPanel::GetRealtimeControlVisibility, true)
[
EditorWidgetsModule.CreateTransportControl(TransportControlArgsForRealtimeStreamingMode)
]
]
];
}
EVisibility SScrubControlPanel::GetRealtimeControlVisibility(bool bIsControlForRealtimeStreamingMode) const
{
return (IsRealtimeStreamingMode.Get() == bIsControlForRealtimeStreamingMode)
? EVisibility::Visible : EVisibility::Collapsed;
}
#undef LOCTEXT_NAMESPACE