OpenBarnyard
 
Loading...
Searching...
No Matches
AGUI2MenuGrid Class Reference

#include <AGUI2MenuGrid.h>

Inheritance diagram for AGUI2MenuGrid:
AGUI2Element AGUI2ElementNode

Public Types

enum  ACTIONFLAGS_ : ACTIONFLAGS {
  ACTIONFLAGS_NONE = 0 , ACTIONFLAGS_UP = ( 1U << ( 0 ) ) , ACTIONFLAGS_DOWN = ( 1U << ( 1 ) ) , ACTIONFLAGS_LEFT = ( 1U << ( 2 ) ) ,
  ACTIONFLAGS_RIGHT = ( 1U << ( 3 ) ) , ACTIONFLAGS_OK = ( 1U << ( 4 ) ) , ACTIONFLAGS_CANCEL = ( 1U << ( 5 ) ) , ACTIONFLAGS_MOUSEUPDATED = ( 1U << ( 6 ) )
}
 
using ACTIONFLAGS = TUINT32
 
using ActivateCallback = void ( * )( void* a_pUserData, AGUI2MenuGridItem* a_pItem )
 
using FocusCallback = void ( * )( void* a_pUserData, AGUI2MenuGridItem* a_pOldFocus, AGUI2MenuGridItem* a_pNewFocus )
 
- Public Types inherited from AGUI2Element
using t_PostRender = void ( * )()
 

Public Member Functions

 AGUI2MenuGrid ()
 
 ~AGUI2MenuGrid ()
 
TBOOL CreateGrid (TINT a_iNumColumns, TINT a_iNumRows, TFLOAT a_fColumnGap, TFLOAT a_fRowGap)
 
void Update (TFLOAT a_fDeltaTime)
 
TBOOL ProcessInputEvent (const Toshi::TInputInterface::InputEvent *a_pEvent)
 
TBOOL ProcessInputCommand (AInputCommand a_eCommand, const Toshi::TInputInterface::InputEvent *a_pEvent)
 
void AddMenuGridItem (AGUI2MenuGridItem &a_rMenuItem)
 
void SetFocusAt (AGUI2MenuGridItem *a_pMenuItem)
 
void ReflowChildren ()
 
TBOOL TriggerButtonPress (AGUI2MenuGridItem &a_rMenuItem)
 
void SetMouseStateDirty ()
 
AGUI2MenuGridItemGetFocusedMenuItem () const
 
AGUI2MenuGridItemGetHoveredMenuItem () const
 
AGUI2MenuGridItemGetLastMenuItem () const
 
void SetCallbackUserData (void *a_pUserData)
 
void SetItemActivationCallback (ActivateCallback a_fnCallback)
 
void SetItemFocusCallback (FocusCallback a_fnCallback)
 
void SetFocusSound (ASoundId a_eSound)
 
void SetSelectSound (ASoundId a_eSound)
 
void SetBackSound (ASoundId a_eSound)
 
void BlockActivation (TBOOL a_bBlock)
 
- Public Member Functions inherited from AGUI2Element
 AGUI2Element ()
 
virtual ~AGUI2Element ()=default
 
virtual void Tick (TFLOAT a_fDeltaTime)
 
virtual void PreRender ()
 
virtual void Render ()
 
virtual void PostRender ()
 
virtual void GetDimensions (TFLOAT &a_rWidth, TFLOAT &a_rHeight)
 
virtual TFLOAT GetWidth ()
 
virtual TFLOAT GetHeight ()
 
virtual void SetWidth (TFLOAT a_fWidth)
 
virtual void SetHeight (TFLOAT a_fHeight)
 
virtual void SetDimensions (TFLOAT a_fWidth, TFLOAT a_fHeight)
 
virtual void GetMins (TFLOAT &a_fX, TFLOAT &a_fY)
 
virtual void GetMaxs (TFLOAT &a_fX, TFLOAT &a_fY)
 
virtual void SetColour (TUINT32 a_uiColour)
 
virtual void SetAlpha (TFLOAT a_fAlpha)
 
virtual void SetShadowAlpha (TFLOAT a_fAlpha)
 
virtual void SetFocus (TBOOL a_bFocused)
 
virtual TBOOL IsPointInside (TFLOAT a_fX, TFLOAT a_fY)
 
void AnchorPos (TFLOAT &a_rX, TFLOAT &a_rY, TFLOAT a_fWidth, TFLOAT a_fHeight)
 
void PivotPos (TFLOAT &a_rX, TFLOAT &a_rY, TFLOAT a_fWidth, TFLOAT a_fHeight)
 
void GetScreenTransform (AGUI2Transform &a_rOutTransform)
 
void GetInvScreenTransform (AGUI2Transform &a_rOutTransform)
 
void Show ()
 
void Hide ()
 
void SetInFront ()
 
void SetRenderBeforeChildren ()
 
TBOOL HasFlags (TUINT32 a_uiFlags) const
 
TBOOL IsVisible () const
 
TBOOL IsFocused () const
 
TBOOL ShouldRenderBeforeChildren ()
 
TBOOL IsInFront () const
 
TFLOAT GetAlpha () const
 
void AddChildTail (AGUI2Element &a_rElement)
 
void AddChildHead (AGUI2Element &a_rElement)
 
void SetTranslation (TFLOAT a_fX, TFLOAT a_fY)
 
void SetTranslation (const Toshi::TVector2 &a_rTranslation)
 
void SetTransform (TFLOAT a_fX, TFLOAT a_fY, float a_fRotAngle=0.0f)
 
void SetAnchor (AGUI2ATTACHMENT a_eAnchor)
 
void SetPivot (AGUI2ATTACHMENT a_ePivot)
 
void SetAttachment (AGUI2ATTACHMENT a_eAnchor, AGUI2ATTACHMENT a_ePivot)
 
t_PostRender SetPostRenderCallback (t_PostRender a_cbNewCallback)
 
AGUI2TransformGetTransform ()
 
AGUI2ElementChildBegin () const
 
AGUI2ElementChildRBegin () const
 
AGUI2ElementGetNextChild (AGUI2Element *a_pCurrentChild)
 
AGUI2ElementGetPrevChild (AGUI2Element *a_pCurrentChild)
 
void RemoveSelf ()
 
void LinkChildBefore (AGUI2Element &a_rNewChildren, AGUI2Element &a_rInsertAfter)
 
- Public Member Functions inherited from AGUI2ElementNode
 AGUI2ElementNode ()
 
virtual ~AGUI2ElementNode ()
 
void Unlink ()
 
void LinkAfter (AGUI2ElementNode &a_rNode)
 
void LinkBefore (AGUI2ElementNode &a_rNode)
 
TBOOL IsLinked () const
 
AGUI2ElementNodeGetNext () const
 
AGUI2ElementNodeGetPrev () const
 

Additional Inherited Members

- Public Attributes inherited from AGUI2ElementNode
friend AGUI2Element
 
- Static Public Attributes inherited from AGUI2Element
static TUINT32 s_uiVisibilityMask = 0xFFFFFFFF
 
- Protected Attributes inherited from AGUI2Element
AGUI2Elementm_pParent
 
AGUI2Transform m_oTransform
 
AGUI2ElementNode m_Children
 
AGUI2ATTACHMENT m_eAnchor
 
AGUI2ATTACHMENT m_ePivot
 
TFLOAT m_fWidth
 
TFLOAT m_fHeight
 
TUINT32 m_uiColour
 
TUINT32 m_eFlags
 
t_PostRender m_cbPostRender
 
TUINT32 m_uiVisibilityMask
 
- Protected Attributes inherited from AGUI2ElementNode
AGUI2ElementNodem_pNext
 
AGUI2ElementNodem_pPrev
 

Detailed Description

Definition at line 8 of file AGUI2MenuGrid.h.

Member Typedef Documentation

◆ ACTIONFLAGS

Definition at line 11 of file AGUI2MenuGrid.h.

◆ ActivateCallback

using AGUI2MenuGrid::ActivateCallback = void ( * )( void* a_pUserData, AGUI2MenuGridItem* a_pItem )

Definition at line 24 of file AGUI2MenuGrid.h.

◆ FocusCallback

using AGUI2MenuGrid::FocusCallback = void ( * )( void* a_pUserData, AGUI2MenuGridItem* a_pOldFocus, AGUI2MenuGridItem* a_pNewFocus )

Definition at line 25 of file AGUI2MenuGrid.h.

Member Enumeration Documentation

◆ ACTIONFLAGS_

Enumerator
ACTIONFLAGS_NONE 
ACTIONFLAGS_UP 
ACTIONFLAGS_DOWN 
ACTIONFLAGS_LEFT 
ACTIONFLAGS_RIGHT 
ACTIONFLAGS_OK 
ACTIONFLAGS_CANCEL 
ACTIONFLAGS_MOUSEUPDATED 

Definition at line 12 of file AGUI2MenuGrid.h.

Constructor & Destructor Documentation

◆ AGUI2MenuGrid()

AGUI2MenuGrid::AGUI2MenuGrid ( )

Definition at line 18 of file AGUI2MenuGrid.cpp.

19{
20 m_fItemSpacing = 0.0f;
21 m_pDefaultFocusElement = TNULL;
22 m_pCancelItem = TNULL;
23 m_pLastMenuItem = TNULL;
24 m_pFocusedMenuItem = TNULL;
25 m_eFocusSound = soundbank::UI_MENUCLICK;
26 m_eSelectSound = soundbank::UI_MENUOK;
27 m_eBackSound = soundbank::UI_MENUBACK;
28 m_eActionFlags = ACTIONFLAGS_NONE;
29 m_vecMousePos = TVector2::VEC_ZERO;
30 m_fnActivateCallback = TNULL;
31 m_fnFocusCallback = TNULL;
32 m_pCallbackUserData = TNULL;
33 m_fTime = 0.0f;
34 m_iNumRows = 0;
35 m_iNumColumns = 0;
36 m_bFlag1 = TTRUE;
37 m_vecMaxItemDimensions = TVector2::VEC_ZERO;
38 m_fColumnGap = 0.0f;
39 m_fRowGap = 0.0f;
40 m_pColumnsData = TNULL;
41 m_pRowsData = TNULL;
42 m_fPaddingLeft = 0.0f;
43 m_fMaxItemWidth = 0.0f;
44 m_bBlockActivation = TFALSE;
45 m_pHoveredMenuItem = TNULL;
46 m_eActionFlags = ACTIONFLAGS_NONE;
47}
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
@ UI_MENUCLICK
Definition ui.h:28
@ UI_MENUOK
Definition ui.h:34
@ UI_MENUBACK
Definition ui.h:31
constinit static const TVector2 VEC_ZERO
Definition TVector2.h:132

◆ ~AGUI2MenuGrid()

AGUI2MenuGrid::~AGUI2MenuGrid ( )

Definition at line 49 of file AGUI2MenuGrid.cpp.

50{
51 delete[] m_pColumnsData;
52 delete[] m_pRowsData;
53}

Member Function Documentation

◆ AddMenuGridItem()

void AGUI2MenuGrid::AddMenuGridItem ( AGUI2MenuGridItem & a_rMenuItem)

Definition at line 55 of file AGUI2MenuGrid.cpp.

56{
57 if ( m_pLastMenuItem )
58 a_rMenuItem.LinkMenuItemBefore( *m_pLastMenuItem );
59 else
60 m_pLastMenuItem = &a_rMenuItem;
61
62 AddChildTail( a_rMenuItem );
63
64 // Update max item dimensions
65 TFLOAT fItemWidth, fItemHeight;
66 a_rMenuItem.GetDimensions( fItemWidth, fItemHeight );
67
68 if ( m_vecMaxItemDimensions.x < fItemWidth )
69 m_vecMaxItemDimensions.x = fItemWidth;
70
71 if ( m_vecMaxItemDimensions.y < fItemHeight )
72 m_vecMaxItemDimensions.y = fItemHeight;
73
75}
float TFLOAT
Definition Typedefs.h:4
@ AGUI2ATTACHMENT_TOPLEFT
void AddChildTail(AGUI2Element &a_rElement)
void SetAttachment(AGUI2ATTACHMENT a_eAnchor, AGUI2ATTACHMENT a_ePivot)
virtual void GetDimensions(TFLOAT &a_rWidth, TFLOAT &a_rHeight)
void LinkMenuItemBefore(AGUI2MenuGridItem &a_rLinkAfter)

◆ BlockActivation()

void AGUI2MenuGrid::BlockActivation ( TBOOL a_bBlock)
inline

Definition at line 60 of file AGUI2MenuGrid.h.

60{ m_bBlockActivation = a_bBlock; }

◆ CreateGrid()

TBOOL AGUI2MenuGrid::CreateGrid ( TINT a_iNumColumns,
TINT a_iNumRows,
TFLOAT a_fColumnGap,
TFLOAT a_fRowGap )

Definition at line 165 of file AGUI2MenuGrid.cpp.

166{
167 m_iNumRows = a_iNumRows;
168 m_iNumColumns = a_iNumColumns;
169 m_fColumnGap = a_fColumnGap;
170 m_fRowGap = a_fRowGap;
171
172 // Create columns data
173 m_pColumnsData = new TFLOAT[ a_iNumColumns ];
174 TUtil::Fill( m_pColumnsData, m_pColumnsData + a_iNumColumns, 1.0f );
175
176 // Create rows data
177 m_pRowsData = new TFLOAT[ a_iNumRows ];
178 TUtil::Fill( m_pRowsData, m_pRowsData + a_iNumRows, 1.0f );
179
180 return TTRUE;
181}
static void Fill(T *a_pStart, T *a_pEnd, const T &a_rcValue=T())
Definition TUtil.h:96

◆ GetFocusedMenuItem()

AGUI2MenuGridItem * AGUI2MenuGrid::GetFocusedMenuItem ( ) const
inline

Definition at line 48 of file AGUI2MenuGrid.h.

48{ return m_pFocusedMenuItem; }

◆ GetHoveredMenuItem()

AGUI2MenuGridItem * AGUI2MenuGrid::GetHoveredMenuItem ( ) const
inline

Definition at line 49 of file AGUI2MenuGrid.h.

49{ return m_pHoveredMenuItem; }

◆ GetLastMenuItem()

AGUI2MenuGridItem * AGUI2MenuGrid::GetLastMenuItem ( ) const
inline

Definition at line 50 of file AGUI2MenuGrid.h.

50{ return m_pLastMenuItem; }

◆ ProcessInputCommand()

TBOOL AGUI2MenuGrid::ProcessInputCommand ( AInputCommand a_eCommand,
const Toshi::TInputInterface::InputEvent * a_pEvent )

Definition at line 264 of file AGUI2MenuGrid.cpp.

265{
266 TBOOL bHandled = TFALSE;
267
268 if ( !TStringManager::String8Compare( a_pEvent->GetSource()->GetClass()->GetName(), "TInputDeviceMouse" ) )
269 {
270 m_eActionFlags |= ACTIONFLAGS_MOUSEUPDATED;
271 m_vecMousePos.x = a_pEvent->GetMagnitudeFloat( 0 );
272 m_vecMousePos.y = a_pEvent->GetMagnitudeFloat( 1 );
273 }
274
275 if ( a_pEvent->GetEventType() == TInputInterface::EVENT_TYPE_GONE_DOWN ||
276 a_pEvent->GetEventType() == TInputInterface::EVENT_TYPE_REPEAT ||
278 {
279 bHandled = TTRUE;
280
281 switch ( a_eCommand )
282 {
283 case AInputCommand_OK:
285 m_eActionFlags |= ACTIONFLAGS_OK;
286 break;
288 m_eActionFlags |= ACTIONFLAGS_CANCEL;
289 break;
290 case AInputCommand_Up:
292 m_eActionFlags |= ACTIONFLAGS_UP;
293 a_pEvent->StartRepeat( 0.5f, 0.1f );
294 break;
297 m_eActionFlags |= ACTIONFLAGS_DOWN;
298 a_pEvent->StartRepeat( 0.5f, 0.1f );
299 break;
301 m_eActionFlags |= ACTIONFLAGS_LEFT;
302 a_pEvent->StartRepeat( 0.5f, 0.1f );
303 break;
305 m_eActionFlags |= ACTIONFLAGS_RIGHT;
306 a_pEvent->StartRepeat( 0.5f, 0.1f );
307 break;
308 default:
309 bHandled = EAT_ALL_INPUT_EVENTS;
310 break;
311 }
312 }
313
314 if ( m_eActionFlags & ACTIONFLAGS_MOUSEUPDATED )
315 {
316 AGUI2Transform oElementInvTransform;
317
318 AGUI2MenuGridItem* pItem = m_pLastMenuItem;
319 while ( TTRUE )
320 {
321 // Get inverse transform of the current UI element
322 pItem->GetInvScreenTransform( oElementInvTransform );
323
324 // Get cursor position that is relative to the UI element
325 TVector2 vecElementRelCursorPos;
326 oElementInvTransform.Transform( vecElementRelCursorPos, m_vecMousePos );
327
328 if ( pItem->IsPointInside( vecElementRelCursorPos.x, vecElementRelCursorPos.y ) )
329 {
330 ASoundManager::GetSingleton()->PlayCue( m_eFocusSound );
331
332 if ( m_fnFocusCallback )
333 m_fnFocusCallback( m_pCallbackUserData, m_pFocusedMenuItem, pItem );
334
335 SetFocusAt( pItem );
336 break;
337 }
338
339 // Go to the next item if it exists
340 if ( pItem->m_pPrevMenuGridItem == m_pLastMenuItem ) break;
341 pItem = pItem->m_pPrevMenuGridItem;
342 }
343 }
344
345 TASSERT( m_pFocusedMenuItem != TNULL );
346
347 AGUI2MenuGridItem::COMMANDRESULT eCommandResult = m_pFocusedMenuItem->OnInputCommand( m_eActionFlags );
348
349 if ( eCommandResult == AGUI2MenuGridItem::COMMANDRESULT_CANCEL )
350 {
351 if ( m_pCancelItem )
352 {
353 // Can cancel, play back sound
354 ASoundManager::GetSingleton()->PlayCue( m_eBackSound );
355
356 // Call handler if it's specified
357 if ( m_fnActivateCallback )
358 m_fnActivateCallback( m_pCallbackUserData, m_pCancelItem );
359 }
360 }
361 else if ( eCommandResult == AGUI2MenuGridItem::COMMANDRESULT_OK )
362 {
363 if ( m_fnActivateCallback && m_pFocusedMenuItem )
364 {
365 // Can activate
366 ASoundManager::GetSingleton()->PlayCue( m_eSelectSound );
367
368 if ( m_fnActivateCallback )
369 m_fnActivateCallback( m_pCallbackUserData, m_pFocusedMenuItem );
370 }
371 }
372 else if ( eCommandResult == AGUI2MenuGridItem::COMMANDRESULT_NONE )
373 {
374 // If element didn't process the command, check if the menu can handle this
375
376 AGUI2MenuGridItem* pNewFocused;
377 if ( m_eActionFlags & ACTIONFLAGS_UP )
378 {
379 pNewFocused = m_pFocusedMenuItem->m_pTopElement;
380
381 while ( pNewFocused != TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->IsEnabled() )
382 pNewFocused = pNewFocused->m_pTopElement;
383 }
384 else if ( m_eActionFlags & ACTIONFLAGS_DOWN )
385 {
386 pNewFocused = m_pFocusedMenuItem->m_pBottomElement;
387
388 while ( pNewFocused != TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->IsEnabled() )
389 pNewFocused = pNewFocused->m_pBottomElement;
390 }
391 else if ( m_eActionFlags & ACTIONFLAGS_LEFT )
392 {
393 pNewFocused = m_pFocusedMenuItem->m_pLeftElement;
394
395 while ( pNewFocused != TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->IsEnabled() )
396 pNewFocused = pNewFocused->m_pLeftElement;
397 }
398 else if ( m_eActionFlags & ACTIONFLAGS_RIGHT )
399 {
400 pNewFocused = m_pFocusedMenuItem->m_pRightElement;
401
402 while ( pNewFocused != TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->IsEnabled() )
403 pNewFocused = pNewFocused->m_pRightElement;
404 }
405 else
406 {
407 m_eActionFlags = ACTIONFLAGS_NONE;
408 return bHandled;
409 }
410
411 // Change focus
412 ASoundManager::GetSingleton()->PlayCue( m_eFocusSound );
413
414 if ( m_fnFocusCallback )
415 m_fnFocusCallback( m_pCallbackUserData, m_pFocusedMenuItem, pNewFocused );
416
417 SetFocusAt( pNewFocused );
418 bHandled = TTRUE;
419 }
420
421 m_eActionFlags = ACTIONFLAGS_NONE;
422 return bHandled;
423}
#define TASSERT(X,...)
Definition Defines.h:138
bool TBOOL
Definition Typedefs.h:6
#define EAT_ALL_INPUT_EVENTS
Definition AGUI2Menu.cpp:14
@ AInputCommand_Forward
Definition AInputMap.h:35
@ AInputCommand_Backward
Definition AInputMap.h:43
@ AInputCommand_Right
Definition AInputMap.h:34
@ AInputCommand_Down
Definition AInputMap.h:30
@ AInputCommand_Left
Definition AInputMap.h:33
@ AInputCommand_OK
Definition AInputMap.h:15
@ AInputCommand_Up
Definition AInputMap.h:29
@ AInputCommand_Cancel
Definition AInputMap.h:16
@ AInputCommand_Shoot
Definition AInputMap.h:65
TFLOAT y
Definition TVector2.h:139
TFLOAT x
Definition TVector2.h:139
static TINT String8Compare(const TCHAR *str1, const TCHAR *str2, TSIZE size=-1)
void GetInvScreenTransform(AGUI2Transform &a_rOutTransform)
virtual TBOOL IsPointInside(TFLOAT a_fX, TFLOAT a_fY)
void SetFocusAt(AGUI2MenuGridItem *a_pMenuItem)
TBOOL IsEnabled() const
void Transform(Toshi::TVector2 &a_rOutVec, const Toshi::TVector2 &a_rTransformVec) const

◆ ProcessInputEvent()

TBOOL AGUI2MenuGrid::ProcessInputEvent ( const Toshi::TInputInterface::InputEvent * a_pEvent)

Definition at line 248 of file AGUI2MenuGrid.cpp.

249{
250 if ( a_pEvent->GetEventType() == TInputInterface::EVENT_TYPE_MOVED )
251 {
252 // Make sure menu updates mouse state
254 }
255 else if ( a_pEvent->GetEventType() == TInputInterface::EVENT_TYPE_GONE_DOWN && a_pEvent->GetDoodad() == TInputDeviceMouse::BUTTON_1 && GetHoveredMenuItem() != TNULL )
256 {
257 // LMB was pressed and the menu has a hovered item
259 }
260
261 return TFALSE;
262}
AGUI2MenuGridItem * GetHoveredMenuItem() const
void SetMouseStateDirty()
TBOOL TriggerButtonPress(AGUI2MenuGridItem &a_rMenuItem)

◆ ReflowChildren()

void AGUI2MenuGrid::ReflowChildren ( )

Definition at line 88 of file AGUI2MenuGrid.cpp.

89{
90 TASSERT( m_pLastMenuItem != TNULL );
91
92 const TFLOAT fMaxItemWidth = ( m_fMaxItemWidth <= 0.0f ) ? m_vecMaxItemDimensions.x : m_fMaxItemWidth;
93 const TFLOAT fMaxItemHeight = m_vecMaxItemDimensions.y;
94
95 TFLOAT fX = m_fPaddingLeft;
96 TFLOAT fY = 0.0f;
97 TINT iColumn = 0;
98 TINT iRow = 0;
99
100 AGUI2MenuGridItem* pMenuItem = m_pLastMenuItem;
101 while ( TTRUE )
102 {
103 // Update position of the menu item
104 pMenuItem->SetTranslation( fX, fY );
105
106 // Update size of the item
107 TFLOAT fColumnSize = m_pColumnsData[ iColumn++ ];
108 pMenuItem->SetDimensions( fMaxItemWidth * fColumnSize, fMaxItemHeight );
109
110 // Offset the coordinate
111 fX += fMaxItemWidth * fColumnSize + m_fColumnGap;
112
113 if ( iColumn >= m_iNumColumns )
114 {
115 // Switch to the next row
116 iColumn = 0;
117
118 fX = m_fPaddingLeft;
119 fY += fMaxItemHeight * m_pRowsData[ iRow++ ] + m_fRowGap;
120 }
121
122 // Go to the next item if it exists
123 if ( pMenuItem->m_pPrevMenuGridItem == m_pLastMenuItem ) break;
124 pMenuItem = pMenuItem->m_pPrevMenuGridItem;
125 }
126
127 // Calculate menu dimensions
128 AGUI2Element::SetDimensions( 0.0f, 0.0f );
129
130 // Width
131 for ( TINT i = 0; i < m_iNumColumns; i++ )
132 AGUI2Element::SetWidth( fMaxItemWidth * m_pColumnsData[ i ] + AGUI2Element::GetWidth() + m_fColumnGap );
133
134 // Height
135 for ( TINT i = 0; i < m_iNumRows; i++ )
136 AGUI2Element::SetHeight( fMaxItemHeight * m_pRowsData[ i ] + AGUI2Element::GetHeight() + m_fRowGap );
137
140}
int TINT
Definition Typedefs.h:7
void SetTranslation(TFLOAT a_fX, TFLOAT a_fY)
virtual void SetWidth(TFLOAT a_fWidth)
virtual TFLOAT GetHeight()
virtual TFLOAT GetWidth()
virtual void SetDimensions(TFLOAT a_fWidth, TFLOAT a_fHeight)
virtual void SetHeight(TFLOAT a_fHeight)

◆ SetBackSound()

void AGUI2MenuGrid::SetBackSound ( ASoundId a_eSound)
inline

Definition at line 58 of file AGUI2MenuGrid.h.

58{ m_eBackSound = a_eSound; }

◆ SetCallbackUserData()

void AGUI2MenuGrid::SetCallbackUserData ( void * a_pUserData)
inline

Definition at line 52 of file AGUI2MenuGrid.h.

52{ m_pCallbackUserData = a_pUserData; }

◆ SetFocusAt()

void AGUI2MenuGrid::SetFocusAt ( AGUI2MenuGridItem * a_pMenuItem)

Definition at line 77 of file AGUI2MenuGrid.cpp.

78{
79 if ( m_pFocusedMenuItem )
80 m_pFocusedMenuItem->OnFocusLost();
81
82 m_pFocusedMenuItem = a_pMenuItem;
83
84 if ( a_pMenuItem )
85 a_pMenuItem->OnFocus();
86}

◆ SetFocusSound()

void AGUI2MenuGrid::SetFocusSound ( ASoundId a_eSound)
inline

Definition at line 56 of file AGUI2MenuGrid.h.

56{ m_eFocusSound = a_eSound; }

◆ SetItemActivationCallback()

void AGUI2MenuGrid::SetItemActivationCallback ( ActivateCallback a_fnCallback)
inline

Definition at line 53 of file AGUI2MenuGrid.h.

53{ m_fnActivateCallback = a_fnCallback; }

◆ SetItemFocusCallback()

void AGUI2MenuGrid::SetItemFocusCallback ( FocusCallback a_fnCallback)
inline

Definition at line 54 of file AGUI2MenuGrid.h.

54{ m_fnFocusCallback = a_fnCallback; }

◆ SetMouseStateDirty()

void AGUI2MenuGrid::SetMouseStateDirty ( )
inline

Definition at line 46 of file AGUI2MenuGrid.h.

46{ m_bMouseStateDirty = TTRUE; }

◆ SetSelectSound()

void AGUI2MenuGrid::SetSelectSound ( ASoundId a_eSound)
inline

Definition at line 57 of file AGUI2MenuGrid.h.

57{ m_eSelectSound = a_eSound; }

◆ TriggerButtonPress()

TBOOL AGUI2MenuGrid::TriggerButtonPress ( AGUI2MenuGridItem & a_rMenuItem)

Definition at line 142 of file AGUI2MenuGrid.cpp.

143{
144 m_eActionFlags |= ACTIONFLAGS_OK;
145 AGUI2MenuGridItem::COMMANDRESULT eCommandResult = a_rMenuItem.OnInputCommand( m_eActionFlags );
146 m_eActionFlags = ACTIONFLAGS_NONE;
147
148 if ( eCommandResult == AGUI2MenuGridItem::COMMANDRESULT_OK )
149 {
150 if ( m_fnActivateCallback && m_pFocusedMenuItem && !m_bBlockActivation )
151 {
152 // Can activate
153 ASoundManager::GetSingleton()->PlayCue( m_eSelectSound );
154
155 if ( m_fnActivateCallback )
156 m_fnActivateCallback( m_pCallbackUserData, m_pFocusedMenuItem );
157 }
158
159 return TTRUE;
160 }
161
162 return TFALSE;
163}
virtual COMMANDRESULT OnInputCommand(AGUI2MenuGrid::ACTIONFLAGS &a_rActionFlags)

◆ Update()

void AGUI2MenuGrid::Update ( TFLOAT a_fDeltaTime)

Definition at line 183 of file AGUI2MenuGrid.cpp.

184{
185 if ( m_bMouseStateDirty )
186 {
187 AGUI2Transform oElementInvTransform;
188
189 if ( m_pLastMenuItem != TNULL )
190 {
191 TVector2 vecCursorPos = AGUI2::GetMouseCursor().GetCursorPos();
192 m_pHoveredMenuItem = TNULL;
193
194 AGUI2MenuGridItem* pItem = m_pLastMenuItem;
195
196 while ( TTRUE )
197 {
198 if ( pItem->IsVisible() )
199 {
200 // Get inverse transform of the current UI element
201 pItem->GetInvScreenTransform( oElementInvTransform );
202
203 // Get cursor position that is relative to the UI element
204 TVector2 vecElementRelCursorPos;
205 oElementInvTransform.Transform( vecElementRelCursorPos, vecCursorPos );
206
207 if ( pItem->IsPointInside( vecElementRelCursorPos.x, vecElementRelCursorPos.y ) )
208 {
209 if ( m_pFocusedMenuItem != pItem )
210 {
211 ASoundManager::GetSingleton()->PlayCue( m_eFocusSound );
212
213 if ( m_fnFocusCallback )
214 m_fnFocusCallback( m_pCallbackUserData, m_pFocusedMenuItem, pItem );
215
216 SetFocusAt( pItem );
217 }
218
219 m_pHoveredMenuItem = pItem;
220 break;
221 }
222 }
223
224 pItem = pItem->m_pPrevMenuGridItem;
225 if ( pItem == m_pLastMenuItem ) break;
226 }
227 }
228
229 m_bMouseStateDirty = TFALSE;
230 }
231
232 if ( m_pLastMenuItem != TNULL )
233 {
234 AGUI2MenuGridItem* pItem = m_pLastMenuItem;
235
236 while ( TTRUE )
237 {
238 pItem->OnUpdate( a_fDeltaTime );
239
240 pItem = pItem->m_pPrevMenuGridItem;
241 if ( pItem == m_pLastMenuItem ) break;
242 }
243 }
244
245 m_fTime += a_fDeltaTime;
246}
static AGUI2MouseCursor & GetMouseCursor()
Definition AGUI2.h:30
TBOOL IsVisible() const
virtual void OnUpdate(TFLOAT a_fDeltaTime)
const Toshi::TVector2 & GetCursorPos() const

The documentation for this class was generated from the following files: