Files
UnrealEngine/Engine/Plugins/Runtime/SmartObjects/Source/SmartObjectsEditorModule/Private/SmartObjectViewModel.h
2025-05-18 13:04:45 +08:00

53 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "EditorUndoClient.h"
#include "SmartObjectDefinition.h"
class USmartObjectDefinition;
/**
* ModelView for editing Smart Object Asset.
*/
class FSmartObjectViewModel : public FEditorUndoClient, public TSharedFromThis<FSmartObjectViewModel>
{
public:
explicit FSmartObjectViewModel(USmartObjectDefinition* InDefinition);
virtual ~FSmartObjectViewModel() override;
DECLARE_MULTICAST_DELEGATE_OneParam(FOnSelectionChanged, TConstArrayView<FGuid> /*Selection*/);
DECLARE_MULTICAST_DELEGATE_OneParam(FOnSlotsChanged, USmartObjectDefinition* /*Definition*/);
static TSharedPtr<FSmartObjectViewModel> Register(USmartObjectDefinition* InDefinition);
void Unregister();
static TSharedPtr<FSmartObjectViewModel> Get(const USmartObjectDefinition* InDefinition);
void ResetSelection();
void SetSelection(const TConstArrayView<FGuid> Items);
void AddToSelection(const FGuid& Item);
void RemoveFromSelection(const FGuid& Item);
bool IsSelected(const FGuid& Item) const;
TConstArrayView<FGuid> GetSelection() const;
// Called each time the selection changes.
FOnSelectionChanged& GetOnSelectionChanged() { return OnSelectionChanged; }
FOnSlotsChanged& GetOnSlotsChanged() { return OnSlotsChanged; }
FGuid AddSlot(const FGuid InsertAfterSlotID);
void MoveSlot(const FGuid SourceSlotID, const FGuid TargetSlotID);
void RemoveSlot(const FGuid SlotID);
USmartObjectDefinition* GetAsset() const
{
return WeakDefinition.Get();
}
protected:
static TArray<TSharedPtr<FSmartObjectViewModel>> AllViewModels;
TWeakObjectPtr<USmartObjectDefinition> WeakDefinition;
TArray<FGuid> Selection;
FOnSelectionChanged OnSelectionChanged;
FOnSlotsChanged OnSlotsChanged;
};