/* ================= Menu_DefaultKey ================= */ sfxHandle_t Menu_DefaultKey( menuframework_s *m, int key ) { sfxHandle_t sound = 0; menucommon_s *item; int cursor_prev; // menu system keys switch ( key ) { case K_JOY_B: case K_2JOY_B: case K_3JOY_B: case K_4JOY_B: case K_MOUSE2: case K_ESCAPE: UI_PopMenu(); return menu_out_sound; } if (!m || !m->nitems) return 0; // route key stimulus to widget item = Menu_ItemAtCursor( m ); if (item && !(item->flags & (QMF_GRAYED|QMF_INACTIVE))) { switch (item->type) { case MTYPE_SPINCONTROL: sound = SpinControl_Key( (menulist_s*)item, key ); break; case MTYPE_RADIOBUTTON: sound = RadioButton_Key( (menuradiobutton_s*)item, key ); break; case MTYPE_SLIDER: sound = Slider_Key( (menuslider_s*)item, key ); break; case MTYPE_SCROLLLIST: sound = ScrollList_Key( (menulist_s*)item, key ); break; case MTYPE_FIELD: sound = MenuField_Key( (menufield_s*)item, &key ); break; } if (sound) { // key was handled return sound; } } // default handling switch ( key ) { case K_F11: if ( trap_Cvar_VariableValue( "developer" ) ) { uis.debug ^= 1; } break; case K_F12: if ( trap_Cvar_VariableValue( "developer" ) ) { trap_Cmd_ExecuteText( EXEC_APPEND, "screenshot\n" ); } break; case K_JOY_DPAD_UP: case K_JOY_LEFTSTICK_UP: case K_2JOY_DPAD_UP: case K_2JOY_LEFTSTICK_UP: case K_3JOY_DPAD_UP: case K_3JOY_LEFTSTICK_UP: case K_4JOY_DPAD_UP: case K_4JOY_LEFTSTICK_UP: case K_KP_UPARROW: case K_UPARROW: cursor_prev = m->cursor; m->cursor_prev = m->cursor; m->cursor--; Menu_AdjustCursor( m, -1 ); if ( cursor_prev != m->cursor ) { Menu_CursorMoved( m ); sound = menu_move_sound; } break; case K_TAB: case K_JOY_DPAD_DOWN: case K_JOY_LEFTSTICK_DOWN: case K_2JOY_DPAD_DOWN: case K_2JOY_LEFTSTICK_DOWN: case K_3JOY_DPAD_DOWN: case K_3JOY_LEFTSTICK_DOWN: case K_4JOY_DPAD_DOWN: case K_4JOY_LEFTSTICK_DOWN: case K_KP_DOWNARROW: case K_DOWNARROW: cursor_prev = m->cursor; m->cursor_prev = m->cursor; m->cursor++; Menu_AdjustCursor( m, 1 ); if ( cursor_prev != m->cursor ) { Menu_CursorMoved( m ); sound = menu_move_sound; } break; case K_MOUSE1: case K_MOUSE3: if (item) if ((item->flags & QMF_HASMOUSEFOCUS) && !(item->flags & (QMF_GRAYED|QMF_INACTIVE))) return (Menu_ActivateItem( m, item )); break; case K_JOY_A: case K_2JOY_A: case K_3JOY_A: case K_4JOY_A: case K_AUX1: case K_AUX2: case K_AUX3: case K_AUX4: case K_AUX5: case K_AUX6: case K_AUX7: case K_AUX8: case K_AUX9: case K_AUX10: case K_AUX11: case K_AUX12: case K_AUX13: case K_AUX14: case K_AUX15: case K_AUX16: case K_KP_ENTER: case K_ENTER: if (item) if (!(item->flags & (QMF_MOUSEONLY|QMF_GRAYED|QMF_INACTIVE))) return (Menu_ActivateItem( m, item )); break; } return sound; }
const char *Default_MenuKey( menuframework_s *m, int key ) { const char *sound = NULL; menucommon_t *item = NULL; if( m ) { item = Menu_ItemAtCursor( m ); if( item != NULL ) { if( item->type == MTYPE_FIELD ) { if( Field_Key( item, key ) ) return NULL; } } } switch( key ) { case 70: //F for adding to favorites case 102: //f if( m && ( item->type == MTYPE_ACTION ) ) M_AddToFavorites( item ); break; case 82: //R for removing favorites case 114: //r if( m && ( item->type == MTYPE_ACTION ) ) M_RemoveFromFavorites( item ); break; case K_ESCAPE: M_PopMenu(); return menu_out_sound; case K_MOUSE1: if( !Menu_SlideItem( m, 1, key ) ) Menu_SelectItem( m ); sound = menu_move_sound; break; case K_MOUSE2: if( m && ( m_cursoritem == item ) && Menu_SlideItem( m, -1, key ) ) sound = menu_move_sound; else { M_PopMenu(); sound = menu_out_sound; } break; case K_MWHEELUP: if( Menu_ItemAtCursor( m )->scrollbar_id ) //sliding a scrollbar moves 3 lines Menu_SlideItem( m, -3, key ); //scrolling up is the equivalent of sliding left, therefore inverted. else if( Menu_ItemAtCursor( m )->type == MTYPE_SPINCONTROL || Menu_ItemAtCursor( m )->type == MTYPE_SLIDER ) //sliding a spincontrol moves 1 item Menu_SlideItem( m, 1, key ); break; case KP_UPARROW: case K_UPARROW: if( m ) { menucommon_t *item = Menu_ItemAtCursor( m ); menucommon_t *scroll = m->items[item->scrollbar_id]; if( item->scrollbar_id && item->type == MTYPE_ACTION && item->localdata[0] == 0 && scroll->curvalue > 0 ) Menu_SlideItem( m, -1, key ); else m->cursor--; Menu_AdjustCursor( m, -1 ); sound = menu_move_sound; } break; case K_TAB: if( m ) { if( Menu_ItemAtCursor( m )->scrollbar_id && Menu_ItemAtCursor( m )->type == MTYPE_ACTION ) { int i = Menu_ItemAtCursor( m )->scrollbar_id; while( i <= MAXMENUITEMS ) { if( !m->items[i]->scrollbar_id ) { m->cursor = i; break; } i++; } } else m->cursor++; Menu_AdjustCursor( m, 1 ); sound = menu_move_sound; } break; case K_MWHEELDOWN: if( Menu_ItemAtCursor( m )->scrollbar_id ) //sliding a scrollbar moves 3 lines Menu_SlideItem( m, 3, key ); //scrolling down is the equivalent of sliding right, therefore inverted. else if( Menu_ItemAtCursor( m )->type == MTYPE_SPINCONTROL || Menu_ItemAtCursor( m )->type == MTYPE_SLIDER ) //sliding a spincontrol moves 1 item Menu_SlideItem( m, -1, key ); break; case KP_DOWNARROW: case K_DOWNARROW: if( m ) { menucommon_t *item = Menu_ItemAtCursor( m ); menucommon_t *scroll = m->items[item->scrollbar_id]; if( item->scrollbar_id && item->type == MTYPE_ACTION && m->items[m->cursor + 1]->scrollbar_id != item->scrollbar_id && scroll->curvalue < scroll->maxvalue ) Menu_SlideItem( m, 1, key ); else m->cursor++; Menu_AdjustCursor( m, 1 ); sound = menu_move_sound; } break; case KP_LEFTARROW: case K_LEFTARROW: if( m ) { Menu_SlideItem( m, -1, key ); sound = menu_move_sound; } break; case KP_RIGHTARROW: case K_RIGHTARROW: if( m ) { Menu_SlideItem( m, 1, key ); sound = menu_move_sound; } break; case K_MOUSE3: case K_JOY1: case K_JOY2: case K_JOY3: case K_JOY4: case K_AUX1: case K_AUX2: case K_AUX3: case K_AUX4: case K_AUX5: case K_AUX6: case K_AUX7: case K_AUX8: case K_AUX9: case K_AUX10: case K_AUX11: case K_AUX12: case K_AUX13: case K_AUX14: case K_AUX15: case K_AUX16: case K_AUX17: case K_AUX18: case K_AUX19: case K_AUX20: case K_AUX21: case K_AUX22: case K_AUX23: case K_AUX24: case K_AUX25: case K_AUX26: case K_AUX27: case K_AUX28: case K_AUX29: case K_AUX30: case K_AUX31: case K_AUX32: case KP_ENTER: case K_ENTER: if( m ) Menu_SelectItem( m ); sound = menu_move_sound; break; case K_MOUSE1DBLCLK: if (m) { menucommon_t *item; Menu_SelectItem( m ); item = Menu_ItemAtCursor( m ); if (item && item->callback_doubleclick) item->callback_doubleclick(item); } sound = menu_move_sound; break; } return sound; }
/* ================= Default_MenuKey ================= */ const char *Default_MenuKey ( menuframework_s *m, int key ) { const char *sound = NULL; menucommon_s *item; if ( m ) { if ( ( item = Menu_ItemAtCursor( m ) ) != 0 ) { if ( item->type == MTYPE_FIELD ) { if ( Field_Key( ( menufield_s * ) item, key ) ) return NULL; } } } switch ( key ) { case K_BACKSPACE: case K_ESCAPE: UI_PopMenu(); return menu_out_sound; case K_KP_UPARROW: case K_UPARROW: if ( m ) { m->cursor--; // Knightmare- added Psychospaz's mouse support UI_RefreshCursorLink(); Menu_AdjustCursor( m, -1 ); sound = menu_move_sound; } break; case K_TAB: case K_KP_DOWNARROW: case K_DOWNARROW: if ( m ) { m->cursor++; // Knightmare- added Psychospaz's mouse support UI_RefreshCursorLink(); Menu_AdjustCursor( m, 1 ); sound = menu_move_sound; } break; case K_KP_LEFTARROW: case K_LEFTARROW: if ( m ) { Menu_SlideItem( m, -1 ); sound = menu_move_sound; } break; case K_KP_RIGHTARROW: case K_RIGHTARROW: if ( m ) { Menu_SlideItem( m, 1 ); sound = menu_move_sound; } break; /*case K_MOUSE1: case K_MOUSE2: case K_MOUSE3: //Knightmare 12/22/2001 case K_MOUSE4: case K_MOUSE5:*/ //end Knightmare case K_JOY1: case K_JOY2: case K_JOY3: case K_JOY4: case K_AUX1: case K_AUX2: case K_AUX3: case K_AUX4: case K_AUX5: case K_AUX6: case K_AUX7: case K_AUX8: case K_AUX9: case K_AUX10: case K_AUX11: case K_AUX12: case K_AUX13: case K_AUX14: case K_AUX15: case K_AUX16: case K_AUX17: case K_AUX18: case K_AUX19: case K_AUX20: case K_AUX21: case K_AUX22: case K_AUX23: case K_AUX24: case K_AUX25: case K_AUX26: case K_AUX27: case K_AUX28: case K_AUX29: case K_AUX30: case K_AUX31: case K_AUX32: case K_SPACE: case K_KP_ENTER: case K_ENTER: if ( m ) { if ( item->type == MTYPE_CHECKBOX ) { Menu_SlideItem( m, 1 ); sound = menu_click; } else { Menu_SelectItem( m ); if ( item->type == MTYPE_ACTION ) sound = menu_move_sound; } } break; } return sound; }
const char *Default_MenuKey( menuframework_s *m, int key ) { const char *sound = NULL; menucommon_s *item = NULL; int index; if ( m ) { if (key == K_MOUSE1) { index = Menu_ClickHit(m, m_mouse[0], m_mouse[1]); if( index != -1 && m_active->cursor != index) { m_active->cursor = index; } } if ( ( item = Menu_ItemAtCursor( m ) ) != 0 ) { if ( item->type == MTYPE_FIELD ) { if ( Field_Key( ( menufield_s * ) item, key ) ) return NULL; } else if ( item->type == MTYPE_LIST ) { if ( List_Key( ( menulist_s * ) item, key ) ) return NULL; } } } // Little hack if( item && (item->type == MTYPE_SLIDER || item->type == MTYPE_SPINCONTROL) ) { if( key == K_MOUSE1 ) { key = K_RIGHTARROW; } else if( key == K_MOUSE2 ) { key = K_LEFTARROW; } } switch ( key ) { case K_MOUSE2: case K_ESCAPE: M_PopMenu(); return menu_out_sound; case K_KP_UPARROW: case K_UPARROW: if ( m ) { m->cursor--; Menu_AdjustCursor( m, -1 ); sound = menu_move_sound; } break; case K_TAB: if ( m ) { m->cursor++; Menu_AdjustCursor( m, 1 ); sound = menu_move_sound; } break; case K_KP_DOWNARROW: case K_DOWNARROW: if ( m ) { m->cursor++; Menu_AdjustCursor( m, 1 ); sound = menu_move_sound; } break; case K_KP_LEFTARROW: case K_LEFTARROW: if ( m ) { Menu_SlideItem( m, -1 ); sound = menu_move_sound; } break; case K_KP_RIGHTARROW: case K_RIGHTARROW: if ( m ) { Menu_SlideItem( m, 1 ); sound = menu_move_sound; } break; case K_MOUSE1: //case K_MOUSE2: case K_MOUSE3: #ifdef JOYSTICK case K_JOY1: case K_JOY2: case K_JOY3: case K_JOY4: case K_AUX1: case K_AUX2: case K_AUX3: case K_AUX4: case K_AUX5: case K_AUX6: case K_AUX7: case K_AUX8: case K_AUX9: case K_AUX10: case K_AUX11: case K_AUX12: case K_AUX13: case K_AUX14: case K_AUX15: case K_AUX16: case K_AUX17: case K_AUX18: case K_AUX19: case K_AUX20: case K_AUX21: case K_AUX22: case K_AUX23: case K_AUX24: case K_AUX25: case K_AUX26: case K_AUX27: case K_AUX28: case K_AUX29: case K_AUX30: case K_AUX31: case K_AUX32: #endif case K_KP_ENTER: case K_ENTER: if ( m ) Menu_SelectItem( m ); sound = menu_move_sound; break; } return sound; }
void Options_VR_SVR_MenuDraw (void) { Menu_DrawBanner( "m_banner_options" ); Menu_AdjustCursor( &s_options_vr_svr_menu, 1 ); Menu_Draw( &s_options_vr_svr_menu ); }