For the complete documentation index, see llms.txt. This page is also available as Markdown.

Add External Property to Details Panel

To add an external property from an object that is not being customised to your Detials Panel use:

IDetailPropertyRow* Row = <IDetailCategoryBuilder variable>.AddExternalObjectProperty({InObject}, PropertyName)

For the property name, you can use:

GET_MEMBER_NAME_CHECKED(<Class>, <Variable Name>)

If the variable is protected or private, use the string property name.

The row that gets generated by the category can have its Display Name edited:

Row.DisplayName(FText::FromString(VariableOverrideName));

To add it to a group rather than a category, generate the category row first, and then hide that row and use the property handle from the row to generate a new property row in the group.

Row->Visibility(EVisibility::Collapsed);
IDetailPropertyRow& NewGroupRow = NewGroup.AddPropertyRow(Row->GetPropertyHandle().ToSharedRef());

The Display Name can be set the same as above with the new group-generated row.

Examples:

TArray<UBoxComponent*> Killboxes = Settings->GetParentWaterfall()->GetAllKillboxes();
for (UBoxComponent* KillBox : Killboxes)
{
	IDetailGroup& NewGroup = Cat_Kill.AddGroup(KillBox->GetFName(), FText::FromString(FName::NameToDisplayString(KillBox->GetName(), false)));

	auto AddExternalPropertyToKillGroup = [&](FName PropertyName, FString VariableOverrideName = "")
	{
		IDetailPropertyRow* Row = Cat_Kill.AddExternalObjectProperty({ KillBox }, PropertyName);
		if (Row)
		{
			Row->Visibility(EVisibility::Collapsed);
			IDetailPropertyRow& NewGroupRow = NewGroup.AddPropertyRow(Row->GetPropertyHandle().ToSharedRef());

			if (!VariableOverrideName.IsEmpty()) NewGroupRow.DisplayName(FText::FromString(VariableOverrideName));
		}
	};

	AddExternalPropertyToKillGroup(USceneComponent::GetRelativeLocationPropertyName(), "Location");
	AddExternalPropertyToKillGroup(USceneComponent::GetRelativeRotationPropertyName(), "Rotation");
	AddExternalPropertyToKillGroup(USceneComponent::GetRelativeScale3DPropertyName(), "Scale");
	AddExternalPropertyToKillGroup("BoxExtent", "Extent");
}

Last updated