Beispiel #1
0
bool WSetEditWindowFlags( HWND dlg, uint_16 flags )
{
    bool ok, is_virt;

    ok = (dlg != (HWND)NULL);

    if( ok ) {
        is_virt = ((flags & ACCEL_VIRTKEY) != 0);
        WSetVirtKey( dlg, is_virt );
        if( is_virt ) {
            if( flags & ACCEL_CONTROL ) {
                CheckDlgButton( dlg, IDM_ACCEDCNTL, BST_CHECKED );
            } else {
                CheckDlgButton( dlg, IDM_ACCEDCNTL, BST_UNCHECKED );
            }

            if( flags & ACCEL_SHIFT ) {
                CheckDlgButton( dlg, IDM_ACCEDSHFT, BST_CHECKED );
            } else {
                CheckDlgButton( dlg, IDM_ACCEDSHFT, BST_UNCHECKED );
            }
        }

        if( flags & ACCEL_ALT ) {
            CheckDlgButton( dlg, IDM_ACCEDALT, BST_CHECKED );
        } else {
            CheckDlgButton( dlg, IDM_ACCEDALT, BST_UNCHECKED );
        }

        if( flags & ACCEL_NOINVERT ) {
            CheckDlgButton( dlg, IDM_ACCEDFLASH, BST_UNCHECKED );
        } else {
            CheckDlgButton( dlg, IDM_ACCEDFLASH, BST_CHECKED );
        }
    }

    return( ok );
}
Beispiel #2
0
WINEXPORT BOOL CALLBACK WAcccelEditProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
    WAccelEditInfo      *einfo;
    HWND                win;
    RECT                r;
    POINT               p;
    BOOL                ret;
    WORD                wp;
    WORD                cmd;

    ret = FALSE;
    einfo = (WAccelEditInfo *)GET_DLGDATA( hDlg );

    switch( message ) {
    case WM_INITDIALOG:
        einfo = (WAccelEditInfo *)lParam;
        einfo->edit_dlg = hDlg;
        SET_DLGDATA( hDlg, einfo );
        WRAddSymbolsToComboBox( einfo->info->symbol_table, hDlg,
                                IDM_ACCEDCMDID, WR_HASHENTRY_ALL );
        ret = TRUE;
        break;

    case WM_SYSCOLORCHANGE:
        WCtl3dColorChange();
        break;

#if 0
#ifdef __NT__
    case WM_CTLCOLORBTN:
    case WM_CTLCOLORDLG:
    case WM_CTLCOLOREDIT:
    case WM_CTLCOLORLISTBOX:
    case WM_CTLCOLORMSGBOX:
    case WM_CTLCOLORSCROLLBAR:
    case WM_CTLCOLORSTATIC:
#else
    case WM_CTLCOLOR:
#endif
        return( WCtl3dCtlColorEx( message, wParam, lParam ) );
#endif

    case WM_LBUTTONDBLCLK:
    case WM_RBUTTONDBLCLK:
    case WM_RBUTTONUP:
        MAKE_POINT( p, lParam );
        win = GetDlgItem( hDlg, IDM_ACCEDRNAME );
        GetClientRect( win, &r );
        MapWindowPoints( win, hDlg, (POINT *)&r, 2 );
        if( PtInRect( &r, p ) ) {
            WHandleRename( einfo );
        }
        ret = TRUE;
        break;

#if 0
    case WM_PARENTNOTIFY:
        cmd = GET_WM_PARENTNOTIFY_EVENT( wParam, lParam );
        switch( cmd ) {
        case WM_LBUTTONDOWN:
        case WM_RBUTTONDOWN:
            MAKE_POINT( p, lParam );
            win = GetDlgItem( hDlg, IDM_ACCEDLIST );
            GetWindowRect( win, &r );
            MapWindowPoints( HWND_DESKTOP, hDlg, (POINT *)&r, 2 );
            if( PtInRect( &r, p ) ) {
                WHandleSelChange( einfo );
            }
            break;
        }
        ret = TRUE;
        break;
#endif

    case WM_COMMAND:
        wp = LOWORD( wParam );
        cmd = GET_WM_COMMAND_CMD( wParam, lParam );
        switch( wp ) {
        case IDM_ACCEDINSERT:
            WInsertAccelEntry( einfo );
            break;
        case IDM_ACCEDCHANGE:
            WHandleChange( einfo );
            break;
        case IDM_ACCEDRESET:
            WDoHandleSelChange( einfo, FALSE, TRUE );
            break;
        case IDM_ACCEDSETACC:
            if( einfo->tbl != NULL && einfo->tbl->num != 0 ) {
                WHandleSelChange( einfo );
            } else {
                WInsertAccelEntry( einfo );
            }
            break;
#if 0
        case IDM_ACCEDCMDID:
            if( cmd == CBN_SELCHANGE ) {
                einfo->combo_change = TRUE;
                WHandleSelChange( einfo );
                einfo->combo_change = FALSE;
            }
            break;
#endif
        case IDM_ACCEDLIST:
            if( cmd == LBN_SELCHANGE ) {
                WHandleSelChange( einfo );
            }
            break;
        case IDM_ACCEDVIRT:
        case IDM_ACCEDASCII:
            if( cmd == BN_CLICKED ) {
                WSetVirtKey( hDlg, wp == IDM_ACCEDVIRT );
            }
            break;
        }
        break;
    }

    return( ret );
}
Beispiel #3
0
void WSetKey( WAccelEditInfo *einfo, BYTE scan_code )
{
    bool        cntl;
    bool        shift;
    bool        alt;
    char        *str;
    char        scan_key;
    uint_16     key;
    uint_16     skey;
    bool        is_virt;
    BYTE        kbstate[256];
    int         ta_ret;
#ifdef __NT__
    WORD        ta_key;
#else
    DWORD       ta_key;
#endif

    if( einfo == NULL ) {
        return;
    }

    is_virt = TRUE;
    key = einfo->key_info.key;
    skey = WMapShiftedKeyToKey( key );
    GetKeyboardState( kbstate );
    cntl = (kbstate[VK_CONTROL] & 0x0080) != 0;
    shift = (kbstate[VK_SHIFT] & 0x0080) != 0;
    alt = (kbstate[VK_MENU] & 0x0080) != 0;

    str = WGetVKeyFromID( key );

    if( str == NULL ) {
        // I am assumming that they key must be alphanumeric
        // as WGetVKeyFromID( key ) would filter out all others
        if( isalpha( key ) ) {
            if( alt ) {
                str = WGetASCIIVKText( key );
            } else {
                if( cntl ) {
                    key = toupper( key ) - '@';
                } else {
                    if( !shift ) {
                        key = tolower( key );
                    }
                }
                str = WGetASCIIKeyText( key );
                is_virt = FALSE;
            }
        } else if( isdigit( key ) ) {
            if( alt || cntl ) {
                str = WGetASCIIVKText( key );
            } else {
                if( shift ) {
                    key = WMapKeyToShiftedKey( key );
                }
                str = WGetASCIIKeyText( key );
                is_virt = FALSE;
            }
        } else if( isdigit( skey ) ) {
            str = WGetASCIIVKText( skey );
        // The remaining keys are the ones where we did not get a
        // virtual key we could translate, an alpha-numeric key,
        // a shifted 0-9 ( ie !@#$%^&*() ).
        // The ToAscii function handles everything except the following
        // keys where cntl is pressed. These keys are `-=[]\;',./
        // So, I throw up my hands in defeat and add a special case
        } else if( cntl && (scan_key = WMapScanCodeToKey( scan_code )) != 0 ) {
            str = WGetASCIIKeyText( scan_key );
        } else {
            ta_ret = ToAscii( key, scan_code, kbstate, &ta_key, 0 );
            if( ta_ret ) {
                if( shift ) {
                    ta_key = WMapShiftedKeyToKey( ta_key );
                }
                str = WGetASCIIKeyText( ta_key );
            }
        }
    }

    WSetEditWithStr( GetDlgItem( einfo->edit_dlg, IDM_ACCEDKEY ), str );
    WSetVirtKey( einfo->edit_dlg, is_virt );
    if( is_virt ) {
        CheckDlgButton( einfo->edit_dlg, IDM_ACCEDALT, ( alt ) ? BST_CHECKED : BST_UNCHECKED );
        CheckDlgButton( einfo->edit_dlg, IDM_ACCEDCNTL, ( cntl ) ? BST_CHECKED : BST_UNCHECKED );
        CheckDlgButton( einfo->edit_dlg, IDM_ACCEDSHFT, ( shift ) ? BST_CHECKED : BST_UNCHECKED );
    }
}