ui_event uihotkeyfilter( a_dialog *ui_dlg_info, ui_event ui_ev ) { char ch, hotkey; VFIELD *fields; /* is the event a key press or alt-key press */ if( iseditchar( ui_ev ) && isalpha( (unsigned char)ui_ev ) ) { ch = tolower( (unsigned char)ui_ev ); } else { ch = uialtchar( ui_ev ); } if( ch ) { hotkey = '\0'; for( fields = ui_dlg_info->fields; fields->typ != FLD_NONE; fields++ ) { switch( fields->typ ) { case FLD_HOT: hotkey = fields->u.hs->flags; break; case FLD_CHECK: hotkey = fields->u.check->hotkey; break; case FLD_RADIO: hotkey = fields->u.radio->hotkey; break; default: hotkey = '\0'; break; } if( hotkey == ch ) { break; } } /* make sure the new field is hilighted */ if( ui_dlg_info->curr != fields && fields->typ != FLD_NONE ) { uidialogsetcurr( ui_dlg_info, fields ); } if( hotkey == ch ) { switch( fields->typ ) { case FLD_HOT: ui_ev = fields->u.hs->event; break; case FLD_CHECK: ui_dlg_info->dirty = true; fields->u.check->val = !fields->u.check->val; print_field( ui_dlg_info->vs, fields, true ); ui_ev = EV_CHECK_BOX_CLICK; break; case FLD_RADIO: do_radio( ui_dlg_info, fields ); ui_ev = EV_CHECK_BOX_CLICK; break; } } } return( ui_ev ); }
static vi_key get_vi_key( EVENT ev ) { if( iseditchar( ev ) ) { return( (vi_key)ev ); } if( ev >= EV_FUNC( 1 ) && ev <= EV_FUNC( 10 ) ) { return( VI_KEY( F1 ) + ev - EV_FUNC( 1 ) ); } if( ev >= EV_SHIFT_FUNC( 1 ) && ev <= EV_SHIFT_FUNC( 10 ) ) { return( VI_KEY( SHIFT_F1 ) + ev - EV_SHIFT_FUNC( 1 ) ); } if( ev >= EV_CTRL_FUNC( 1 ) && ev <= EV_CTRL_FUNC( 10 ) ) { return( VI_KEY( CTRL_F1 ) + ev - EV_CTRL_FUNC( 1 ) ); } if( ev >= EV_ALT_FUNC( 1 ) && ev <= EV_ALT_FUNC( 10 ) ) { return( VI_KEY( ALT_F1 ) + ev - EV_FUNC( 1 ) ); } return( VI_KEY( DUMMY ) ); }