// #pragma once #include "CoreMinimal.h" #include "UI/Common/GUIS_ListEntry.h" #include "ItemStack_Base.generated.h" class UItemDataDragDropOperation; class UItemDataDraggingWidget; class UAmountContainerBase; class USizeBox; class UMenuAnchor; class UGUIS_UIActionWidget; class UGUIS_UIActionFactory; class UItemData; /** * */ UCLASS() class PHYINVENTORY_API UItemStack_Base : public UGUIS_ListEntry { GENERATED_BODY() private: UPROPERTY() UItemData* ItemData; UPROPERTY(meta=(BindWidgetOptional)) UGUIS_UIActionWidget* DynamicUIActionWidget; UPROPERTY(EditAnywhere, Category="Config") TSoftObjectPtr UIActionFactory; UPROPERTY(meta=(BindWidgetOptional)) UMenuAnchor* ActionsAnchor; UPROPERTY(meta=(BindWidgetOptional)) UAmountContainerBase* AmountContainer; UPROPERTY(EditAnywhere, Category="Config") TEnumAsByte ActionAnchorHorizontalAlignment = HAlign_Right; UPROPERTY(EditAnywhere, Category="Config") TEnumAsByte ActionAnchorVerticalAlignment = VAlign_Center; UPROPERTY(EditAnywhere, Category="Config") TSubclassOf DraggingWidgetClass; protected: virtual void UpdateAmount(); virtual void ResetState(); virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override; virtual void NativeOnEntryReleased() override; virtual void NativePreConstruct() override; virtual void NativeOnDeselected(bool bBroadcast) override; virtual void NativeOnSelected(bool bBroadcast) override; // 拖拽操作 // 从这个item发起拖拽得时候调用 UItemDataDragDropOperation* DragFromSource(const FString& Tag); // 放下到这个item的时候调用 void DropToDest(UItemDataDragDropOperation& DragOperation) const; virtual void NativeOnDragDetected(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent, UDragDropOperation*& OutOperation) override; virtual bool NativeOnDrop(const FGeometry& InGeometry, const FDragDropEvent& InDragDropEvent, UDragDropOperation* InOperation) override; };