OSDN Git Service

[UI][Qt] Not liking config, using_flags directly.
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / qt_input.cpp
index 76d0f2f..1237cb2 100644 (file)
 
 #include <Qt>
 #include <QKeyEvent>
-#include "emu.h"
-#include "vm/vm.h"
+//#include "emu.h"
+//#include "vm/vm.h"
 #include "config.h"
-
-//#include "fifo.h"
-//#include "fileio.h"
+#include "fileio.h"
 
 #include "qt_input.h"
 #include "qt_gldraw.h"
 #include "qt_main.h"
-#include "menuclasses.h"
+//#include "menuclasses.h"
 #include "agar_logger.h"
+#include "menu_flags.h"
 
 #ifndef Ulong
 #define Ulong unsigned long
 
 #define KEY_KEEP_FRAMES 3
 
-static int mouse_x = 0;
-static int mouse_y = 0;
-static int mouse_relx = 0;
-static int mouse_rely = 0;
-static uint32 mouse_buttons = 0;
-   
-struct NativeScanCode {
-       uint32 vk;
-       uint32 scan;
-};
-struct NativeVirtualKeyCode {
-       uint32 vk;
-       uint32 key;
-};
+//extern USING_FLAGS *using_flags;
 
-struct NativeScanCode convTable_QTScan106[] = {
-       // Line 0
-       {VK_ESCAPE,  9},
-       {VK_F1,  67},
-       {VK_F2,  68},
-       {VK_F3,  69},
-       {VK_F4,  70},
-       {VK_F5,  71},
-       {VK_F6,  72},
-       {VK_F7,  73},
-       {VK_F8,  74},
-       {VK_F9,  75},
-       {VK_F10, 76},
-       {VK_F11, 95},
-       {VK_F12, 96},
-       // Power, Sleep, Wake is not implemented, they are'nt safety.
-       // Line 1
-       {VK_KANJI, 49}, // Hankaku/Zenkaku
-       {'0', 19},
-       {'1', 10},
-       {'2', 11},
-       {'3', 12},
-       {'4', 13},
-       {'5', 14},
-       {'6', 15},
-       {'7', 16},
-       {'8', 17},
-       {'9', 18},
-       {VK_OEM_MINUS, 20}, // - =
-       {VK_OEM_7, 21}, // ^~
-       {VK_OEM_5, 132}, // \|
-       {VK_BACK, 22}, // Backspace
-       // Line 2
-       {VK_TAB, 23},
-       {'Q', 24},
-       {'W', 25},
-       {'E', 26},
-       {'R', 27},
-       {'T', 28},
-       {'Y', 29},
-       {'U', 30},
-       {'I', 31},
-       {'O', 32},
-       {'P', 33},
-       {VK_OEM_3, 34}, // @
-       {VK_RETURN, 36}, // Enter (Full key)
-       {VK_OEM_4, 35}, // [
-       // Line 3
-       {VK_OEM_ATTN, 66}, // CAPS Lock
-       {'A', 38},
-       {'S', 39},
-       {'D', 40},
-       {'F', 41},
-       {'G', 42},
-       {'H', 43},
-       {'J', 44},
-       {'K', 45},
-       {'L', 46},
-       {VK_OEM_PLUS, 47}, // ;
-       {VK_OEM_1, 48}, // :
-       {VK_OEM_6, 51}, // ]
-       // Line 3
-       {VK_LSHIFT, 50}, // LShift
-       {'Z', 52},
-       {'X', 53},
-       {'C', 54},
-       {'V', 55},
-       {'B', 56},
-       {'N', 57},
-       {'M', 58},
-       {VK_OEM_COMMA, 59}, // ,
-       {VK_OEM_PERIOD, 60}, // .
-       {VK_OEM_2, 61}, // /(Slash)
-       {VK_OEM_102, 97}, //\_
-       {VK_RSHIFT, 62},
-       // Line 4
-       {VK_LCONTROL, 37},
-       {VK_LWIN, 133},
-       {VK_LMENU, 64},
-       {VK_NONCONVERT, 102}, // Muhenkan
-       {VK_SPACE, 65},
-       {VK_CONVERT, 100}, // Henkan
-       {VK_OEM_COPY, 101}, // Katakana_Hiragana
-       {VK_RMENU, 108},
-       {VK_RWIN,  134},
-       {VK_APPS, 135},
-       {VK_RCONTROL, 105},
-       // Cursors
-       {VK_UP, 111},
-       {VK_DOWN, 116},
-       {VK_LEFT, 113},
-       {VK_RIGHT,114},
-       // 
-       //     {VK_PRINT, },
-       {VK_SCROLL, 78},
-       {VK_PAUSE, 127},
-       {VK_INSERT, 118},
-       {VK_HOME, 110},
-       {VK_NEXT, 112},
-       {VK_DELETE, 119},
-       {VK_END, 115},
-       {VK_PRIOR, 117},
-       // TenKey
-       {VK_NUMPAD0, 90},
-       {VK_NUMPAD1, 87},
-       {VK_NUMPAD2, 88},
-       {VK_NUMPAD3, 89},
-       {VK_NUMPAD4, 83},
-       {VK_NUMPAD5, 84},
-       {VK_NUMPAD6, 85},
-       {VK_NUMPAD7, 79},
-       {VK_NUMPAD8, 80},
-       {VK_NUMPAD9, 81},
-       //
-       {VK_DECIMAL, 77}, // NumLock     
-       {VK_DIVIDE, 106},
-       {VK_MULTIPLY, 63},
-       {VK_SUBTRACT, 82},
-       {VK_ADD, 86},
-       {VK_RETURN, 104},  // Enter(ten Key)
-       {0xffffffff, 0xffffffff}
-};
-#if defined(Q_OS_WIN32)
-#else // Linux or Unix
-const struct NativeVirtualKeyCode convTable_QTKey[] = {
+#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN)
+const struct NativeScanCode convTable_QTScan106[] = {
        // Line 0
-       {VK_ESCAPE,  0xff1b},
-       {VK_F1,  0xffbe},
-       {VK_F2,  0xffbf},
-       {VK_F3,  0xffc0},
-       {VK_F4,  0xffc1},
-       {VK_F5,  0xffc2},
-       {VK_F6,  0xffc3},
-       {VK_F7,  0xffc4},
-       {VK_F8,  0xffc5},
-       {VK_F9,  0xffc6},
-       {VK_F10, 0xffc7},
-       {VK_F11, 0xffc8},
-       {VK_F12, 0xffc9},
+       {VK_ESCAPE,  0x01},
+       {VK_F1,  0x3b},
+       {VK_F2,  0x3c},
+       {VK_F3,  0x3d},
+       {VK_F4,  0x3e},
+       {VK_F5,  0x3f},
+       {VK_F6,  0x40},
+       {VK_F7,  0x41},
+       {VK_F8,  0x42},
+       {VK_F9,  0x43},
+       {VK_F10, 0x44},
+       {VK_F11, 0x57},
+       {VK_F12, 0x58},
        // Power, Sleep, Wake is not implemented, they are'nt safety.
        // Line 1
-       {VK_KANJI, 0xff2a}, // Hankaku/Zenkaku
-       {VK_OEM_MINUS, 0x002d}, // -=
-       {VK_OEM_MINUS, 0x003d},
-       {VK_OEM_7, 0x005e}, // ^~
-       {VK_OEM_7, 0x007e},
-       {VK_OEM_5, 0x005c}, // \|
-       {VK_OEM_5, 0x007c},
-       {VK_BACK, 0xff08}, // Backspace
+       {VK_KANJI, 0x29}, // Hankaku/Zenkaku
+       {'1', 0x02},
+       {'2', 0x03},
+       {'3', 0x04},
+       {'4', 0x05},
+       {'5', 0x06},
+       {'6', 0x07},
+       {'7', 0x08},
+       {'8', 0x09},
+       {'9', 0x0a},
+       {'0', 0x0b},
+       {VK_OEM_MINUS, 0x0c}, // - =
+       {VK_OEM_7, 0x0d}, // ^~
+       {VK_OEM_5, 0x7d}, // \|
+       {VK_BACK, 0x0e}, // Backspace
        // Line 2
-       {VK_TAB, 0xff09},
-       {VK_RETURN, 0xff0d}, // Enter (Full key)
-       {VK_OEM_3, 0x0040}, // @
-       {VK_OEM_3, 0x0060}, // @
-
-       {VK_OEM_4, 0x005b}, // [
-       {VK_OEM_4, 0x007b}, // [
+       {VK_TAB, 0x0f},
+       {'Q', 0x10},
+       {'W', 0x11},
+       {'E', 0x12},
+       {'R', 0x13},
+       {'T', 0x14},
+       {'Y', 0x15},
+       {'U', 0x16},
+       {'I', 0x17},
+       {'O', 0x18},
+       {'P', 0x19},
+       {VK_OEM_3, 0x1a}, // @
+       {VK_OEM_4, 0x1b}, // [
+       {VK_RETURN, 0x1c}, // Enter (Full key)
        // Line 3
-       {VK_OEM_ATTN, 0xff30}, // CAPS Lock
-       {VK_OEM_PLUS, 0x002b}, // ;
-       {VK_OEM_PLUS, 0x003b}, // ;
-       {VK_OEM_1, 0x002a}, // :
-       {VK_OEM_1, 0x003a}, // :
-       {VK_OEM_6, 0x005d}, // ]
-       {VK_OEM_6, 0x007d}, // ]
+       {VK_OEM_ATTN, 0x3a}, // CAPS Lock
+       {'A', 0x1e},
+       {'S', 0x1f},
+       {'D', 0x20},
+       {'F', 0x21},
+       {'G', 0x22},
+       {'H', 0x23},
+       {'J', 0x24},
+       {'K', 0x25},
+       {'L', 0x26},
+       {VK_OEM_PLUS, 0x27}, // ;
+       {VK_OEM_1, 0x28}, // :
+       {VK_OEM_6, 0x2b}, // ]
        // Line 3
-       {VK_LSHIFT, 0xffe1}, // LShift
-       {VK_OEM_COMMA, 0x2c}, // ,
-       {VK_OEM_COMMA, 0x3c}, // ,
-       {VK_OEM_PERIOD, 0x2e}, // .
-       {VK_OEM_PERIOD, 0x3e}, // .
-       {VK_OEM_2, 0x2f}, // /(Slash)
-       {VK_OEM_2, 0x3f}, // /(Slash)
-       {VK_OEM_102, 0x5f}, //\_
-       //{0xe2, 0x5c}, //\_
-       {VK_RSHIFT, 0xffe2},
+       {VK_LSHIFT, 0x2a}, // LShift
+       {'Z', 0x2c},
+       {'X', 0x2d},
+       {'C', 0x2e},
+       {'V', 0x2f},
+       {'B', 0x30},
+       {'N', 0x31},
+       {'M', 0x32},
+       {VK_OEM_COMMA, 0x33}, // ,
+       {VK_OEM_PERIOD, 0x34}, // .
+       {VK_OEM_2, 0x35}, // /(Slash)
+       {VK_OEM_102, 0x73}, //\_
+       {VK_RSHIFT, 0x36},
        // Line 4
-       {VK_LCONTROL, 0xffe3},
-       {VK_LWIN, 0xffeb},
-       {VK_LMENU, 0xffe9},
-       {VK_NONCONVERT, 0xff22}, // Muhenkan
-       {VK_SPACE, 0x0020},
-       //{VK_OEM_AUTO, 0xff23}, // Henkan
-       {VK_CONVERT, 0xff23}, // Henkan
-       {VK_OEM_COPY, 0xff27}, // Katakana_Hiragana
-       {VK_RMENU, 0xffea},
-       {VK_RWIN,  0xffec},
-       {VK_APPS, 0xff67},
-       {VK_RCONTROL, 0xffe4},
+       {VK_LCONTROL, 0x1d},
+       {VK_LWIN, 0x015b},
+       {VK_LMENU, 0x38},
+       {VK_NONCONVERT, 0x68}, // Muhenkan
+       {VK_SPACE, 0x39},
+       {VK_CONVERT, 0x66}, // Henkan
+       {VK_OEM_COPY, 0x70}, // Katakana_Hiragana
+       {VK_RMENU, 0x0138},
+       {VK_RWIN,  0x015c},
+       {VK_APPS, 0x015d},
+       {VK_RCONTROL, 0x011d},
        // Cursors
-       {VK_UP, 0xff52},
-       {VK_DOWN, 0xff54},
-       {VK_LEFT, 0xff51},
-       {VK_RIGHT,0xff53},
+       {VK_UP, 0x0148},
+       {VK_DOWN, 0x0150},
+       {VK_LEFT, 0x014b},
+       {VK_RIGHT,0x014d},
        // 
        //     {VK_PRINT, },
-       {VK_SCROLL, 0xff14},
-       {VK_PAUSE, 0xff13},
-       {VK_INSERT, 0xff63},
-       {VK_HOME, 0xff50},
-       {VK_NEXT, 0xff55},
-       {VK_DELETE, 0xffff},
-       {VK_END, 0xff57},
-       {VK_PRIOR, 0xff56},
+       {VK_SCROLL, 0x46},
+       {VK_PAUSE, 0x45},
+       {VK_INSERT, 0x0152},
+       {VK_HOME, 0x0147},
+       {VK_NEXT, 0x0149},
+       {VK_DELETE, 0x0153},
+       {VK_END, 0x014f},
+       {VK_PRIOR, 0x0151},
        // TenKey
-       {VK_NUMPAD0, 0xffb0},
-       {VK_NUMPAD1, 0xffb1},
-       {VK_NUMPAD2, 0xffb2},
-       {VK_NUMPAD3, 0xffb3},
-       {VK_NUMPAD4, 0xffb4},
-       {VK_NUMPAD5, 0xffb5},
-       {VK_NUMPAD6, 0xffb6},
-       {VK_NUMPAD7, 0xffb7},
-       {VK_NUMPAD8, 0xffb8},
-       {VK_NUMPAD9, 0xffb9},
+       {VK_NUMPAD0, 0x52},
+       {VK_NUMPAD1, 0x4f},
+       {VK_NUMPAD2, 0x50},
+       {VK_NUMPAD3, 0x51},
+       {VK_NUMPAD4, 0x4b},
+       {VK_NUMPAD5, 0x4c},
+       {VK_NUMPAD6, 0x4d},
+       {VK_NUMPAD7, 0x47},
+       {VK_NUMPAD8, 0x48},
+       {VK_NUMPAD9, 0x49},
        //
-       {VK_DECIMAL, 0xff7f}, // NumLock     
-       {VK_DIVIDE, 0xffaf},
-       {VK_MULTIPLY, 0xffaa},
-       {VK_SUBTRACT, 0xffad},
-       {VK_ADD, 0xffab},
-       {VK_RETURN, 0xff8d},  // Enter(ten Key)
-       {VK_DECIMAL, 0xffae},  // Period(ten Key)
+       {VK_DECIMAL, 0x53}, // NumLock     
+       {VK_DIVIDE, 0x0135},
+       {VK_MULTIPLY, 0x37},
+       {VK_SUBTRACT, 0x4a},
+       {VK_ADD, 0x4e},
+       {VK_RETURN, 0x011c},  // Enter(ten Key)
        {0xffffffff, 0xffffffff}
 };
 #endif
 
-#if defined(Q_OS_WIN32)
-uint32_t GLDrawClass::getNativeKey2VK(uint32_t data)
+uint32_t GLDrawClass::get106Scancode2VK(uint32_t data)
 {
-       uint32_t vk = data;
-#if defined(ENABLE_SWAP_KANJI_PAUSE)
-       if(config.swap_kanji_pause) {
+       uint32_t val = 0;
+       uint32_t vk;
+       int i = 0;
+       vk = key_table->get_vk_from_scan(data);
+       if(using_flags->get_config_ptr()->swap_kanji_pause) {
                if(vk == VK_KANJI) {
                        vk = VK_PAUSE;
                } else if(vk == VK_PAUSE) {
                        vk = VK_KANJI;
                }
        }
-#endif
+       if(!using_flags->is_notify_key_down_lr_shift()) {
+               if((vk == VK_LSHIFT) || (vk == VK_RSHIFT)) vk = VK_SHIFT;
+               if((vk == VK_LMENU) || (vk == VK_RMENU)) vk = VK_MENU;
+       }
+       if((vk == VK_LCONTROL) || (vk == VK_RCONTROL)) vk = VK_CONTROL;
        return vk;
 }
-#else
-uint32_t GLDrawClass::getNativeKey2VK(uint32_t data)
-{
-       uint32 val = 0;
-       uint32 vk;
-       int i = 0;
 
-       if(data < 0x100) {
-               if((data >= 'a') && (data <= 'z')) {
-                       return data & 0x5f;
-               }
-               if((data >= 'A') && (data <= 'Z')) {
-                       return data;
-               }
-               if((data >= '0') && (data <= '9')) {
-                       return data;
-               }
-               if((data > 0x20) && (data <= 0x29)) {
-                       return data | 0x10;
-               }
-       }
-       while(convTable_QTKey[i].vk != 0xffffffff) {
-               val = convTable_QTKey[i].key;
-               if(val == data) break;
-               i++;
-       }
-       vk = convTable_QTKey[i].vk;
+void GLDrawClass::initKeyCode(void)
+{
+       int i;
+       key_table = new CSP_KeyTables(this, default_key_table_106_QtScan);
 
-       if(vk == 0xffffffff) return 0;
-#if defined(ENABLE_SWAP_KANJI_PAUSE)
-       if(config.swap_kanji_pause) {
-               if(vk == VK_KANJI) {
-                       vk = VK_PAUSE;
-               } else if(vk == VK_PAUSE) {
-                       vk = VK_KANJI;
+       {
+               // Replace only ScanCode
+               FILEIO *fio = new FILEIO();
+               std::string app_path2;
+               // Read scan table.
+               app_path2 = cpp_confdir + "scancode.cfg";
+               if(fio->Fopen(app_path2.c_str(), FILEIO_READ_ASCII)) {
+                       char buf[512];
+                       memset(buf, 0x00, sizeof(buf));
+                       while(fio->Fgets(buf, 512) != NULL) {
+                               QString nstr;
+                               QStringList nlist;
+                               bool ok1, ok2;
+                               nstr = QString::fromUtf8(buf);
+                               nlist = nstr.split(",", QString::SkipEmptyParts);
+                               if(nlist.count() < 2) continue;
+                               uint32_t vk   = nlist.at(0).toULong(&ok1, 16);
+                               uint32_t scan = nlist.at(1).toULong(&ok2, 16);
+                               if((vk == 0) || (vk > 255)) continue;
+                               if(ok1 && ok2) {
+                                       key_table->do_set_scan_code(vk, scan);
+                               }
+                       }
+                       fio->Fclose();
                }
+               delete fio;
        }
-#endif    
-#if  !defined(_FM8) && !defined(_FM7) && !defined(_FMNEW7) && !defined(_FM77_VARIANTS) && !defined(_FM77AV_VARIANTS) 
-       if((vk == VK_LSHIFT) || (vk == VK_RSHIFT)) vk = VK_SHIFT;
-       if((vk == VK_LMENU) || (vk == VK_RMENU)) vk = VK_MENU;
-#endif   
-       if((vk == VK_LCONTROL) || (vk == VK_RCONTROL)) vk = VK_CONTROL;
-       return vk;
 }
-#endif
 
-uint32_t GLDrawClass::get106Scancode2VK(uint32_t data)
+void GLDrawClass::releaseKeyCode(void)
 {
-       uint32 val = 0;
-       uint32 vk;
-       int i = 0;
-       while(convTable_QTScan106[i].vk != 0xffffffff) {
-               val = convTable_QTScan106[i].scan;
-               if(val == data) break;
-               i++;
-       }
-       vk = convTable_QTScan106[i].vk;
-       //printf("SCAN=%02x VK=%02x\n", val, vk);
-       if(vk == 0xffffffff) return 0;
-#if defined(ENABLE_SWAP_KANJI_PAUSE)
-       if(config.swap_kanji_pause) {
-               if(vk == VK_KANJI) {
-                       vk = VK_PAUSE;
-               } else if(vk == VK_PAUSE) {
-                       vk = VK_KANJI;
+       // Replace only ScanCode
+       int i;
+       FILEIO *fio = new FILEIO();
+       std::string app_path2;
+       uint32_t scan;
+       // Read scan table.
+
+       app_path2 = cpp_confdir + "scancode.cfg";
+       if(fio->Fopen(app_path2.c_str(), FILEIO_WRITE_ASCII)) {
+               for(i = 0; i < 256; i++) {
+                       scan = key_table->get_scan_from_vk((uint32_t)i);
+                       if(scan >= 0xffffffff)  continue;
+                       fio->Fprintf("%02x,%08x\n", i, scan);
                }
+               fio->Fclose();
+       }
+       if(key_table != NULL) {
+               delete key_table;
+               key_table = NULL;
        }
-#endif    
-#if  !defined(_FM8) && !defined(_FM7) && !defined(_FMNEW7) && !defined(_FM77_VARIANTS) && !defined(_FM77AV_VARIANTS) 
-       if((vk == VK_LSHIFT) || (vk == VK_RSHIFT)) vk = VK_SHIFT;
-       if((vk == VK_LMENU) || (vk == VK_RMENU)) vk = VK_MENU;
-#endif   
-       if((vk == VK_LCONTROL) || (vk == VK_RCONTROL)) vk = VK_CONTROL;
-       return vk;
 }
 
 void GLDrawClass::keyReleaseEvent(QKeyEvent *event)
 {
        int key = event->key();
-       uint32 mod = event->modifiers();
-       uint32 scan;
-       uint32 vk;
+       uint32_t mod = event->modifiers();
+       uint32_t scan;
+       uint32_t vk;
        if(event->isAutoRepeat()) return;
-       //scan = event->nativeVirtualKey();
-       //vk = getNativeKey2VK(scan);
        scan = event->nativeScanCode();
        vk = get106Scancode2VK(scan);
-
-       //printf("Key: UP: VK=%d SCAN=%04x MOD=%08x\n", vk, scan, mod);
-       emu->LockVM();
-       emu->key_mod(mod);
-       // Note: Qt4 with 106KEY, event->modifier() don't get Shift key as KEYMOD.
-       // At least, linux.
-       if(vk != 0) {
-               emu->key_up(vk);
+#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN)  
+       if(using_flags->is_notify_key_down_lr_shift()) {
+               if(vk == VK_SHIFT) {
+                       if((GetAsyncKeyState(VK_LSHIFT) & 0x8000) == 0) vk = VK_LSHIFT;
+                       if((GetAsyncKeyState(VK_RSHIFT) & 0x8000) == 0) vk = VK_RSHIFT;
+               }
+               if(vk == VK_MENU) {
+                       if(GetAsyncKeyState(VK_LMENU) & 0x8000) vk = VK_LMENU;
+                       if(GetAsyncKeyState(VK_RMENU) & 0x8000) vk = VK_RMENU;
+               }
        }
-       emu->UnlockVM();
+#endif
+       //printf("Key: UP: VK=%d SCAN=%04x MOD=%08x\n", vk, scan, mod);
+       emit sig_key_up(vk, mod);
 }
 
 void GLDrawClass::keyPressEvent(QKeyEvent *event)
 {
        int key = event->key();
-       uint32 mod = event->modifiers();;
-       uint32 scan;
-       uint32 vk;
+       uint32_t mod = event->modifiers();;
+       uint32_t scan;
+       uint32_t vk;
    
        if(event->isAutoRepeat()) return;
-       //scan = event->nativeVirtualKey();
-       //vk = getNativeKey2VK(scan);
        scan = event->nativeScanCode();
        vk = get106Scancode2VK(scan);
 
-       if(vk == VK_APPS) { // Special key : capture/uncapture mouse.
-               emit sig_toggle_mouse();
-               return;
+       if(using_flags->is_use_mouse()) {
+               if(vk == VK_APPS) { // Special key : capture/uncapture mouse.
+                       emit sig_toggle_mouse();
+                       return;
+               }
+       }
+#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN)  
+       if(using_flags->is_notify_key_down_lr_shift()) {
+               if(vk == VK_SHIFT) {
+                       if(GetAsyncKeyState(VK_LSHIFT) & 0x8000) vk = VK_LSHIFT;
+                       if(GetAsyncKeyState(VK_RSHIFT) & 0x8000) vk = VK_RSHIFT;
+               }
+               if(vk == VK_MENU) {
+                       if(GetAsyncKeyState(VK_LMENU) & 0x8000) vk = VK_LMENU;
+                       if(GetAsyncKeyState(VK_RMENU) & 0x8000) vk = VK_RMENU;
+               }
        }
+#endif
    
        //printf("Key: DOWN: VK=%d SCAN=%04x MOD=%08x\n", vk, scan, mod);
-       emu->LockVM();
-       emu->key_mod(mod);
-       if(vk != 0) {
-               emu->key_down(vk, false);
+       emit sig_key_down(vk, mod, false);
+}
+
+
+QStringList *GLDrawClass::getKeyNames(void)
+{
+       if(key_table) {
+               return key_table->get_scan_name_list();
        }
-       emu->UnlockVM();
+       return NULL;
 }
 
+QStringList *GLDrawClass::getVKNames(void)
+{
+       if(key_table) {
+               return key_table->get_vk_name_list();
+       }
+       return NULL;
+}
 
-extern "C"{   
-uint32_t GetAsyncKeyState(uint32_t vk, uint32_t mod)
+keydef_table_t *GLDrawClass::get_key_table(int index)
 {
-       vk = vk & 0xff; // OK?
-       quint32 modstate = mod;
-   //printf("Mod %d %08x\n", vk, mod);
-       switch(vk) {
-       case VK_SHIFT:
-               if((modstate & Qt::ShiftModifier) != 0) return 0xffffffff;
-               break;
-       case VK_LSHIFT:
-               if((modstate & Qt::ShiftModifier) != 0) return 0xffffffff;
-               break;
-       case VK_RSHIFT:
-               if((modstate & Qt::ShiftModifier) != 0) return 0xffffffff;
-               break;
-       case VK_CONTROL:
-               if((modstate & Qt::ControlModifier) != 0) return 0xffffffff;
-               break;
-       case VK_LCONTROL:
-               if((modstate & Qt::ControlModifier) != 0) return 0xffffffff;
-               break;
-       case VK_RCONTROL:
-               if((modstate & Qt::ControlModifier) != 0) return 0xffffffff;
-               break;
-       case VK_LMENU:
-               if((modstate & Qt::AltModifier) != 0) return 0xffffffff;
-               break;
-       case VK_RMENU:
-               if((modstate & Qt::AltModifier) != 0) return 0xffffffff;
-               break;
-       default:
-               break;
+       if(key_table) {
+               return key_table->get_using_key_table(index);
+       }
+       return NULL;
+}
+
+keydef_table_t *GLDrawClass::get_key_tables(void)
+{
+       if(key_table) {
+               return key_table->get_using_key_table(0);
+       }
+       return NULL;
+}
+
+int GLDrawClass::get_key_table_size(void)
+{
+       if(key_table) {
+               return key_table->get_key_table_size();
        }
        return 0;
 }
 
 
+void GLDrawClass::do_update_keyboard_scan_code(uint32_t vk, uint32_t scan)
+{
+       if(key_table) {
+               key_table->do_set_scan_code(vk, scan);
+       }
 }
 
+uint32_t GLDrawClass::get_vk_from_index(int index)
+{
+       if(key_table) {
+               return key_table->get_vk_from_index(index);
+       }
+       return 0;
+}
 
+uint32_t GLDrawClass::get_scan_from_index(int index)
+{
+       if(key_table) {
+               return key_table->get_scan_from_index(index);
+       }
+       return 0;
+}
+
+const char *GLDrawClass::get_key_vk_name(int index)
+{
+       if(key_table) {
+               return key_table->get_vk_name(index);
+       }
+       return NULL;
+}
+
+const keydef_table_t *GLDrawClass::get_default_key_table()
+{
+       if(key_table) {
+               return (const keydef_table_t *)key_table->get_default_key_table();
+       }
+       return NULL;
+}