void Menu_AddItem(menuframework_s *menu, void *item) { menucommon_s *itemptr; if (menu->nitems >= MAX_MENUITEMS) { trap_Error ("Menu_AddItem: excessive items"); } menu->items[menu->nitems] = item; ((menucommon_s*)menu->items[menu->nitems])->parent = menu; ((menucommon_s*)menu->items[menu->nitems])->menuPosition = menu->nitems; ((menucommon_s*)menu->items[menu->nitems])->flags &= ~QMF_HASMOUSEFOCUS; // perform any item specific initializations itemptr = (menucommon_s*)item; if (!(itemptr->flags & QMF_NODEFAULTINIT)) { switch (itemptr->type) { case MTYPE_ACTION: Action_Init((menuaction_s*)item); break; case MTYPE_FIELD: MenuField_Init((menufield_s*)item); break; case MTYPE_SPINCONTROL: SpinControl_Init((menulist_s*)item); break; case MTYPE_RADIOBUTTON: RadioButton_Init((menuradiobutton_s*)item); break; case MTYPE_SLIDER: Slider_Init((menuslider_s*)item); break; case MTYPE_BITMAP: Bitmap_Init((menubitmap_s*)item); break; case MTYPE_TEXT: Text_Init((menutext_s*)item); break; case MTYPE_SCROLLLIST: ScrollList_Init((menulist_s*)item); break; case MTYPE_PTEXT: PText_Init((menutext_s*)item); break; case MTYPE_BTEXT: BText_Init((menutext_s*)item); break; case MTYPE_BUTTON: Button_Init((menubutton_s*)item); break; default: trap_Error(va("Menu_Init: unknown type %d", itemptr->type)); } } menu->nitems++; }
static void UI_SPLevelMenu_SetMenuItems( void ) { int n; int level; const char *arenaInfo; if ( selectedArenaSet > currentSet ) { selectedArena = -1; } else if ( selectedArena == -1 ) { selectedArena = 0; } if( selectedArenaSet == trainingTier || selectedArenaSet == finalTier ) { selectedArena = 0; } if( selectedArena != -1 ) { trap_Cvar_SetValue( "ui_spSelection", selectedArenaSet * ARENAS_PER_TIER + selectedArena ); } if( selectedArenaSet == trainingTier ) { arenaInfo = UI_GetSpecialArenaInfo( "training" ); level = atoi( Info_ValueForKey( arenaInfo, "num" ) ); UI_SPLevelMenu_SetMenuArena( 0, level, arenaInfo ); levelMenuInfo.selectedArenaInfo = arenaInfo; levelMenuInfo.item_maps[0].generic.x = 256; Bitmap_Init( &levelMenuInfo.item_maps[0] ); levelMenuInfo.item_maps[0].generic.bottom += 32; levelMenuInfo.numMaps = 1; levelMenuInfo.item_maps[1].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[2].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[3].generic.flags |= QMF_INACTIVE; levelMenuInfo.levelPicNames[1][0] = 0; levelMenuInfo.levelPicNames[2][0] = 0; levelMenuInfo.levelPicNames[3][0] = 0; levelMenuInfo.item_maps[1].shader = 0; levelMenuInfo.item_maps[2].shader = 0; levelMenuInfo.item_maps[3].shader = 0; } else if( selectedArenaSet == finalTier ) { arenaInfo = UI_GetSpecialArenaInfo( "final" ); level = atoi( Info_ValueForKey( arenaInfo, "num" ) ); UI_SPLevelMenu_SetMenuArena( 0, level, arenaInfo ); levelMenuInfo.selectedArenaInfo = arenaInfo; levelMenuInfo.item_maps[0].generic.x = 256; Bitmap_Init( &levelMenuInfo.item_maps[0] ); levelMenuInfo.item_maps[0].generic.bottom += 32; levelMenuInfo.numMaps = 1; levelMenuInfo.item_maps[1].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[2].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[3].generic.flags |= QMF_INACTIVE; levelMenuInfo.levelPicNames[1][0] = 0; levelMenuInfo.levelPicNames[2][0] = 0; levelMenuInfo.levelPicNames[3][0] = 0; levelMenuInfo.item_maps[1].shader = 0; levelMenuInfo.item_maps[2].shader = 0; levelMenuInfo.item_maps[3].shader = 0; } else { levelMenuInfo.item_maps[0].generic.x = 46; Bitmap_Init( &levelMenuInfo.item_maps[0] ); levelMenuInfo.item_maps[0].generic.bottom += 18; levelMenuInfo.numMaps = 4; for ( n = 0; n < 4; n++ ) { level = selectedArenaSet * ARENAS_PER_TIER + n; arenaInfo = UI_GetArenaInfoByNumber( level ); UI_SPLevelMenu_SetMenuArena( n, level, arenaInfo ); } if( selectedArena != -1 ) { levelMenuInfo.selectedArenaInfo = UI_GetArenaInfoByNumber( selectedArenaSet * ARENAS_PER_TIER + selectedArena ); } } // enable/disable arrows when they are valid/invalid if ( selectedArenaSet == minTier ) { levelMenuInfo.item_leftarrow.generic.flags |= ( QMF_INACTIVE | QMF_HIDDEN ); } else { levelMenuInfo.item_leftarrow.generic.flags &= ~( QMF_INACTIVE | QMF_HIDDEN ); } if ( selectedArenaSet == maxTier ) { levelMenuInfo.item_rightarrow.generic.flags |= ( QMF_INACTIVE | QMF_HIDDEN ); } else { levelMenuInfo.item_rightarrow.generic.flags &= ~( QMF_INACTIVE | QMF_HIDDEN ); } UI_SPLevelMenu_SetBots(); }