Files
UnrealEngineUWP/Engine/Source/Editor/SceneOutliner/Private/LevelTreeItem.cpp
richard malo 481f65fe16 New Actor Folders objects.
- When enabled, folders are actual objects : modifying a folder won't affect actors (more compliant with OFPA).
- Enabled by default for World Partition and Level Instances.
- Can be enabled on regular levels (experimental feature 'Use Actor Folder Objects').
- If Level uses OFPA, ActorFolders will also be saved in their own package (but will use __ExternalObjects__ root folder).
- In a future refactoring, external actors will also be moved in the same root folder.
- Generalized saving object in an external package (different from its outer package)
- World outliner supports old folders and new actor folder objects : Levels using the actor folder objects will show a root Level node (like Level Instances).
#rb patrick.enfedaque, jeanfrancois.dube
#preflight 61d84b356511bc498e5cb858

#ROBOMERGE-AUTHOR: richard.malo
#ROBOMERGE-SOURCE: CL 18543443 in //UE5/Release-5.0/... via CL 18543482
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669)

[CL 18543525 by richard malo in ue5-release-engine-test branch]
2022-01-07 10:01:19 -05:00

106 lines
2.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LevelTreeItem.h"
#include "Engine/Level.h"
#include "LevelUtils.h"
#include "ISceneOutliner.h"
#include "SceneOutlinerPublicTypes.h"
#include "Styling/SlateIconFinder.h"
#include "Widgets/Images/SImage.h"
#define LOCTEXT_NAMESPACE "SceneOutliner_LevelTreeItem"
const FSceneOutlinerTreeItemType FLevelTreeItem::Type(&ISceneOutlinerTreeItem::Type);
struct SLevelTreeLabel : FSceneOutlinerCommonLabelData, public SCompoundWidget
{
SLATE_BEGIN_ARGS(SLevelTreeLabel) {}
SLATE_END_ARGS()
void Construct(const FArguments& InArgs, FLevelTreeItem& LevelItem, ISceneOutliner& SceneOutliner, const STableRow<FSceneOutlinerTreeItemPtr>& InRow)
{
TreeItemPtr = StaticCastSharedRef<FLevelTreeItem>(LevelItem.AsShared());
WeakSceneOutliner = StaticCastSharedRef<ISceneOutliner>(SceneOutliner.AsShared());
ChildSlot
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.VAlign(VAlign_Center)
.Padding(FSceneOutlinerDefaultTreeItemMetrics::IconPadding())
[
SNew(SBox)
.WidthOverride(FSceneOutlinerDefaultTreeItemMetrics::IconSize())
.HeightOverride(FSceneOutlinerDefaultTreeItemMetrics::IconSize())
[
SNew(SImage)
.Image(FSlateIconFinder::FindIconBrushForClass(UWorld::StaticClass()))
.ColorAndOpacity(FSlateColor::UseForeground())
.ToolTipText(LOCTEXT("LevelIcon_Tooltip", "Level"))
]
]
+ SHorizontalBox::Slot()
.FillWidth(1.0f)
.VAlign(VAlign_Center)
.Padding(0.0f, 2.0f)
[
SNew(STextBlock)
.Text(this, &SLevelTreeLabel::GetDisplayText)
.HighlightText(SceneOutliner.GetFilterHighlightText())
.ColorAndOpacity(this, &SLevelTreeLabel::GetForegroundColor)
]
];
}
private:
TWeakPtr<FLevelTreeItem> TreeItemPtr;
FText GetDisplayText() const
{
auto Item = TreeItemPtr.Pin();
return Item.IsValid() ? FText::FromString(Item->GetDisplayString()) : FText();
}
FSlateColor GetForegroundColor() const
{
if (auto BaseColor = FSceneOutlinerCommonLabelData::GetForegroundColor(*TreeItemPtr.Pin()))
{
return BaseColor.GetValue();
}
return FSlateColor::UseForeground();
}
};
FLevelTreeItem::FLevelTreeItem(ULevel* InLevel)
: ISceneOutlinerTreeItem(Type)
, Level(InLevel)
, ID(InLevel)
{
check(InLevel);
}
FString FLevelTreeItem::GetDisplayString() const
{
return IsValid() ? FPackageName::GetShortName(Level->GetOutermost()->GetName()) : TEXT("None");
}
TSharedRef<SWidget> FLevelTreeItem::GenerateLabelWidget(ISceneOutliner& Outliner, const STableRow<FSceneOutlinerTreeItemPtr>& InRow)
{
return SNew(SLevelTreeLabel, *this, Outliner, InRow);
}
bool FLevelTreeItem::CanInteract() const
{
if (!Flags.bInteractive)
{
return false;
}
return Level.IsValid() ? !FLevelUtils::IsLevelLocked(Level.Get()) : true;
}
#undef LOCTEXT_NAMESPACE