// 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 { public: explicit FSmartObjectViewModel(USmartObjectDefinition* InDefinition); virtual ~FSmartObjectViewModel() override; DECLARE_MULTICAST_DELEGATE_OneParam(FOnSelectionChanged, TConstArrayView /*Selection*/); DECLARE_MULTICAST_DELEGATE_OneParam(FOnSlotsChanged, USmartObjectDefinition* /*Definition*/); static TSharedPtr Register(USmartObjectDefinition* InDefinition); void Unregister(); static TSharedPtr Get(const USmartObjectDefinition* InDefinition); void ResetSelection(); void SetSelection(const TConstArrayView Items); void AddToSelection(const FGuid& Item); void RemoveFromSelection(const FGuid& Item); bool IsSelected(const FGuid& Item) const; TConstArrayView 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> AllViewModels; TWeakObjectPtr WeakDefinition; TArray Selection; FOnSelectionChanged OnSelectionChanged; FOnSlotsChanged OnSlotsChanged; };