haxis/Source/UnrealProject/GUI/Menu/SubMenu.h

128 lines
4.1 KiB
C++

// Project Lab - NHTV Igad
#pragma once
#include "GUI/Menu/MenuItemBase.h"
#include "SubMenu.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMenuChange);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSubMenuItemSelected, UMenuItemBase*, item);
UCLASS()
class UNREALPROJECT_API UPanelUserWidget : public UUserWidget
{
GENERATED_BODY()
public:
};
UCLASS()
class UNREALPROJECT_API USubMenu : public UMenuItemBase
{
GENERATED_BODY()
public:
USubMenu(const FObjectInitializer& init);
virtual void NativeConstruct() override;
virtual void NativeDestruct() override;
virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
virtual void RescanItems();
UFUNCTION(BlueprintCallable, Category = "SubMenu")
void CloseSubMenu();
virtual void OnEnter(class UMenuScreenBase* screen);
virtual void OnLeave();
UFUNCTION(BlueprintCallable, Category = "SubMenu")
bool HasFocus() const;
virtual void OnSuspend(USubMenu* newSubMenu, bool loseFocus);
virtual void OnRestore(USubMenu* removedMenu);
// Callback that gets called whenever the button hits should update when showing this menu
UFUNCTION(BlueprintImplementableEvent, Category = "SubMenu")
void SetButtonHints();
UFUNCTION(BlueprintCallable, Category = "SubMenu")
class UButtonHintBar* GetButtonHintBar() const;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
class UCharacterSettings* GetCharacterSettings() const;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
class UPrefs* GetPrefs() const;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
class UDefaultGameInstance* GetGameInstance() const;
virtual void NativeOnMenuAction(EMenuActionBinding binding) override;
virtual void NativeOnSelectionConfirmed(UMenuItemBase* item);
UFUNCTION(BlueprintCallable, Category="SubMenu")
UMenuItemBase* GetItem(int32 itemIndex) const;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
int32 GetNumItems() const;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
int32 GetSelectedItem() const;
UFUNCTION(BlueprintCallable, Category = "SubMenu")
void SelectNewItemByIndex(int32 idx);
UFUNCTION(BlueprintCallable, Category = "SubMenu")
void SelectNewItem(UMenuItemBase* item);
void SelectNewItemByIndex(int32 idx, bool controller);
UFUNCTION(BlueprintCallable, Category = "SubMenu")
int32 GetItemIndex(UMenuItemBase* item);
UFUNCTION(BlueprintCallable, Category = "SubMenu")
UMenuScreenBase* GetScreen() const;
// Called when an item is selected
UPROPERTY(BlueprintAssignable, Category="SubMenu")
FSubMenuItemSelected onItemSelected;
// Called when a button is pressed
UPROPERTY(BlueprintAssignable, Category="SubMenu")
FSubMenuItemSelected onItemSelectionConfirmed;
// Called when the back button is pressed
UPROPERTY(BlueprintAssignable, Category = "SubMenu")
FMenuChange onBack;
UPROPERTY(BlueprintAssignable, Category = "SubMenu")
FMenuChange onClosed;
UPROPERTY(BlueprintAssignable, Category = "SubMenu")
FMenuChange onOpened;
// Called when another menu is opened on top of this menu
UPROPERTY(BlueprintAssignable, Category = "SubMenu")
FMenuChange onSuspend;
// Called when this menu is displayed again after a menu was closed on top of this
UPROPERTY(BlueprintAssignable, Category = "SubMenu")
FMenuChange onRestore;
// The panel widget that contains all the buttons selectable in this menu
UPROPERTY(BlueprintReadWrite, Category="SubMenu")
UPanelWidget* container;
protected:
void m_ScanContainer(UWidget* widget, int32 depth = 0);
// Set the allowance of mouse focus & presses of the buttons in this menu
void m_SetFocus(bool focus);
// The list of selectable items in the menu
UPROPERTY()
TArray<UMenuItemBase*> m_items;
private:
friend class UMenuItemBase;
int32 m_selectedItem;
// Horizontal or vertical input handling
int m_layoutDirection;
UPROPERTY()
class UMenuScreenBase* m_screen;
// True if this is the topmost screen and if the buttons in this screen are allowed to be pressed.
bool m_focus;
};