/* ================= UI_PopMenu ================= */ void UI_PopMenu( void ) { UI_StartSound( uiSoundOut ); uiStatic.menuDepth--; if( uiStatic.menuDepth < 0 ) HOST_ERROR( "UI_PopMenu: menu stack underflow\n" ); UI_PopPButtonStack(); if( uiStatic.menuDepth ) { uiStatic.menuActive = uiStatic.menuStack[uiStatic.menuDepth-1]; uiStatic.firstDraw = true; } else if ( CL_IsActive( )) { UI_CloseMenu(); } else { // never trying the close menu when client isn't connected KEY_SetDest( KEY_MENU ); UI_Main_Menu(); } if( uiStatic.m_fDemosPlayed && uiStatic.m_iOldMenuDepth == uiStatic.menuDepth ) { CLIENT_COMMAND( FALSE, "demos\n" ); uiStatic.m_fDemosPlayed = false; uiStatic.m_iOldMenuDepth = 0; } }
/* ================= UI_PopMenu ================= */ void UI_PopMenu( void ) { UI_StartSound( uiSoundOut ); uiStatic.menuDepth--; if( uiStatic.menuDepth < 0 ) HOST_ERROR( "UI_PopMenu: menu stack underflow\n" ); UI_PopPButtonStack(); if( uiStatic.menuDepth ) { uiStatic.menuActive = uiStatic.menuStack[uiStatic.menuDepth-1]; uiStatic.firstDraw = true; } else if ( CL_IsActive( )) { UI_CloseMenu(); } else { // never trying the close menu when client isn't connected KEY_SetDest( KEY_MENU ); UI_Main_Menu(); } }
/* ================= UI_AddItem ================= */ void UI_AddItem( menuFramework_s *menu, void *item ) { menuCommon_s *generic = (menuCommon_s *)item; if( menu->numItems >= UI_MAX_MENUITEMS ) HOST_ERROR( "UI_AddItem: UI_MAX_MENUITEMS limit exceeded\n" ); menu->items[menu->numItems] = item; ((menuCommon_s *)menu->items[menu->numItems])->parent = menu; ((menuCommon_s *)menu->items[menu->numItems])->flags &= ~QMF_HASMOUSEFOCUS; menu->numItems++; switch( generic->type ) { case QMTYPE_SCROLLLIST: UI_ScrollList_Init((menuScrollList_s *)item ); break; case QMTYPE_SPINCONTROL: UI_SpinControl_Init((menuSpinControl_s *)item ); break; case QMTYPE_CHECKBOX: UI_CheckBox_Init((menuCheckBox_s *)item ); break; case QMTYPE_SLIDER: UI_Slider_Init((menuSlider_s *)item ); break; case QMTYPE_FIELD: UI_Field_Init((menuField_s *)item ); break; case QMTYPE_ACTION: UI_Action_Init((menuAction_s *)item ); break; case QMTYPE_BITMAP: UI_Bitmap_Init((menuBitmap_s *)item ); break; case QMTYPE_BM_BUTTON: UI_PicButton_Init((menuPicButton_s *)item ); break; default: HOST_ERROR( "UI_AddItem: unknown item type (%i)\n", generic->type ); } }
/* ================= UI_PushMenu ================= */ void UI_PushMenu( menuFramework_s *menu ) { int i; menuCommon_s *item; // if this menu is already present, drop back to that level to avoid stacking menus by hotkeys for( i = 0; i < uiStatic.menuDepth; i++ ) { if( uiStatic.menuStack[i] == menu ) { uiStatic.menuDepth = i; break; } } if( i == uiStatic.menuDepth ) { if( uiStatic.menuDepth >= UI_MAX_MENUDEPTH ) HOST_ERROR( "UI_PushMenu: menu stack overflow\n" ); uiStatic.menuStack[uiStatic.menuDepth++] = menu; } uiStatic.menuActive = menu; uiStatic.firstDraw = true; uiStatic.enterSound = gpGlobals->time + 0.15; // make some delay uiStatic.visible = true; KEY_SetDest ( KEY_MENU ); menu->cursor = 0; menu->cursorPrev = 0; // force first available item to have focus for( i = 0; i < menu->numItems; i++ ) { item = (menuCommon_s *)menu->items[i]; if( item->flags & (QMF_GRAYED|QMF_INACTIVE|QMF_HIDDEN|QMF_MOUSEONLY)) continue; menu->cursorPrev = -1; UI_SetCursor( menu, i ); break; } }