Files
UnrealEngine/Engine/Source/Editor/Layers/Private/ActorLayerViewModel.cpp
2025-05-18 13:04:45 +08:00

97 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ActorLayerViewModel.h"
#include "Editor/EditorEngine.h"
#include "Layers/Layer.h"
#define LOCTEXT_NAMESPACE "Layer"
FActorLayerViewModel::FActorLayerViewModel( const TWeakObjectPtr< ULayer >& InLayer, const TArray< TWeakObjectPtr< AActor > >& InActors, const TWeakObjectPtr< UEditorEngine >& InEditor )
: Editor( InEditor )
, Layer( InLayer )
{
Actors.Append( InActors );
}
void FActorLayerViewModel::Initialize()
{
if ( Editor.IsValid() )
{
ULayersSubsystem* WorldLayers = Editor->GetEditorSubsystem<ULayersSubsystem>();
WorldLayers->OnLayersChanged().AddSP(this, &FActorLayerViewModel::OnLayersChanged);
Editor->RegisterForUndo(this);
}
}
FActorLayerViewModel::~FActorLayerViewModel()
{
if ( Editor.IsValid() )
{
ULayersSubsystem* WorldLayers = Editor->GetEditorSubsystem<ULayersSubsystem>();
WorldLayers->OnLayersChanged().RemoveAll(this);
Editor->UnregisterForUndo(this);
}
}
FName FActorLayerViewModel::GetFName() const
{
if( !Layer.IsValid() )
{
return NAME_None;
}
return Layer->GetLayerName();
}
FText FActorLayerViewModel::GetName() const
{
if( !Layer.IsValid() )
{
return FText::GetEmpty();
}
return FText::FromName(Layer->GetLayerName());
}
bool FActorLayerViewModel::IsVisible() const
{
if( !Layer.IsValid() )
{
return false;
}
return Layer->IsVisible();
}
void FActorLayerViewModel::OnLayersChanged( const ELayersAction::Type Action, const TWeakObjectPtr< ULayer >& ChangedLayer, const FName& ChangedProperty )
{
if( Action != ELayersAction::Modify && Action != ELayersAction::Reset )
{
return;
}
if( ChangedLayer.IsValid() && ChangedLayer != Layer )
{
return;
}
Changed.Broadcast();
}
void FActorLayerViewModel::Refresh()
{
OnLayersChanged( ELayersAction::Reset, NULL, NAME_None );
}
#undef LOCTEXT_NAMESPACE