EM_Task/TraceInsights/Private/Insights/ViewModels/StatsGroupingAndSorting.h
Boshuang Zhao 5144a49c9b add
2026-02-13 16:18:33 +08:00

78 lines
2.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
// Insights
#include "Insights/ViewModels/StatsNode.h"
#include "Insights/Table/ViewModels/TableColumn.h"
#include "Insights/Table/ViewModels/TableCellValueSorter.h"
#include "Insights/Table/ViewModels/TreeNodeGrouping.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// Sorters
////////////////////////////////////////////////////////////////////////////////////////////////////
class FStatsNodeSortingByStatsType: public Insights::FTableCellValueSorter
{
public:
FStatsNodeSortingByStatsType(TSharedRef<Insights::FTableColumn> InColumnRef);
virtual void Sort(TArray<Insights::FBaseTreeNodePtr>& NodesToSort, Insights::ESortMode SortMode) const override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
class FStatsNodeSortingByDataType: public Insights::FTableCellValueSorter
{
public:
FStatsNodeSortingByDataType(TSharedRef<Insights::FTableColumn> InColumnRef);
virtual void Sort(TArray<Insights::FBaseTreeNodePtr>& NodesToSort, Insights::ESortMode SortMode) const override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
class FStatsNodeSortingByCount: public Insights::FTableCellValueSorter
{
public:
FStatsNodeSortingByCount(TSharedRef<Insights::FTableColumn> InColumnRef);
virtual void Sort(TArray<Insights::FBaseTreeNodePtr>& NodesToSort, Insights::ESortMode SortMode) const override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// Organizers
////////////////////////////////////////////////////////////////////////////////////////////////////
/** Enumerates types of grouping or sorting for the stats nodes. */
enum class EStatsGroupingMode
{
/** Creates a single group for all timers. */
Flat,
/** Creates one group for one letter. */
ByName,
/** Creates groups based on stats metadata group names. */
ByMetaGroupName,
/** Creates one group for each node type. */
ByType,
/** Creates one group for each data type. */
ByDataType,
/** Creates one group for each logarithmic range ie. 0, [1 .. 10), [10 .. 100), [100 .. 1K), etc. */
ByCount,
/** Invalid enum type, may be used as a number of enumerations. */
InvalidOrMax,
};
/** Type definition for shared pointers to instances of EStatsGroupingMode. */
typedef TSharedPtr<EStatsGroupingMode> EStatsGroupingModePtr;
////////////////////////////////////////////////////////////////////////////////////////////////////