OpenBarnyard
 
Loading...
Searching...
No Matches
AGUI2MenuGrid.h
Go to the documentation of this file.
1#pragma once
2#include "AGUI2Element.h"
3#include "Input/AInputMap.h"
4#include "Sound/ASound.h"
5
7
9{
10public:
23
24 using ActivateCallback = void ( * )( void* a_pUserData, AGUI2MenuGridItem* a_pItem );
25 using FocusCallback = void ( * )( void* a_pUserData, AGUI2MenuGridItem* a_pOldFocus, AGUI2MenuGridItem* a_pNewFocus );
26
27public:
28 // constructors/destructor
31
32 TBOOL CreateGrid( TINT a_iNumColumns, TINT a_iNumRows, TFLOAT a_fColumnGap, TFLOAT a_fRowGap );
33
34 void Update( TFLOAT a_fDeltaTime );
35 TBOOL ProcessInputEvent( const Toshi::TInputInterface::InputEvent* a_pEvent );
36 TBOOL ProcessInputCommand( AInputCommand a_eCommand, const Toshi::TInputInterface::InputEvent* a_pEvent );
37
38 void AddMenuGridItem( AGUI2MenuGridItem& a_rMenuItem );
39 void SetFocusAt( AGUI2MenuGridItem* a_pMenuItem );
40
41 // Reflows elements and calculates dimensions
42 void ReflowChildren();
43
45
46 void SetMouseStateDirty() { m_bMouseStateDirty = TTRUE; }
47
48 AGUI2MenuGridItem* GetFocusedMenuItem() const { return m_pFocusedMenuItem; }
49 AGUI2MenuGridItem* GetHoveredMenuItem() const { return m_pHoveredMenuItem; }
50 AGUI2MenuGridItem* GetLastMenuItem() const { return m_pLastMenuItem; }
51
52 void SetCallbackUserData( void* a_pUserData ) { m_pCallbackUserData = a_pUserData; }
53 void SetItemActivationCallback( ActivateCallback a_fnCallback ) { m_fnActivateCallback = a_fnCallback; }
54 void SetItemFocusCallback( FocusCallback a_fnCallback ) { m_fnFocusCallback = a_fnCallback; }
55
56 void SetFocusSound( ASoundId a_eSound ) { m_eFocusSound = a_eSound; }
57 void SetSelectSound( ASoundId a_eSound ) { m_eSelectSound = a_eSound; }
58 void SetBackSound( ASoundId a_eSound ) { m_eBackSound = a_eSound; }
59
60 void BlockActivation( TBOOL a_bBlock ) { m_bBlockActivation = a_bBlock; }
61
62private:
63 TFLOAT m_fItemSpacing;
64 AGUI2MenuGridItem* m_pDefaultFocusElement;
65 AGUI2MenuGridItem* m_pCancelItem;
66 ASoundId m_eFocusSound;
67 ASoundId m_eSelectSound;
68 ASoundId m_eBackSound;
69 AGUI2MenuGridItem* m_pLastMenuItem;
70 AGUI2MenuGridItem* m_pFocusedMenuItem;
71 ACTIONFLAGS m_eActionFlags;
72 Toshi::TVector2 m_vecMousePos;
73 ActivateCallback m_fnActivateCallback;
74 FocusCallback m_fnFocusCallback;
75 void* m_pCallbackUserData;
76 TFLOAT m_fTime;
77 TBOOL m_bFlag1;
78 TINT m_iNumRows;
79 TINT m_iNumColumns;
80 Toshi::TVector2 m_vecMaxItemDimensions;
81 TFLOAT m_fColumnGap;
82 TFLOAT m_fRowGap;
83 TFLOAT* m_pColumnsData;
84 TFLOAT* m_pRowsData;
85 TFLOAT m_fPaddingLeft;
86 TFLOAT m_fMaxItemWidth;
87 TBOOL m_bBlockActivation;
88 TBOOL m_bMouseStateDirty;
89 AGUI2MenuGridItem* m_pHoveredMenuItem;
90};
91
93{
94public:
95 friend class AGUI2MenuGrid;
96
103
104public:
105 // constructors/destructor
108
109 void LinkMenuItemBefore( AGUI2MenuGridItem& a_rLinkAfter );
110
111 void SetSideElements( AGUI2MenuGridItem* a_pLeft, AGUI2MenuGridItem* a_pRight, AGUI2MenuGridItem* a_pTop, AGUI2MenuGridItem* a_pBottom );
112
113 TBOOL IsEnabled() const { return m_bEnabled; }
114 TBOOL CanFocus() const { return IsEnabled() && IsVisible(); }
115
116 AGUI2MenuGridItem* GetNextMenuItem() const { return m_pNextMenuGridItem; }
117 AGUI2MenuGridItem* GetPrevMenuItem() const { return m_pPrevMenuGridItem; }
118
119 //-----------------------------------------------------------------------------
120 // Own methods
121 //-----------------------------------------------------------------------------
122 virtual void OnFocus();
123 virtual void OnFocusLost();
124 virtual void OnUpdate( TFLOAT a_fDeltaTime );
126 virtual void SetEnabled( TBOOL a_bEnabled );
127 virtual TFLOAT GetFlowVisualOffset();
128 virtual TFLOAT GetFlowOffset();
129
130private:
131 AGUI2MenuGridItem* m_pNextMenuGridItem;
132 AGUI2MenuGridItem* m_pPrevMenuGridItem;
133 AGUI2MenuGridItem* m_pLeftElement;
134 AGUI2MenuGridItem* m_pRightElement;
135 AGUI2MenuGridItem* m_pTopElement;
136 AGUI2MenuGridItem* m_pBottomElement;
137 TBOOL m_bEnabled;
138};
#define BITFLAG(x)
Definition Defines.h:10
float TFLOAT
Definition Typedefs.h:4
uint32_t TUINT32
Definition Typedefs.h:13
int TINT
Definition Typedefs.h:7
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
AInputCommand
Definition AInputMap.h:12
TINT32 ASoundId
Definition ASoundLegacy.h:5
TBOOL IsVisible() const
AGUI2MenuGridItem * GetLastMenuItem() const
TBOOL ProcessInputCommand(AInputCommand a_eCommand, const Toshi::TInputInterface::InputEvent *a_pEvent)
AGUI2MenuGridItem * GetHoveredMenuItem() const
void SetItemFocusCallback(FocusCallback a_fnCallback)
void(*)(void *a_pUserData, AGUI2MenuGridItem *a_pOldFocus, AGUI2MenuGridItem *a_pNewFocus) FocusCallback
void SetItemActivationCallback(ActivateCallback a_fnCallback)
void Update(TFLOAT a_fDeltaTime)
void SetFocusSound(ASoundId a_eSound)
void SetBackSound(ASoundId a_eSound)
void SetFocusAt(AGUI2MenuGridItem *a_pMenuItem)
TBOOL ProcessInputEvent(const Toshi::TInputInterface::InputEvent *a_pEvent)
void BlockActivation(TBOOL a_bBlock)
void AddMenuGridItem(AGUI2MenuGridItem &a_rMenuItem)
TBOOL CreateGrid(TINT a_iNumColumns, TINT a_iNumRows, TFLOAT a_fColumnGap, TFLOAT a_fRowGap)
void SetSelectSound(ASoundId a_eSound)
TUINT32 ACTIONFLAGS
AGUI2MenuGridItem * GetFocusedMenuItem() const
void(*)(void *a_pUserData, AGUI2MenuGridItem *a_pItem) ActivateCallback
void SetMouseStateDirty()
void SetCallbackUserData(void *a_pUserData)
TBOOL TriggerButtonPress(AGUI2MenuGridItem &a_rMenuItem)
virtual TFLOAT GetFlowVisualOffset()
TBOOL IsEnabled() const
AGUI2MenuGridItem * GetPrevMenuItem() const
friend class AGUI2MenuGrid
AGUI2MenuGridItem * GetNextMenuItem() const
void SetSideElements(AGUI2MenuGridItem *a_pLeft, AGUI2MenuGridItem *a_pRight, AGUI2MenuGridItem *a_pTop, AGUI2MenuGridItem *a_pBottom)
void LinkMenuItemBefore(AGUI2MenuGridItem &a_rLinkAfter)
TBOOL CanFocus() const
virtual void OnFocusLost()
virtual COMMANDRESULT OnInputCommand(AGUI2MenuGrid::ACTIONFLAGS &a_rActionFlags)
virtual TFLOAT GetFlowOffset()
virtual void OnUpdate(TFLOAT a_fDeltaTime)
virtual void SetEnabled(TBOOL a_bEnabled)