Files
UnrealEngineUWP/Engine/Source/Editor/DataLayerEditor/Private/DataLayer/DataLayerTreeItem.cpp
richard malo 6583fa5db3 Allow editing data layers of level instance when editing the level instance
- When editing level instance, only show loaded/unloaded actors of this level
- When editing level instance, don't prefix actor label with parent level instance(s)
- Replaced import data layer menu option by drag and dropping level instance data layers into main world AWorldDataLayers
- Removed menu option "Create Data Layer under <other> DataLayer" as it will never be allowed for DataLayerInstanceWithAsset since created without any valid DataLayerAsset.
- Disabled changing visibility and editor loading of DataLayerInstances of editing level instance
- Allow editing data layer of level instance when editing the level instance even when main world is not partitioned
- Changed font from bold to bold+italic on DataLayerInstances containing actors part of editor selection
- Removed suffix "- WorldDataLayers" on parent node of DataLayerInstances in the DataLayer Outliner
- Colorize and append "(Current)" to WorldDataLayer of editing Level Instance in the DataLayer Outliner
- Support Make Current on Level instance DataLayerInstances when editing level instance
#rb patrick.enfedaque
#jira UE-178410
#jira UE-177386
#preflight 63f8f0f19009dd70d7b87224

[CL 24441128 by richard malo in ue5-main branch]
2023-02-28 08:35:38 -05:00

81 lines
2.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "DataLayerTreeItem.h"
#include "DataLayer/DataLayerEditorSubsystem.h"
#include "ISceneOutlinerTreeItem.h"
#include "Internationalization/Internationalization.h"
#include "Internationalization/Text.h"
#include "SDataLayerTreeLabel.h"
#include "SceneOutlinerStandaloneTypes.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Widgets/Views/SListView.h"
class ISceneOutliner;
class SWidget;
template <typename ItemType> class STableRow;
#define LOCTEXT_NAMESPACE "DataLayer"
const FSceneOutlinerTreeItemType FDataLayerTreeItem::Type(&ISceneOutlinerTreeItem::Type);
FDataLayerTreeItem::FDataLayerTreeItem(UDataLayerInstance* InDataLayerInstance)
: ISceneOutlinerTreeItem(Type)
, DataLayerInstance(InDataLayerInstance)
, ID(InDataLayerInstance)
, bIsHighlighedtIfSelected(false)
{
Flags.bIsExpanded = false;
}
FString FDataLayerTreeItem::GetDisplayString() const
{
const UDataLayerInstance* DataLayerInstancePtr = DataLayerInstance.Get();
return DataLayerInstancePtr ? DataLayerInstancePtr->GetDataLayerShortName() : LOCTEXT("DataLayerForMissingDataLayer", "(Deleted Data Layer)").ToString();
}
bool FDataLayerTreeItem::GetVisibility() const
{
const UDataLayerInstance* DataLayerInstancePtr = DataLayerInstance.Get();
return DataLayerInstancePtr && DataLayerInstancePtr->IsVisible();
}
bool FDataLayerTreeItem::ShouldShowVisibilityState() const
{
const UDataLayerInstance* DataLayerInstancePtr = DataLayerInstance.Get();
const AWorldDataLayers* OuterWorldDataLayers = DataLayerInstancePtr ? DataLayerInstancePtr->GetOuterWorldDataLayers() : nullptr;
const bool bIsSubWorldDataLayers = OuterWorldDataLayers && OuterWorldDataLayers->IsSubWorldDataLayers();
return DataLayerInstancePtr && !DataLayerInstancePtr->IsReadOnly() && !bIsSubWorldDataLayers;
}
bool FDataLayerTreeItem::CanInteract() const
{
return true;
}
TSharedRef<SWidget> FDataLayerTreeItem::GenerateLabelWidget(ISceneOutliner& Outliner, const STableRow<FSceneOutlinerTreeItemPtr>& InRow)
{
return SNew(SDataLayerTreeLabel, *this, Outliner, InRow);
}
void FDataLayerTreeItem::OnVisibilityChanged(const bool bNewVisibility)
{
if (UDataLayerInstance* DataLayerInstancePtr = DataLayerInstance.Get())
{
UDataLayerEditorSubsystem::Get()->SetDataLayerVisibility(DataLayerInstancePtr, bNewVisibility);
}
}
bool FDataLayerTreeItem::ShouldBeHighlighted() const
{
if (bIsHighlighedtIfSelected)
{
if (UDataLayerInstance* DataLayerInstancePtr = DataLayerInstance.Get())
{
return UDataLayerEditorSubsystem::Get()->DoesDataLayerContainSelectedActors(DataLayerInstancePtr);
}
}
return false;
}
#undef LOCTEXT_NAMESPACE