92 const TFLOAT fMaxItemWidth = ( m_fMaxItemWidth <= 0.0f ) ? m_vecMaxItemDimensions.x : m_fMaxItemWidth;
93 const TFLOAT fMaxItemHeight = m_vecMaxItemDimensions.y;
95 TFLOAT fX = m_fPaddingLeft;
107 TFLOAT fColumnSize = m_pColumnsData[ iColumn++ ];
108 pMenuItem->
SetDimensions( fMaxItemWidth * fColumnSize, fMaxItemHeight );
111 fX += fMaxItemWidth * fColumnSize + m_fColumnGap;
113 if ( iColumn >= m_iNumColumns )
119 fY += fMaxItemHeight * m_pRowsData[ iRow++ ] + m_fRowGap;
123 if ( pMenuItem->m_pPrevMenuGridItem == m_pLastMenuItem )
break;
124 pMenuItem = pMenuItem->m_pPrevMenuGridItem;
131 for (
TINT i = 0; i < m_iNumColumns; i++ )
135 for (
TINT i = 0; i < m_iNumRows; i++ )
185 if ( m_bMouseStateDirty )
189 if ( m_pLastMenuItem !=
TNULL )
192 m_pHoveredMenuItem =
TNULL;
205 oElementInvTransform.
Transform( vecElementRelCursorPos, vecCursorPos );
207 if ( pItem->
IsPointInside( vecElementRelCursorPos.
x, vecElementRelCursorPos.
y ) )
209 if ( m_pFocusedMenuItem != pItem )
211 ASoundManager::GetSingleton()->PlayCue( m_eFocusSound );
213 if ( m_fnFocusCallback )
214 m_fnFocusCallback( m_pCallbackUserData, m_pFocusedMenuItem, pItem );
219 m_pHoveredMenuItem = pItem;
224 pItem = pItem->m_pPrevMenuGridItem;
225 if ( pItem == m_pLastMenuItem )
break;
229 m_bMouseStateDirty =
TFALSE;
232 if ( m_pLastMenuItem !=
TNULL )
240 pItem = pItem->m_pPrevMenuGridItem;
241 if ( pItem == m_pLastMenuItem )
break;
245 m_fTime += a_fDeltaTime;
271 m_vecMousePos.x = a_pEvent->GetMagnitudeFloat( 0 );
272 m_vecMousePos.y = a_pEvent->GetMagnitudeFloat( 1 );
281 switch ( a_eCommand )
293 a_pEvent->StartRepeat( 0.5f, 0.1f );
298 a_pEvent->StartRepeat( 0.5f, 0.1f );
302 a_pEvent->StartRepeat( 0.5f, 0.1f );
306 a_pEvent->StartRepeat( 0.5f, 0.1f );
326 oElementInvTransform.
Transform( vecElementRelCursorPos, m_vecMousePos );
328 if ( pItem->
IsPointInside( vecElementRelCursorPos.
x, vecElementRelCursorPos.
y ) )
330 ASoundManager::GetSingleton()->PlayCue( m_eFocusSound );
332 if ( m_fnFocusCallback )
333 m_fnFocusCallback( m_pCallbackUserData, m_pFocusedMenuItem, pItem );
340 if ( pItem->m_pPrevMenuGridItem == m_pLastMenuItem )
break;
341 pItem = pItem->m_pPrevMenuGridItem;
354 ASoundManager::GetSingleton()->PlayCue( m_eBackSound );
357 if ( m_fnActivateCallback )
358 m_fnActivateCallback( m_pCallbackUserData, m_pCancelItem );
363 if ( m_fnActivateCallback && m_pFocusedMenuItem )
366 ASoundManager::GetSingleton()->PlayCue( m_eSelectSound );
368 if ( m_fnActivateCallback )
369 m_fnActivateCallback( m_pCallbackUserData, m_pFocusedMenuItem );
379 pNewFocused = m_pFocusedMenuItem->m_pTopElement;
381 while ( pNewFocused !=
TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->
IsEnabled() )
382 pNewFocused = pNewFocused->m_pTopElement;
386 pNewFocused = m_pFocusedMenuItem->m_pBottomElement;
388 while ( pNewFocused !=
TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->
IsEnabled() )
389 pNewFocused = pNewFocused->m_pBottomElement;
393 pNewFocused = m_pFocusedMenuItem->m_pLeftElement;
395 while ( pNewFocused !=
TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->
IsEnabled() )
396 pNewFocused = pNewFocused->m_pLeftElement;
400 pNewFocused = m_pFocusedMenuItem->m_pRightElement;
402 while ( pNewFocused !=
TNULL && pNewFocused != m_pFocusedMenuItem && !pNewFocused->
IsEnabled() )
403 pNewFocused = pNewFocused->m_pRightElement;
412 ASoundManager::GetSingleton()->PlayCue( m_eFocusSound );
414 if ( m_fnFocusCallback )
415 m_fnFocusCallback( m_pCallbackUserData, m_pFocusedMenuItem, pNewFocused );