// Copyright Epic Games, Inc. All Rights Reserved. #include "SceneOutlinerTextInfoColumn.h" #include "ISceneOutliner.h" #include "SceneOutlinerPublicTypes.h" #include "SortHelper.h" #include "Widgets/Text/STextBlock.h" #include "Widgets/Views/SHeaderRow.h" #define LOCTEXT_NAMESPACE "SceneOutlinerTextInfoColumn" TSharedRef FTextInfoColumn::CreateTextInfoColumn(ISceneOutliner& Outliner, const FName InColumnName, const FGetTextForItem InGetTextForItem, const FText InColumnToolTip) { return TSharedRef(MakeShareable(new FTextInfoColumn(Outliner, InColumnName, InGetTextForItem, InColumnToolTip))); } FTextInfoColumn::FTextInfoColumn(ISceneOutliner& Outliner, const FName InColumnName, const FGetTextForItem& InGetTextForItem, const FText InColumnToolTip): ColumnName(InColumnName), ColumnToolTip(InColumnToolTip), SceneOutlinerWeak(StaticCastSharedRef(Outliner.AsShared())), GetTextForItem(InGetTextForItem) { } FName FTextInfoColumn::GetColumnID() { return ColumnName; } SHeaderRow::FColumn::FArguments FTextInfoColumn::ConstructHeaderRowColumn() { return SHeaderRow::Column(ColumnName) .DefaultTooltip(!ColumnToolTip.IsEmptyOrWhitespace() ? ColumnToolTip : TAttribute()) .FillWidth(2) .HeaderComboVisibility(EHeaderComboVisibility::OnHover); } const TSharedRef< SWidget > FTextInfoColumn::ConstructRowWidget(FSceneOutlinerTreeItemRef TreeItem, const STableRow& Row) { auto SceneOutliner = SceneOutlinerWeak.Pin(); check(SceneOutliner.IsValid()); TSharedRef HorizontalBox = SNew(SHorizontalBox); TSharedRef MainText = SNew(STextBlock) .Text(this, &FTextInfoColumn::GetInfoForItem, TWeakPtr(TreeItem)) .HighlightText(SceneOutliner->GetFilterHighlightText()) .ColorAndOpacity(FSlateColor::UseSubduedForeground()); HorizontalBox->AddSlot() .AutoWidth() .VAlign(VAlign_Center) .Padding(8, 0, 0, 0) [ MainText ]; return HorizontalBox; } void FTextInfoColumn::PopulateSearchStrings(const ISceneOutlinerTreeItem& Item, TArray< FString >& OutSearchStrings) const { FString String = GetTextForItem.Execute(Item); if (String.Len()) { OutSearchStrings.Add(MoveTemp(String)); } } bool FTextInfoColumn::SupportsSorting() const { return true; // Text Columns are always sortable } void FTextInfoColumn::SortItems(TArray& RootItems, const EColumnSortMode::Type SortMode) const { FSceneOutlinerSortHelper() .Primary([this](const ISceneOutlinerTreeItem& Item) { return GetTextForItem.Execute(Item); }, SortMode) .Sort(RootItems); } FText FTextInfoColumn::GetInfoForItem(TWeakPtr TreeItem) const { auto Item = TreeItem.Pin(); return Item.IsValid() ? FText::FromString(GetTextForItem.Execute(*Item)) : FText::GetEmpty(); } #undef LOCTEXT_NAMESPACE