UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UE::Editor::DataStorage::IUiProvider Class Referenceabstract

#include <TypedElementDataStorageUiInterface.h>

+ Inheritance diagram for UE::Editor::DataStorage::IUiProvider:

Classes

struct  FPurposeInfo
 

Public Types

enum class  EPurposeType : uint8 { Generic , UniqueByName , UniqueByNameAndColumn }
 
enum class  EMatchApproach : uint8 { LongestMatch , ExactMatch , SingleMatch }
 
using FPurposeID = FMapKey
 
using WidgetCreatedCallback = TFunctionRef< void(const TSharedRef< SWidget > &NewWidget, UE::Editor::DataStorage::RowHandle Row)>
 
using WidgetConstructorCallback = TFunctionRef< bool(TUniquePtr< FTypedElementWidgetConstructor >, TConstArrayView< TWeakObjectPtr< const UScriptStruct > >)>
 
using WidgetPurposeCallback = TFunctionRef< void(FName, EPurposeType, const FText &)>
 
using PropertySorterConstructorCallback = TFunction< TSharedPtr< const FColumnSorterInterface >(TWeakObjectPtr< const UScriptStruct > ColumnType, const FProperty &Property)>
 

Public Member Functions

virtual RowHandle RegisterWidgetPurpose (const FPurposeInfo &InPurposeInfo)=0
 
virtual RowHandle RegisterWidgetPurpose (const FPurposeID &PurposeID, const FPurposeInfo &InPurposeInfo)=0
 
virtual RowHandle FindPurpose (const FPurposeID &PurposeID) const =0
 
virtual void ListWidgetPurposes (const WidgetPurposeCallback &Callback) const =0
 
virtual FPurposeID GetDefaultWidgetPurposeID () const =0
 
virtual FPurposeID GetGeneralWidgetPurposeID () const =0
 
virtual bool RegisterWidgetFactory (RowHandle PurposeRow, const UScriptStruct *Constructor)=0
 
template<typename ConstructorType >
bool RegisterWidgetFactory (RowHandle PurposeRow)
 
virtual bool RegisterWidgetFactory (RowHandle PurposeRow, const UScriptStruct *Constructor, Queries::FConditions Columns)=0
 
template<typename ConstructorType >
bool RegisterWidgetFactory (RowHandle PurposeRow, Queries::FConditions Columns)
 
template<TColumnType ColumnType>
bool RegisterDecoratorWidgetFactory (RowHandle PurposeRow, const UScriptStruct *Constructor)
 
virtual bool RegisterDecoratorWidgetFactory (RowHandle PurposeRow, const UScriptStruct *Constructor, const UScriptStruct *Column)=0
 
virtual void CreateWidgetConstructors (RowHandle PurposeRow, const FMetaDataView &Arguments, const WidgetConstructorCallback &Callback)=0
 
virtual void CreateWidgetConstructors (RowHandle PurposeRow, EMatchApproach MatchApproach, TArray< TWeakObjectPtr< const UScriptStruct > > &Columns, const FMetaDataView &Arguments, const WidgetConstructorCallback &Callback)=0
 
virtual void ConstructWidgets (RowHandle PurposeRow, const FMetaDataView &Arguments, const WidgetCreatedCallback &ConstructionCallback)=0
 
virtual TSharedPtr< SWidgetConstructWidget (RowHandle Row, FTypedElementWidgetConstructor &Constructor, const FMetaDataView &Arguments)=0
 
virtual TSharedPtr< SWidgetConstructInternalWidget (RowHandle Row, FTypedElementWidgetConstructor &Constructor, const FMetaDataView &Arguments)=0
 
virtual TSharedPtr< ITedsWidgetCreateContainerTedsWidget (RowHandle UiRowHandle) const =0
 
virtual TableHandle GetWidgetTable () const =0
 
virtual void GeneratePropertySorters (TArray< TSharedPtr< const FColumnSorterInterface > > &Results, TArrayView< TWeakObjectPtr< const UScriptStruct > > Columns) const =0
 
virtual void RegisterSorterGeneratorForProperty (const FFieldClass *PropertyType, PropertySorterConstructorCallback PropertySorterConstructor)=0
 
template<typename PropertyClassType >
requires (std::is_base_of_v<FProperty, PropertyClassType>)
void RegisterSorterGeneratorForProperty (PropertySorterConstructorCallback PropertySorterConstructor)
 
virtual void UnregisterSorterGeneratorForProperty (const FFieldClass *PropertyType)=0
 
template<typename PropertyClassType >
requires (std::is_base_of_v<FProperty, PropertyClassType>)
void UnregisterSorterGeneratorForProperty ()
 
virtual bool SupportsExtension (FName Extension) const =0
 
virtual void ListExtensions (TFunctionRef< void(FName)> Callback) const =0
 
virtual bool RegisterWidgetFactory (RowHandle PurposeRow, TUniquePtr< FTypedElementWidgetConstructor > &&Constructor)=0
 
virtual bool RegisterWidgetFactory (RowHandle PurposeRow, TUniquePtr< FTypedElementWidgetConstructor > &&Constructor, Queries::FConditions Columns)=0
 
virtual void RegisterWidgetPurpose (FName Purpose, EPurposeType Type, FText Description)=0
 
virtual bool RegisterWidgetFactory (FName Purpose, const UScriptStruct *Constructor)=0
 
template<typename ConstructorType >
bool RegisterWidgetFactory (FName Purpose)
 
virtual bool RegisterWidgetFactory (FName Purpose, const UScriptStruct *Constructor, Queries::FConditions Columns)=0
 
template<typename ConstructorType >
bool RegisterWidgetFactory (FName Purpose, Queries::FConditions Columns)
 
virtual bool RegisterWidgetFactory (FName Purpose, TUniquePtr< FTypedElementWidgetConstructor > &&Constructor)=0
 
virtual bool RegisterWidgetFactory (FName Purpose, TUniquePtr< FTypedElementWidgetConstructor > &&Constructor, Queries::FConditions Columns)=0
 
virtual void CreateWidgetConstructors (FName Purpose, const FMetaDataView &Arguments, const WidgetConstructorCallback &Callback)=0
 
virtual void CreateWidgetConstructors (FName Purpose, EMatchApproach MatchApproach, TArray< TWeakObjectPtr< const UScriptStruct > > &Columns, const FMetaDataView &Arguments, const WidgetConstructorCallback &Callback)=0
 
virtual void ConstructWidgets (FName Purpose, const FMetaDataView &Arguments, const WidgetCreatedCallback &ConstructionCallback)=0
 

Static Public Attributes

static const FName PurposeMappingDomain = "WidgetPurpose"
 

Member Typedef Documentation

◆ FPurposeID

◆ PropertySorterConstructorCallback

◆ WidgetConstructorCallback

◆ WidgetCreatedCallback

◆ WidgetPurposeCallback

Member Enumeration Documentation

◆ EMatchApproach

Enumerator
LongestMatch 

Looks for the longest chain of columns matching widget factories. The matching columns are removed and the process is repeated until there are no more columns or no matches are found.

ExactMatch 

A single widget factory is reduced which matches the requested columns exactly.

SingleMatch 

Each column is matched to widget factory. Only widget factories that use a single column are used.

◆ EPurposeType

Enumerator
Generic 

General purpose name which allows multiple factory registrations.

UniqueByName 

Only one factory can be registered with this purpose. If multiple factories are registered only the last factory will be stored.

UniqueByNameAndColumn 

Only one factory can be registered with this purpose for a specific combination of columns. If multiple factories are registered only the last factory will be stored.

Member Function Documentation

◆ ConstructInternalWidget()

virtual TSharedPtr< SWidget > UE::Editor::DataStorage::IUiProvider::ConstructInternalWidget ( RowHandle  Row,
FTypedElementWidgetConstructor Constructor,
const FMetaDataView Arguments 
)
pure virtual

Creates a single widget using the provided constructor. Alternative to ConstructWidget that doesn't create the ContainerTedsWidget that wraps the actual widget. Only recommended for advanced use cases, in most situations you want to use ConstructWidget NOTE: This will include any decorator widgets that match with the given row

◆ ConstructWidget()

virtual TSharedPtr< SWidget > UE::Editor::DataStorage::IUiProvider::ConstructWidget ( RowHandle  Row,
FTypedElementWidgetConstructor Constructor,
const FMetaDataView Arguments 
)
pure virtual

Creates a single widget using the provided constructor. The provided row will be used to store the widget information on. If columns have already been added to the row, the constructor is free to use that to configure the widget. Arguments are used by the constructor to configure the widget.

◆ ConstructWidgets() [1/2]

virtual void UE::Editor::DataStorage::IUiProvider::ConstructWidgets ( FName  Purpose,
const FMetaDataView Arguments,
const WidgetCreatedCallback ConstructionCallback 
)
pure virtual

◆ ConstructWidgets() [2/2]

virtual void UE::Editor::DataStorage::IUiProvider::ConstructWidgets ( RowHandle  PurposeRow,
const FMetaDataView Arguments,
const WidgetCreatedCallback ConstructionCallback 
)
pure virtual

Creates all the widgets registered under the provided purpose. This may be a large number of widgets for a wide name or exactly one when the exact name of the widget is registered. Arguments can be provided, but widgets are free to ignore them.

If no factories were found for the requested purpose, the purpose's parent chain will be traversed to try and find an ancestor purpose with factories

◆ CreateContainerTedsWidget()

virtual TSharedPtr< ITedsWidget > UE::Editor::DataStorage::IUiProvider::CreateContainerTedsWidget ( RowHandle  UiRowHandle) const
pure virtual

Create the container widget that every TEDS UI widget is stored in

◆ CreateWidgetConstructors() [1/4]

virtual void UE::Editor::DataStorage::IUiProvider::CreateWidgetConstructors ( FName  Purpose,
const FMetaDataView Arguments,
const WidgetConstructorCallback Callback 
)
pure virtual

◆ CreateWidgetConstructors() [2/4]

virtual void UE::Editor::DataStorage::IUiProvider::CreateWidgetConstructors ( FName  Purpose,
EMatchApproach  MatchApproach,
TArray< TWeakObjectPtr< const UScriptStruct > > &  Columns,
const FMetaDataView Arguments,
const WidgetConstructorCallback Callback 
)
pure virtual

◆ CreateWidgetConstructors() [3/4]

virtual void UE::Editor::DataStorage::IUiProvider::CreateWidgetConstructors ( RowHandle  PurposeRow,
const FMetaDataView Arguments,
const WidgetConstructorCallback Callback 
)
pure virtual

Creates widget constructors for the requested purpose. The provided arguments will be used to configure the constructor. Settings made this way will be applied to all widgets created from the constructor, if applicable.

If no factories were found for the requested purpose, the purpose's parent chain will be traversed to try and find an ancestor purpose with factories

◆ CreateWidgetConstructors() [4/4]

virtual void UE::Editor::DataStorage::IUiProvider::CreateWidgetConstructors ( RowHandle  PurposeRow,
EMatchApproach  MatchApproach,
TArray< TWeakObjectPtr< const UScriptStruct > > &  Columns,
const FMetaDataView Arguments,
const WidgetConstructorCallback Callback 
)
pure virtual

Finds matching widget constructors for provided columns, preferring longer matches over shorter matches. The provided list of columns will be updated to contain all columns that couldn't be matched. The provided arguments will be used to configure the constructor. Settings made this way will be applied to all widgets created from the constructor, if applicable.

If there are still columns remaining after matching against the requested purpose, the purpose's parent chain will be traversed to try and match the remaining columns

◆ FindPurpose()

virtual RowHandle UE::Editor::DataStorage::IUiProvider::FindPurpose ( const FPurposeID PurposeID) const
pure virtual

Find the row handle for a purpose by looking it up using the purpose ID

◆ GeneratePropertySorters()

virtual void UE::Editor::DataStorage::IUiProvider::GeneratePropertySorters ( TArray< TSharedPtr< const FColumnSorterInterface > > &  Results,
TArrayView< TWeakObjectPtr< const UScriptStruct > >  Columns 
) const
pure virtual

generation

Widget constructors can provide a custom sorter object that will allows Slate columns to sort by the data that the sorter supports. If none is provided however, TEDS UI will generate one based on the properties in a column that are marked with the meta data "Sortable". Out of the box TEDS UI supports a variety of property types, but additional properties can be registered with the functions below as well. Note that this is mechanic is exclusively for properties that are used in the dynamic generation of sorters. For complex sorting that involves data specific knowledge or combines multiple values it's highly recommended to create a custom sorter and attach it to the appropriate widget constructor. Build sorters for the provided list of columns

◆ GetDefaultWidgetPurposeID()

virtual FPurposeID UE::Editor::DataStorage::IUiProvider::GetDefaultWidgetPurposeID ( ) const
pure virtual

Get the name of the default TEDS UI widget purpose used to register default widgets for different types of data (e.g FText -> STextBlock)

◆ GetGeneralWidgetPurposeID()

virtual FPurposeID UE::Editor::DataStorage::IUiProvider::GetGeneralWidgetPurposeID ( ) const
pure virtual

Get the name of the general TEDS UI purpose used to register general purpose widgets for columns

◆ GetWidgetTable()

virtual TableHandle UE::Editor::DataStorage::IUiProvider::GetWidgetTable ( ) const
pure virtual

Get the table where TEDS UI widgets are stored

◆ ListExtensions()

virtual void UE::Editor::DataStorage::IUiProvider::ListExtensions ( TFunctionRef< void(FName)>  Callback) const
pure virtual

Provides a list of all extensions that are enabled.

◆ ListWidgetPurposes()

virtual void UE::Editor::DataStorage::IUiProvider::ListWidgetPurposes ( const WidgetPurposeCallback Callback) const
pure virtual

Calls the provided callback for all known registered widget purposes.

◆ RegisterDecoratorWidgetFactory() [1/2]

template<TColumnType ColumnType>
bool UE::Editor::DataStorage::IUiProvider::RegisterDecoratorWidgetFactory ( RowHandle  PurposeRow,
const UScriptStruct Constructor 
)

Registers a decorator widget factory against a specific column Decorator widgets are added onto TEDS UI widgets for the specified purpose when the widget row has the column/tag they are registered against.

See also
FTedsDecoratorWidgetConstructor

◆ RegisterDecoratorWidgetFactory() [2/2]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterDecoratorWidgetFactory ( RowHandle  PurposeRow,
const UScriptStruct Constructor,
const UScriptStruct Column 
)
pure virtual

Registers a decorator widget factory against a specific column. Decorator widgets are added onto TEDS UI widgets for the specified purpose when the widget row has the column/tag they are registered against.

See also
FTedsDecoratorWidgetConstructor

◆ RegisterSorterGeneratorForProperty() [1/2]

virtual void UE::Editor::DataStorage::IUiProvider::RegisterSorterGeneratorForProperty ( const FFieldClass PropertyType,
PropertySorterConstructorCallback  PropertySorterConstructor 
)
pure virtual

Register a function to handle converting a property into a sorter.

◆ RegisterSorterGeneratorForProperty() [2/2]

template<typename PropertyClassType >
requires (std::is_base_of_v<FProperty, PropertyClassType>)
void UE::Editor::DataStorage::IUiProvider::RegisterSorterGeneratorForProperty ( PropertySorterConstructorCallback  PropertySorterConstructor)

Register a function to handle converting a property into a sorter.

◆ RegisterWidgetFactory() [1/12]

bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( FName  Purpose)

◆ RegisterWidgetFactory() [2/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( FName  Purpose,
const UScriptStruct Constructor 
)
pure virtual

◆ RegisterWidgetFactory() [3/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( FName  Purpose,
const UScriptStruct Constructor,
Queries::FConditions  Columns 
)
pure virtual

◆ RegisterWidgetFactory() [4/12]

bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( FName  Purpose,
Queries::FConditions  Columns 
)

◆ RegisterWidgetFactory() [5/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( FName  Purpose,
TUniquePtr< FTypedElementWidgetConstructor > &&  Constructor 
)
pure virtual

◆ RegisterWidgetFactory() [6/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( FName  Purpose,
TUniquePtr< FTypedElementWidgetConstructor > &&  Constructor,
Queries::FConditions  Columns 
)
pure virtual

◆ RegisterWidgetFactory() [7/12]

bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( RowHandle  PurposeRow)

Registers a widget factory that will be called when the purpose it's registered under is requested. This version registers a generic type. Construction using these are typically cheaper as they can avoid copying the Constructor and take up less memory. The downside is that they can't store additional configuration options. If the purpose has not been registered the factory will not be recorded and a warning will be printed. If registration is successful true will be returned otherwise false.

◆ RegisterWidgetFactory() [8/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( RowHandle  PurposeRow,
const UScriptStruct Constructor 
)
pure virtual

purposes

Widget constructors are the glue between TEDS data and Slate. They are associated with specific columns and provide ways to generate Slate widgets for those columns. They also facilitate communication back-and-forth between TEDS and Slate. Widget purposes can be used to specify what widget constructor to use when, allowing multiple widget constructors to work on the same columns. Through the meta data object individual widgets can be further specialized on an individual baseis. Registers a widget factory that will be called when the purpose it's registered under is requested. This version registers a generic type. Construction using these are typically cheaper as they can avoid copying the Constructor and take up less memory. The downside is that they can't store additional configuration options. If the purpose has not been registered the factory will not be recorded and a warning will be printed. If registration is successful true will be returned otherwise false.

◆ RegisterWidgetFactory() [9/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( RowHandle  PurposeRow,
const UScriptStruct Constructor,
Queries::FConditions  Columns 
)
pure virtual

Registers a widget factory that will be called when the purpose it's registered under is requested. This version registers a generic type. Construction using these are typically cheaper as they can avoid copying the Constructor and take up less memory. The downside is that they can't store additional configuration options. If the purpose has not been registered the factory will not be recorded and a warning will be printed. The provided columns will be used when matching the factory during widget construction. If registration is successful true will be returned otherwise false.

◆ RegisterWidgetFactory() [10/12]

bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( RowHandle  PurposeRow,
Queries::FConditions  Columns 
)

Registers a widget factory that will be called when the purpose it's registered under is requested. This version registers a generic type. Construction using these are typically cheaper as they can avoid copying the Constructor and take up less memory. The downside is that they can't store additional configuration options. If the purpose has not been registered the factory will not be recorded and a warning will be printed. The provided columns will be used when matching the factory during widget construction. If registration is successful true will be returned otherwise false.

◆ RegisterWidgetFactory() [11/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( RowHandle  PurposeRow,
TUniquePtr< FTypedElementWidgetConstructor > &&  Constructor 
)
pure virtual

Deprecated

Please replace use of the functions below with the recommended replacements.

◆ RegisterWidgetFactory() [12/12]

virtual bool UE::Editor::DataStorage::IUiProvider::RegisterWidgetFactory ( RowHandle  PurposeRow,
TUniquePtr< FTypedElementWidgetConstructor > &&  Constructor,
Queries::FConditions  Columns 
)
pure virtual

◆ RegisterWidgetPurpose() [1/3]

virtual RowHandle UE::Editor::DataStorage::IUiProvider::RegisterWidgetPurpose ( const FPurposeID PurposeID,
const FPurposeInfo InPurposeInfo 
)
pure virtual

Overload for RegisterWidgetPurpose that allows you to use a custom ID to map to the TEDS Mapping table for lookup

Parameters
PurposeIDA unique ID for the purpose that can be used to look up the row handle later
InPurposeInfoStruct with init params for the purpose

◆ RegisterWidgetPurpose() [2/3]

virtual RowHandle UE::Editor::DataStorage::IUiProvider::RegisterWidgetPurpose ( const FPurposeInfo InPurposeInfo)
pure virtual

purposes

Widget purposes indicates how widgets can be used and categorizes/organizes the available widget factories. Purposes as used to match columns to widget constructors and provide contextual information on how the widgets get setup. In practice this allows tools to provide what purposes they support and TEDS UI will find the closest matching widget constructors that are compatible with the purpose. Register a widget purpose. Widget purposes indicates how widgets can be used and categorizes/organizes the available widget factories. If the same purpose is registered multiple times, only the first will be recorded and later registrations will be ignored and the return value will be InvalidRowHandle. The purposes will be mapped to the TEDS Mapping Table using InPurposeInfo.GeneratePurposeID() which can be used to lookup the purpose row.

Parameters
InPurposeInfoStruct with init params for the purpose

◆ RegisterWidgetPurpose() [3/3]

virtual void UE::Editor::DataStorage::IUiProvider::RegisterWidgetPurpose ( FName  Purpose,
EPurposeType  Type,
FText  Description 
)
pure virtual

◆ SupportsExtension()

virtual bool UE::Editor::DataStorage::IUiProvider::SupportsExtension ( FName  Extension) const
pure virtual

functions

Check if a custom extension is supported. This can be used to check for in-development features, custom extensions, etc.

◆ UnregisterSorterGeneratorForProperty() [1/2]

template<typename PropertyClassType >
requires (std::is_base_of_v<FProperty, PropertyClassType>)
void UE::Editor::DataStorage::IUiProvider::UnregisterSorterGeneratorForProperty ( )

Unregister a function to handle converting a property into a sorter.

◆ UnregisterSorterGeneratorForProperty() [2/2]

virtual void UE::Editor::DataStorage::IUiProvider::UnregisterSorterGeneratorForProperty ( const FFieldClass PropertyType)
pure virtual

Unregister a function to handle converting a property into a sorter.

Member Data Documentation

◆ PurposeMappingDomain

const FName UE::Editor::DataStorage::IUiProvider::PurposeMappingDomain = "WidgetPurpose"
inlinestatic

The documentation for this class was generated from the following file: