// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "VisualLogger/VisualLoggerTypes.h" #include "Input/Reply.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SCompoundWidget.h" #include "Framework/Commands/UICommandList.h" #include "Framework/Docking/TabManager.h" class AVisualLoggerCameraController; class FMenuBuilder; class SVisualLoggerFilters; class SVisualLoggerLogsList; class SVisualLoggerStatusView; class SVisualLoggerView; struct FLogEntryItem; struct FVisualLoggerCanvasRenderer; struct FVisualLoggerDBRow; class SVisualLogger : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SVisualLogger) { } SLATE_END_ARGS() public: /** * Default constructor. */ SVisualLogger(); virtual ~SVisualLogger(); public: /** * Constructs the application. * * @param InArgs The Slate argument list. * @param ConstructUnderMajorTab The major tab which will contain the session front-end. * @param ConstructUnderWindow The window in which this widget is being constructed. */ void Construct(const FArguments& InArgs, const TSharedRef& ConstructUnderMajorTab, const TSharedPtr& ConstructUnderWindow); public: TSharedRef HandleTabManagerSpawnTab(const FSpawnTabArgs& Args, FName TabIdentifier) const; static void FillWindowMenu(FMenuBuilder& MenuBuilder, const TSharedPtr TabManager); /** Callback for for when the owner tab's visual state is being persisted. */ void HandleMajorTabPersistVisualState(); virtual bool SupportsKeyboardFocus() const override { return true; } void OnNewLogEntry(const FVisualLogDevice::FVisualLogEntryItem& Entry); void OnFiltersChanged(); void OnObjectSelectionChanged(const TArray& RowNames); void OnItemsSelectionChanged(const FVisualLoggerDBRow&, int32); void OnNewItemHandler(const FVisualLoggerDBRow& BDRow, int32 ItemIndex); void UpdateVisibilityForEntry(const FVisualLoggerDBRow& BDRow, int32 ItemIndex); void OnScrubPositionChanged(double NewScrubPosition, bool bScrubbing); void OnFiltersSearchChanged(const FText& Filter); void OnLogLineSelectionChanged(TSharedPtr SelectedItem, int64 UserData, FName TagName); FReply OnKeyboardRedirection(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent); bool HandleStartRecordingCommandCanExecute() const; void HandleStartRecordingCommandExecute(); bool HandleStartRecordingCommandIsVisible() const; bool HandleStopRecordingCommandCanExecute() const; void HandleStopRecordingCommandExecute(); bool HandleStopRecordingCommandIsVisible() const; bool HandlePauseCommandCanExecute() const; void HandlePauseCommandExecute(); bool HandlePauseCommandIsVisible() const; bool HandleResumeCommandCanExecute() const; void HandleResumeCommandExecute(); bool HandleResumeCommandIsVisible() const; bool HandleLoadCommandCanExecute() const; void HandleLoadCommandExecute(); void HandleAutoScrollCommandExecute(); bool HandleAutoScrollIsChecked() const; bool HandleSaveCommandCanExecute() const; void HandleSaveCommandExecute(); void HandleSaveAllCommandExecute(); void HandleSaveCommand(bool bSaveAllData); bool HandleRefreshCommandCanExecute() const; void HandleRefreshCommandExecute(); bool HandleCameraCommandCanExecute() const; void HandleCameraCommandExecute(); bool HandleCameraCommandIsChecked() const; TSharedPtr GetVisualLoggerFilters() { return VisualLoggerFilters; } void HandleTabManagerPersistLayout(const TSharedRef& LayoutToSave); void OnNewWorld(UWorld* NewWorld); void OnLevelActorAdded(AActor* Actor); void OnLevelActorDeleted(AActor* Actor); void OnActorMoved(AActor* Actor); void OnSettingsChanged(FName PropertyName); void ResetData(); protected: void CollectFilterVolumes(); void ProcessFilterVolumes(); // Holds the list of UI commands. TSharedRef CommandList; // Holds the tab manager that manages the front-end's tabs. TSharedPtr TabManager; // Visual Logger device to get and collect logs. TSharedPtr InternalDevice; TWeakObjectPtr CameraController; TSharedPtr VisualLoggerCanvasRenderer; mutable TSharedPtr VisualLoggerFilters; mutable TSharedPtr MainView; mutable TSharedPtr LogsList; mutable TSharedPtr StatusView; bool bPausedLogger; TArray OnPauseCacheForEntries; bool bGotHistogramData; // Instructs the visual logger to always scrub to the last item bool bAutoScrollToLastItem; // Guard value that prevents canceling bAutoScrollToLastItem when we're actually auto-scrubbing (instead of manually scrubbing) mutable bool bAutoScrollingToLastItem; #if WITH_EDITOR FDelegateHandle PostWorldInitializationHandle; #endif FDelegateHandle DrawOnCanvasDelegateHandle; TWeakObjectPtr LastUsedWorld; TArray> FilterVolumesInLastUsedWorld; TArray FilterBoxes; };