include

IUserListEntry.h

설명

stock UMG 리스트 뷰에서 entry 위젯으로 사용할 수 있게 하기 위해 어떤 UUserWidget 클래스를 위해 필요한 인터페이스.
change event와 소유한 리스트에 의해 엔트리가 할당되어 표기된 Object item을 위해 getter 제공

Header


UINTERFACE() // unreal interface 태그
class UMG_API UUserObjectListEntry : public UUserListEntry //U- 어미가 있는 UObject 클래스
{
    GENERATED_UINTERFACE_BODY()
};

class UMG_API IUserObjectListEntry : public IUserListEntry{

    GENERATED_IINTERFACE_BODY()

public:
    // 소유하고 있는 UListView에 있는 이 entry가 현재 표현하는 UObject 아이템 반환
    template< typename ItemObjectT = UObject>
    ItemObjectT* GetListItem() const{
        static_assert(TIsDerivedFrom< ItemObjectT, UObject>::IsDerived, "Item represented by an ObjectListEntry are always expected to be UObjects");
        return Cast< ItemObjectT>(GetlistItemObjectInternal();
    }
protected:
    //UUserWidget에서 NativeOn~ method들 과 같은 같은 패턴을 따름. - super 호출들이 이벤트에서 BP로 순서대로 요청된다.
    virtual void NativeOnlistItemObjectSet(UObject* ListItemObject);

    //이 entry가 소유한 list view에 의해 새 item 객체를 표현하고자 할당되었을 때 호출된다.
    void OnListItemObjectSet(UObject* ListItemObject);

    //IUserObjectListEntry의 Implementers는 더 이상 메뉴얼적으로 GetListItemObject 메서드를 시행하지 않는다.
    UE_DEPRECATED(4.23, "Implementers of IUserObjectListEntry no longer need to manually implement the GetListItemObject method.")
    virtual UObject* GetListItemObject_Implementation() const { return nullptr; }

    //NativeListItemObjectSet으로 개명되었다. item 객체를 캐싱하는 것은 더 이상 어려운 요구사항이 아니기 때문
    UE_DEPRECATED(4.23, "Renamed to NativeOnListItemObjectSet, as cashing the item object is no longer a hard requirement.")
    virtual void SetListItemObjectInternal(UObject* InObject){}
private:
    UObject* GetListItemObjectInternal() const;

    template< typename> friend class SObjectTableRow;
    static void SetListItemObject(UUserWidget& ListEntryWidget, UObject* ListItemObject);
};

// IUserListEntry를 시행하는 위젯들에게 for FREE로 기능을 제공하기 위한 static Library
UCLASS()
class UMG_API UUserObjectLIstEntryLibrary : public UBlueprintFunctionLibrary{
    GENERATED_BODY()
public:
    // 소유한 list view에서 이 Entry가 할당되어 현재 표현하고자 하는 item을 반환한다.
    UFUNCTION(BlueprintPure, Category = UserObjectListEntry, meta = (DefaultToSelf = UserObjectListEntry))
    static UObject* GetListItemObject(TScriptInterface< IUserObjectListEntry> UserObjectListEntry);
};

'개발자로 > Unreal' 카테고리의 다른 글

[Unreal4] ListView  (0) 2022.09.30
[Unreal4] 컨트롤러  (0) 2022.08.19
[Unreal4] 스켈레탈 메시 액터(SkeletalMesh Actor)  (0) 2022.08.19
[Unreal4] 캐릭터(Character)  (0) 2022.08.19
[Unreal4] 입력(Input)  (0) 2022.08.17

+ Recent posts