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

89 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/WeakObjectPtr.h"
#include "EditorUndoClient.h"
#include "Layers/LayersSubsystem.h"
class AActor;
class UEditorEngine;
class ULayer;
/**
* The non-UI solution specific presentation logic for a single Layer
*/
class FActorLayerViewModel : public TSharedFromThis< FActorLayerViewModel >, public FEditorUndoClient
{
public:
/** FActorLayerViewModel destructor */
virtual ~FActorLayerViewModel();
/**
* Factory method which creates a new FActorLayerViewModel object
*
* @param InLayer The layer wrap
* @param InEditor The UEditorEngine to use
*/
static TSharedRef< FActorLayerViewModel > Create( const TWeakObjectPtr< ULayer >& InLayer, const TArray< TWeakObjectPtr< AActor > >& InActors, const TWeakObjectPtr< UEditorEngine >& InEditor )
{
const TSharedRef< FActorLayerViewModel > NewLayer( new FActorLayerViewModel( InLayer, InActors, InEditor ) );
NewLayer->Initialize();
return NewLayer;
}
public:
/** @return The Layer's display name as a FName */
FName GetFName() const;
/** @return The Layer's display name as a FString */
FText GetName() const;
/** @return Whether the Layer is visible */
bool IsVisible() const;
/********************************************************************
* EVENTS
********************************************************************/
/** Broadcasts whenever the layer changes */
FSimpleMulticastDelegate Changed;
private:
/**
* FActorLayerViewModel Constructor
*
* @param InLayer The Layer to represent
* @param InEditor The UEditorEngine to use
*/
FActorLayerViewModel( const TWeakObjectPtr< ULayer >& InLayer, const TArray< TWeakObjectPtr< AActor > >& InActors, const TWeakObjectPtr< UEditorEngine >& InEditor );
/** Initializes the FActorLayerViewModel for use */
void Initialize();
/** Called when a change occurs regarding Layers */
void OnLayersChanged( const ELayersAction::Type Action, const TWeakObjectPtr< ULayer >& ChangedLayer, const FName& ChangedProperty );
/** Refreshes any cached information in the FActorLayerViewModel */
void Refresh();
private:
/** The UEditorEngine to use */
const TWeakObjectPtr< UEditorEngine > Editor;
/** The Layer this object represents */
const TWeakObjectPtr< ULayer > Layer;
/** The Actors this object represents */
TArray< TWeakObjectPtr< AActor > > Actors;
};