Files
UnrealEngineUWP/Engine/Source/Developer/TaskGraph/Private/SProfileVisualizer.cpp
Chris Wood 8a112d6140 PushMenu() now respects QueryPopupMethod(). All menus now support reusing windows.
UE-14641 - Fix PushMenu() to use QueryPopupMethod()

Pretty big refactor
Adds IMenu as way to identify menus. Replaces referring to menus as SWindows.
Lots of uses of PushMenu() fixed up to match new API

#codereview Nick.Atamas

[CL 2579277 by Chris Wood in Main branch]
2015-06-05 20:19:33 -04:00

162 lines
5.0 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "SlateBasics.h"
#include "TaskGraphStyle.h"
#include "SProfileVisualizer.h"
#include "TaskGraphInterfaces.h"
#include "STaskGraph.h"
#include "SGraphBar.h"
#include "SBarVisualizer.h"
#include "SEventsTree.h"
void SProfileVisualizer::Construct( const FArguments& InArgs )
{
ProfileData = InArgs._ProfileData;
ProfilerType = InArgs._ProfilerType;
HeaderMessageText = InArgs._HeaderMessageText;
HeaderMessageTextColor = InArgs._HeaderMessageTextColor;
const FSlateBrush* ContentAreaBrush = FTaskGraphStyle::Get()->GetBrush("TaskGraph.ContentAreaBrush");
ChildSlot
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SBorder)
.Visibility(EVisibility::Visible)
.BorderImage(ContentAreaBrush)
[
SNew(STextBlock)
.Visibility( HeaderMessageText.IsEmpty() ? EVisibility::Collapsed : EVisibility::Visible )
.Text(HeaderMessageText)
.ColorAndOpacity(HeaderMessageTextColor)
.AutoWrapText(true)
]
]
+ SVerticalBox::Slot()
[
SAssignNew( MainSplitter, SSplitter )
.Orientation( Orient_Vertical )
+ SSplitter::Slot()
.Value(1.0f)
[
SNew( SBorder )
.Visibility( EVisibility::Visible )
.BorderImage( ContentAreaBrush )
[
SAssignNew( BarVisualizer, SBarVisualizer )
.ProfileData( ProfileData )
.OnBarGraphSelectionChanged( this, &SProfileVisualizer::RouteBarGraphSelectionChanged )
.OnBarGraphExpansionChanged( this, &SProfileVisualizer::RouteBarGraphExpansionChanged )
.OnBarEventSelectionChanged( this, &SProfileVisualizer::RouteBarEventSelectionChanged )
.OnBarGraphContextMenu( this, &SProfileVisualizer::OnBarGraphContextMenu )
]
]
+ SSplitter::Slot()
.Value(1.0f)
[
SNew( SBorder )
.Visibility( EVisibility::Visible )
.BorderImage( ContentAreaBrush )
[
SAssignNew( EventsTree, SEventsTree )
.ProfileData( ProfileData )
.OnEventSelectionChanged( this, &SProfileVisualizer::RouteEventSelectionChanged )
]
]
]
];
// Attempt to choose initial data set to display in the tree view
EventsTree->HandleBarGraphExpansionChanged( ProfileData );
}
TSharedRef< SWidget > SProfileVisualizer::MakeMainMenu()
{
FMenuBarBuilder MenuBuilder( NULL );
{
// File
MenuBuilder.AddPullDownMenu(
NSLOCTEXT("TaskGraph", "FileMenu", "File"),
NSLOCTEXT("TaskGraph", "FileMenu_ToolTip", "Open the file menu"),
FNewMenuDelegate::CreateSP( this, &SProfileVisualizer::FillFileMenu ) );
// Apps
MenuBuilder.AddPullDownMenu(
NSLOCTEXT("TaskGraph", "AppMenu", "Window"),
NSLOCTEXT("TaskGraph", "AppMenu_ToolTip", "Open the summoning menu"),
FNewMenuDelegate::CreateSP( this, &SProfileVisualizer::FillAppMenu ) );
// Help
MenuBuilder.AddPullDownMenu(
NSLOCTEXT("TaskGraph", "HelpMenu", "Help"),
NSLOCTEXT("TaskGraph", "HelpMenu_ToolTip", "Open the help menu"),
FNewMenuDelegate::CreateSP( this, &SProfileVisualizer::FillHelpMenu ) );
}
// Create the menu bar
TSharedRef< SWidget > MenuBarWidget = MenuBuilder.MakeWidget();
return MenuBarWidget;
}
void SProfileVisualizer::FillFileMenu( FMenuBuilder& MenuBuilder )
{
}
void SProfileVisualizer::FillAppMenu( FMenuBuilder& MenuBuilder )
{
}
void SProfileVisualizer::FillHelpMenu( FMenuBuilder& MenuBuilder )
{
}
void SProfileVisualizer::RouteEventSelectionChanged( TSharedPtr< FVisualizerEvent > Selection )
{
BarVisualizer->HandleEventSelectionChanged( Selection );
}
void SProfileVisualizer::RouteBarGraphSelectionChanged( TSharedPtr< FVisualizerEvent > Selection )
{
EventsTree->HandleBarGraphSelectionChanged( Selection );
}
void SProfileVisualizer::RouteBarGraphExpansionChanged( TSharedPtr< FVisualizerEvent > Selection )
{
EventsTree->HandleBarGraphExpansionChanged( Selection );
}
void SProfileVisualizer::RouteBarEventSelectionChanged( int32 Thread, TSharedPtr<FVisualizerEvent> Selection )
{
EventsTree->HandleBarEventSelectionChanged( Thread, Selection );
}
void SProfileVisualizer::OnBarGraphContextMenu( TSharedPtr< FVisualizerEvent > Selection, const FPointerEvent& InputEvent )
{
SelectedBarGraph = Selection;
FWidgetPath WidgetPath = InputEvent.GetEventPath() != nullptr ? *InputEvent.GetEventPath() : FWidgetPath();
FSlateApplication::Get().PushMenu(SharedThis(this), WidgetPath, MakeBarVisualizerContextMenu(), FSlateApplication::Get().GetCursorPos(), FPopupTransitionEffect::ContextMenu);
}
TSharedRef<SWidget> SProfileVisualizer::MakeBarVisualizerContextMenu()
{
const bool bCloseAfterSelection = true;
FMenuBuilder MenuBuilder( bCloseAfterSelection, NULL );
{
FUIAction Action( FExecuteAction::CreateSP( this, &SProfileVisualizer::ShowGraphBarInEventsWindow, (int32)INDEX_NONE ) );
MenuBuilder.AddMenuEntry( NSLOCTEXT("TaskGraph", "GraphBarShowInNew", "Show in New Events Window"), FText::GetEmpty(), FSlateIcon(), Action, NAME_None, EUserInterfaceActionType::Button );
}
return MenuBuilder.MakeWidget();
}
void SProfileVisualizer::ShowGraphBarInEventsWindow( int32 WindowIndex )
{
EventsTree->HandleBarGraphExpansionChanged( SelectedBarGraph );
}