You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rb richard.malo #preflight 62824179c57a894cf66e3541 #rnx [CL 20222410 by JeanFrancois Dube in ue5-main branch]
101 lines
3.9 KiB
C++
101 lines
3.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "SDataLayerOutliner.h"
|
|
#include "Framework/Application/SlateApplication.h"
|
|
#include "Components/HorizontalBox.h"
|
|
#include "Widgets/Input/SButton.h"
|
|
#include "Widgets/Images/SImage.h"
|
|
#include "DataLayer/DataLayerTreeItem.h"
|
|
#include "DataLayer/DataLayerEditorSubsystem.h"
|
|
#include "WorldPartition/DataLayer/DataLayerInstance.h"
|
|
#include "ScopedTransaction.h"
|
|
#include "Algo/Transform.h"
|
|
#include "Editor.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "DataLayer"
|
|
|
|
void SDataLayerOutliner::CustomAddToToolbar(TSharedPtr<SHorizontalBox> Toolbar)
|
|
{
|
|
Toolbar->AddSlot()
|
|
.VAlign(VAlign_Center)
|
|
.AutoWidth()
|
|
.Padding(4.f, 0.f, 0.f, 0.f)
|
|
[
|
|
SNew(SButton)
|
|
.IsEnabled(this, &SDataLayerOutliner::CanAddSelectedActorsToSelectedDataLayersClicked)
|
|
.ButtonStyle(FAppStyle::Get(), "SimpleButton")
|
|
.ToolTipText(LOCTEXT("AddSelectedActorsToSelectedDataLayersTooltip", "Add selected actors to selected Data Layers"))
|
|
.OnClicked(this, &SDataLayerOutliner::OnAddSelectedActorsToSelectedDataLayersClicked)
|
|
[
|
|
SNew(SImage)
|
|
.ColorAndOpacity(FSlateColor::UseForeground())
|
|
.Image(FAppStyle::Get().GetBrush("DataLayerBrowser.AddSelection"))
|
|
]
|
|
];
|
|
|
|
Toolbar->AddSlot()
|
|
.VAlign(VAlign_Center)
|
|
.AutoWidth()
|
|
[
|
|
SNew(SButton)
|
|
.IsEnabled(this, &SDataLayerOutliner::CanRemoveSelectedActorsFromSelectedDataLayersClicked)
|
|
.ButtonStyle(FAppStyle::Get(), "SimpleButton")
|
|
.ToolTipText(LOCTEXT("RemoveSelectedActorsFromSelectedDataLayersTooltip", "Remove selected actors from selected Data Layers"))
|
|
.OnClicked(this, &SDataLayerOutliner::OnRemoveSelectedActorsFromSelectedDataLayersClicked)
|
|
[
|
|
SNew(SImage)
|
|
.ColorAndOpacity(FSlateColor::UseForeground())
|
|
.Image(FAppStyle::Get().GetBrush("DataLayerBrowser.RemoveSelection"))
|
|
]
|
|
];
|
|
}
|
|
|
|
TArray<UDataLayerInstance*> SDataLayerOutliner::GetSelectedDataLayers() const
|
|
{
|
|
FSceneOutlinerItemSelection ItemSelection(GetSelection());
|
|
TArray<FDataLayerTreeItem*> SelectedDataLayerItems;
|
|
ItemSelection.Get<FDataLayerTreeItem>(SelectedDataLayerItems);
|
|
TArray<UDataLayerInstance*> ValidSelectedDataLayers;
|
|
Algo::TransformIf(SelectedDataLayerItems, ValidSelectedDataLayers, [](const auto Item) { return Item && Item->GetDataLayer(); }, [](const auto Item) { return Item->GetDataLayer(); });
|
|
return ValidSelectedDataLayers;
|
|
}
|
|
|
|
bool SDataLayerOutliner::CanAddSelectedActorsToSelectedDataLayersClicked() const
|
|
{
|
|
if (GEditor->GetSelectedActorCount() > 0)
|
|
{
|
|
TArray<UDataLayerInstance*> SelectedDataLayers = GetSelectedDataLayers();
|
|
const bool bSelectedDataLayersContainsLocked = !!SelectedDataLayers.FindByPredicate([](const UDataLayerInstance* DataLayer) { return DataLayer->IsLocked(); });
|
|
return (!SelectedDataLayers.IsEmpty() && !bSelectedDataLayersContainsLocked);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool SDataLayerOutliner::CanRemoveSelectedActorsFromSelectedDataLayersClicked() const
|
|
{
|
|
return CanAddSelectedActorsToSelectedDataLayersClicked();
|
|
}
|
|
|
|
FReply SDataLayerOutliner::OnAddSelectedActorsToSelectedDataLayersClicked()
|
|
{
|
|
if (CanAddSelectedActorsToSelectedDataLayersClicked())
|
|
{
|
|
TArray<UDataLayerInstance*> SelectedDataLayers = GetSelectedDataLayers();
|
|
const FScopedTransaction Transaction(LOCTEXT("AddSelectedActorsToSelectedDataLayers", "Add Selected Actors to Selected Data Layers"));
|
|
UDataLayerEditorSubsystem::Get()->AddSelectedActorsToDataLayers(SelectedDataLayers);
|
|
}
|
|
return FReply::Handled();
|
|
}
|
|
|
|
FReply SDataLayerOutliner::OnRemoveSelectedActorsFromSelectedDataLayersClicked()
|
|
{
|
|
if (CanRemoveSelectedActorsFromSelectedDataLayersClicked())
|
|
{
|
|
TArray<UDataLayerInstance*> SelectedDataLayers = GetSelectedDataLayers();
|
|
const FScopedTransaction Transaction(LOCTEXT("RemoveSelectedActorsFromSelectedDataLayers", "Remove Selected Actors from Selected Data Layers"));
|
|
UDataLayerEditorSubsystem::Get()->RemoveSelectedActorsFromDataLayers(SelectedDataLayers);
|
|
}
|
|
return FReply::Handled();
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE |