Пример #1
0
static EVENT cd_sizeevent( void )
/*******************************/
{
    SAREA       area;
    unsigned    state;
    unsigned    arm;

    if( !StatePending )
        return( EV_NO_EVENT );
    StatePending = 0;
    state = console_state( UIConCtrl, UIConsole, 0,
                (_CON_EVENT_ACTIVE|_CON_EVENT_INACTIVE|_CON_EVENT_SIZE) );
    arm = 0;
    if( state & _CON_EVENT_INACTIVE ) {
        clear_shift();
        arm = _CON_EVENT_ACTIVE;
    } else if( state & _CON_EVENT_ACTIVE ) {
        arm = _CON_EVENT_INACTIVE;
    }
    console_arm( UIConCtrl, UIConsole, 0, arm | _CON_EVENT_SIZE );
    if( !(state & _CON_EVENT_SIZE) )
        return( EV_NO_EVENT );
    if( !uiinlists( EV_BACKGROUND_RESIZE ) )
        return( EV_NO_EVENT );
    if( !setupscrnbuff() )
        return( EV_NO_EVENT );
    closebackground();
    openbackground();
    area.row = 0;
    area.col = 0;
    area.height = UIData->height;
    area.width = UIData->width;
    uidirty( area );
    return( EV_BACKGROUND_RESIZE );
}
Пример #2
0
ui_event uidialog( a_dialog *ui_dlg_info )
{
    static ui_event dialog_events[] = {
        'a',            'z',
        'A',            'Z',
        EV_ALT_Q,       EV_ALT_M,
        __rend__,
        EV_ALT_CURSOR_DOWN,
        EV_CURSOR_UP,
        EV_CURSOR_DOWN,
        EV_CURSOR_LEFT,
        EV_CURSOR_RIGHT,
        EV_TAB_FORWARD,
        EV_TAB_BACKWARD,
        EV_MOUSE_PRESS,
        EV_MOUSE_RELEASE,
        EV_MOUSE_DRAG,
        EV_MOUSE_REPEAT,
        EV_MOUSE_DCLICK,
        EV_ENTER,
        ' ',
        __end__
    };
    ui_event    ui_ev;
    VFIELD      *field;

    ui_ev = EV_NO_EVENT;
    enter_field( ui_dlg_info, ui_dlg_info->curr );

    while( ui_ev == EV_NO_EVENT || !uiinlists( ui_ev ) ) {
        field = ui_dlg_info->curr;
        if( field != NULL ) {
            switch( field->typ ) {
            case FLD_EDIT:
            case FLD_INVISIBLE_EDIT:
                uieditpushlist();
                break;
            case FLD_PULLDOWN:
                uiboxpushlist( );
                break;
            case FLD_COMBOBOX:
                uiboxpushlist( );
                uieditpushlist();
                break;
            case FLD_LISTBOX:
            case FLD_EDIT_MLE:
                uiboxpushlist();
                break;
            }
        }
        uipushlist( dialog_events );
        ui_ev = uidialogevent( ui_dlg_info->vs );
        ui_ev = uidialogcallback( ui_dlg_info, ui_ev );
        uipoplist( /* dialog_events */ );

        if( field != NULL ) {
            switch( field->typ ) {
            case FLD_EDIT:
            case FLD_INVISIBLE_EDIT:
                uieditpoplist();
                break;
            case FLD_PULLDOWN:
                uiboxpoplist();
                break;
            case FLD_COMBOBOX:
                uiboxpoplist();
                uieditpoplist();
                break;
            case FLD_LISTBOX:
            case FLD_EDIT_MLE:
                uiboxpoplist();
                break;
            }
        }
        ui_ev = uiprocessdialogevent( ui_ev, ui_dlg_info );
    }
    /* This code will make sure to exit the current fields before returning
     * a default hot spot event. This is for consistency with windows.
     */
    if( uiisdefaulthotspot( ui_dlg_info->fields, ui_ev ) ) {
        if( exit_field( ui_dlg_info, ui_dlg_info->curr ) ) {
            ui_dlg_info->dirty = true;
        }
    }
    ui_dlg_info->field = ui_dlg_info->curr - ui_dlg_info->fields;
    return( ui_ev );
}