// Copyright Epic Games, Inc. All Rights Reserved. #include "SStatsTableCell.h" #include "EditorStyleSet.h" #include "SlateOptMacros.h" #include "Widgets/Images/SImage.h" #include "Widgets/Input/SButton.h" #include "Widgets/Layout/SBox.h" #include "Widgets/SBoxPanel.h" #include "Widgets/SToolTip.h" #include "Widgets/Text/STextBlock.h" #include "Widgets/Views/SExpanderArrow.h" // Insights #include "Insights/InsightsStyle.h" #include "Insights/Table/ViewModels/Table.h" #include "Insights/Table/ViewModels/TableColumn.h" #include "Insights/Widgets/SStatsTableRow.h" #define LOCTEXT_NAMESPACE "SStatsView" //////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void SStatsTableCell::Construct(const FArguments& InArgs, const TSharedRef& TableRow) { TablePtr = InArgs._TablePtr; ColumnPtr = InArgs._ColumnPtr; StatsNodePtr = InArgs._StatsNodePtr; ensure(TablePtr.IsValid()); ensure(ColumnPtr.IsValid()); ensure(StatsNodePtr.IsValid()); SetHoveredCellDelegate = InArgs._OnSetHoveredCell; ChildSlot [GenerateWidgetForColumn(InArgs, TableRow)]; } //////////////////////////////////////////////////////////////////////////////////////////////////// TSharedRef SStatsTableCell::GenerateWidgetForColumn(const FArguments& InArgs, const TSharedRef& TableRow) { if (InArgs._IsNameColumn) { return GenerateWidgetForNameColumn(InArgs, TableRow); } else { return GenerateWidgetForStatsColumn(InArgs, TableRow); } } //////////////////////////////////////////////////////////////////////////////////////////////////// TSharedRef SStatsTableCell::GenerateWidgetForNameColumn(const FArguments& InArgs, const TSharedRef& TableRow) { return SNew(SHorizontalBox) + SHorizontalBox::Slot() .AutoWidth() .HAlign(HAlign_Right) .VAlign(VAlign_Center) [SNew(SExpanderArrow, TableRow)] // Info icon + tooltip + SHorizontalBox::Slot() .AutoWidth() .HAlign(HAlign_Center) .VAlign(VAlign_Center) [SNew(SImage) .Visibility(this, &SStatsTableCell::GetHintIconVisibility) .Image(FEditorStyle::GetBrush("Profiler.Tooltip.HintIcon10")) .ToolTip(GetRowToolTip(TableRow))] // Color box + SHorizontalBox::Slot() .AutoWidth() .HAlign(HAlign_Center) .VAlign(VAlign_Center) [SNew(SBox) .Visibility(this, &SStatsTableCell::GetBoxVisibility) .WidthOverride(14.0f) .HeightOverride(14.0f) [SNew(SBorder) .BorderImage(FInsightsStyle::Get().GetBrush("WhiteBrush")) .BorderBackgroundColor(this, &SStatsTableCell::GetBoxColorAndOpacity) .HAlign(HAlign_Fill) .VAlign(VAlign_Fill)]] // Name + SHorizontalBox::Slot() .AutoWidth() .VAlign(VAlign_Center) .HAlign(ColumnPtr->GetHorizontalAlignment()) .Padding(FMargin(2.0f, 0.0f)) [SNew(STextBlock) .Text(this, &SStatsTableCell::GetDisplayName) .HighlightText(InArgs._HighlightText) .TextStyle(FEditorStyle::Get(), TEXT("Profiler.Tooltip")) .ColorAndOpacity(this, &SStatsTableCell::GetColorAndOpacity) .ShadowColorAndOpacity(this, &SStatsTableCell::GetShadowColorAndOpacity)]; } //////////////////////////////////////////////////////////////////////////////////////////////////// TSharedPtr SStatsTableCell::GetRowToolTip(const TSharedRef& TableRow) const { TSharedRef Row = StaticCastSharedRef(TableRow); return Row->GetRowToolTip(); } //////////////////////////////////////////////////////////////////////////////////////////////////// FText SStatsTableCell::GetValueAsText() const { return ColumnPtr->GetValueAsText(*StatsNodePtr); } //////////////////////////////////////////////////////////////////////////////////////////////////// TSharedRef SStatsTableCell::GenerateWidgetForStatsColumn(const FArguments& InArgs, const TSharedRef& TableRow) { return SNew(SHorizontalBox) // Value + SHorizontalBox::Slot() .FillWidth(1.0f) .VAlign(VAlign_Center) .HAlign(ColumnPtr->GetHorizontalAlignment()) .Padding(FMargin(2.0f, 0.0f)) [SNew(STextBlock) .Text(this, &SStatsTableCell::GetValueAsText) .TextStyle(FEditorStyle::Get(), TEXT("Profiler.Tooltip")) .ColorAndOpacity(this, &SStatsTableCell::GetStatsColorAndOpacity) .ShadowColorAndOpacity(this, &SStatsTableCell::GetShadowColorAndOpacity)]; } END_SLATE_FUNCTION_BUILD_OPTIMIZATION //////////////////////////////////////////////////////////////////////////////////////////////////// #undef LOCTEXT_NAMESPACE