2014-12-07 19:09:38 -05:00
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
2014-10-14 22:50:06 -04:00
# include "SlateBasics.h"
2015-04-21 13:41:54 -04:00
# include "TaskGraphStyle.h"
2014-03-14 14:13:41 -04:00
# 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 ;
2015-01-14 00:36:58 -05:00
HeaderMessageText = InArgs . _HeaderMessageText ;
HeaderMessageTextColor = InArgs . _HeaderMessageTextColor ;
2014-03-14 14:13:41 -04:00
2015-04-21 09:55:33 -04:00
const FSlateBrush * ContentAreaBrush = FTaskGraphStyle : : Get ( ) - > GetBrush ( " TaskGraph.ContentAreaBrush " ) ;
2014-03-14 14:13:41 -04:00
ChildSlot
[
2015-01-14 00:36:58 -05:00
SNew ( SVerticalBox )
+ SVerticalBox : : Slot ( )
. AutoHeight ( )
2014-03-14 14:13:41 -04:00
[
2015-01-14 00:36:58 -05:00
SNew ( SBorder )
. Visibility ( EVisibility : : Visible )
. BorderImage ( ContentAreaBrush )
2014-03-14 14:13:41 -04:00
[
2015-01-14 00:36:58 -05:00
SNew ( STextBlock )
. Visibility ( HeaderMessageText . IsEmpty ( ) ? EVisibility : : Collapsed : EVisibility : : Visible )
. Text ( HeaderMessageText )
. ColorAndOpacity ( HeaderMessageTextColor )
. AutoWrapText ( true )
2014-03-14 14:13:41 -04:00
]
]
2015-01-14 00:36:58 -05:00
+ SVerticalBox : : Slot ( )
2014-03-14 14:13:41 -04:00
[
2015-01-14 00:36:58 -05:00
SAssignNew ( MainSplitter , SSplitter )
. Orientation ( Orient_Vertical )
+ SSplitter : : Slot ( )
. Value ( 1.0f )
2014-03-14 14:13:41 -04:00
[
2015-01-14 00:36:58 -05:00
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 )
]
2014-03-14 14:13:41 -04:00
]
]
] ;
// 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 ) ;
}
2015-06-05 20:19:33 -04:00
void SProfileVisualizer : : OnBarGraphContextMenu ( TSharedPtr < FVisualizerEvent > Selection , const FPointerEvent & InputEvent )
2014-03-14 14:13:41 -04:00
{
SelectedBarGraph = Selection ;
2015-06-05 20:19:33 -04:00
FWidgetPath WidgetPath = InputEvent . GetEventPath ( ) ! = nullptr ? * InputEvent . GetEventPath ( ) : FWidgetPath ( ) ;
FSlateApplication : : Get ( ) . PushMenu ( SharedThis ( this ) , WidgetPath , MakeBarVisualizerContextMenu ( ) , FSlateApplication : : Get ( ) . GetCursorPos ( ) , FPopupTransitionEffect : : ContextMenu ) ;
2014-03-14 14:13:41 -04:00
}
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 ) ;
}