Пример #1
0
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 );
}
Пример #2
0
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 ) );
}