Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#include "KeyCodes.h"

using namespace Sexy;

#define MAX_KEYNAME_LEN 12

typedef struct
{
        char mKeyName[MAX_KEYNAME_LEN];
        KeyCode mKeyCode;
} KeyNameEntry;

KeyNameEntry aKeyCodeArray[] =
{
        {"UNKNOWN", KEYCODE_UNKNOWN},
        {"LBUTTON", KEYCODE_LBUTTON},  
        {"RBUTTON", KEYCODE_RBUTTON},
        {"CANCEL", KEYCODE_CANCEL},
        {"MBUTTON", KEYCODE_MBUTTON},
        {"BACK", KEYCODE_BACK},
        {"TAB", KEYCODE_TAB},
        {"CLEAR", KEYCODE_CLEAR},
        {"RETURN", KEYCODE_RETURN},
        {"SHIFT", KEYCODE_SHIFT},
        {"CONTROL", KEYCODE_CONTROL},
        {"MENU", KEYCODE_MENU},
        {"PAUSE", KEYCODE_PAUSE},
        {"CAPITAL", KEYCODE_CAPITAL},
        {"KANA", KEYCODE_KANA},
        {"HANGEUL", KEYCODE_HANGEUL},
        {"HANGUL", KEYCODE_HANGUL},
        {"JUNJA", KEYCODE_JUNJA},
        {"FINAL", KEYCODE_FINAL},
        {"HANJA", KEYCODE_HANJA},
        {"KANJI", KEYCODE_KANJI},
        {"ESCAPE", KEYCODE_ESCAPE},
        {"CONVERT", KEYCODE_CONVERT},
        {"NONCONVERT", KEYCODE_NONCONVERT},
        {"ACCEPT", KEYCODE_ACCEPT},
        {"MODECHANGE", KEYCODE_MODECHANGE},
        {"SPACE", KEYCODE_SPACE},
        {"PRIOR", KEYCODE_PRIOR},
        {"NEXT", KEYCODE_NEXT},
        {"END", KEYCODE_END},
        {"HOME", KEYCODE_HOME},
        {"LEFT", KEYCODE_LEFT},
        {"UP", KEYCODE_UP},
        {"RIGHT", KEYCODE_RIGHT},
        {"DOWN", KEYCODE_DOWN},
        {"SELECT", KEYCODE_SELECT},
        {"PRINT", KEYCODE_PRINT},
        {"EXECUTE", KEYCODE_EXECUTE},
        {"SNAPSHOT", KEYCODE_SNAPSHOT},
        {"INSERT", KEYCODE_INSERT},
        {"DELETE", KEYCODE_DELETE},
        {"HELP", KEYCODE_HELP},
        {"LWIN", KEYCODE_LWIN},
        {"RWIN", KEYCODE_RWIN},
        {"APPS", KEYCODE_APPS},
        {"NUMPAD0", KEYCODE_NUMPAD0},
        {"NUMPAD1", KEYCODE_NUMPAD1},
        {"NUMPAD2", KEYCODE_NUMPAD2},
        {"NUMPAD3", KEYCODE_NUMPAD3},
        {"NUMPAD4", KEYCODE_NUMPAD4},
        {"NUMPAD5", KEYCODE_NUMPAD5},
        {"NUMPAD6", KEYCODE_NUMPAD6},
        {"NUMPAD7", KEYCODE_NUMPAD7},
        {"NUMPAD8", KEYCODE_NUMPAD8},
        {"NUMPAD9", KEYCODE_NUMPAD9},
        {"MULTIPLY", KEYCODE_MULTIPLY},
        {"ADD", KEYCODE_ADD},
        {"SEPARATOR", KEYCODE_SEPARATOR},
        {"SUBTRACT", KEYCODE_SUBTRACT},
        {"DECIMAL", KEYCODE_DECIMAL},
        {"DIVIDE", KEYCODE_DIVIDE},
        {"F1", KEYCODE_F1},
        {"F2", KEYCODE_F2},
        {"F3", KEYCODE_F3},
        {"F4", KEYCODE_F4},
        {"F5", KEYCODE_F5},
        {"F6", KEYCODE_F6},
        {"F7", KEYCODE_F7},
        {"F8", KEYCODE_F8},
        {"F9", KEYCODE_F9},
        {"F10", KEYCODE_F10},
        {"F11", KEYCODE_F11},
        {"F12", KEYCODE_F12},
        {"F13", KEYCODE_F13},
        {"F14", KEYCODE_F14},
        {"F15", KEYCODE_F15},
        {"F16", KEYCODE_F16},
        {"F17", KEYCODE_F17},
        {"F18", KEYCODE_F18},
        {"F19", KEYCODE_F19},
        {"F20", KEYCODE_F20},
        {"F21", KEYCODE_F21},
        {"F22", KEYCODE_F22},
        {"F23", KEYCODE_F23},
        {"F24", KEYCODE_F24},
        {"NUMLOCK", KEYCODE_NUMLOCK},
        {"SCROLL", KEYCODE_SCROLL}     
};

KeyCode Sexy::GetKeyCodeFromName(const std::string& theKeyName)
{
        char aKeyName[MAX_KEYNAME_LEN];

        if (theKeyName.length() >= MAX_KEYNAME_LEN-1)
                return KEYCODE_UNKNOWN;

        strcpy(aKeyName, theKeyName.c_str());
        strupr(aKeyName);

        if (theKeyName.length() == 1)
        {
                unsigned char aKeyNameChar = aKeyName[0];

                if ((aKeyNameChar >= (unsigned char) KEYCODE_ASCIIBEGIN) && (aKeyNameChar <= (unsigned char) KEYCODE_ASCIIEND))
                        return (KeyCode) aKeyNameChar;

                if ((aKeyNameChar >= ((unsigned char) KEYCODE_ASCIIBEGIN2) - 0x80) && (aKeyNameChar <= ((unsigned char) KEYCODE_ASCIIEND2) - 0x80))
                        return (KeyCode) (aKeyNameChar + 0x80);
        }      

        for (int i = 0; i < sizeof(aKeyCodeArray)/sizeof(aKeyCodeArray[0]); i++)       
                if (strcmp(aKeyName, aKeyCodeArray[i].mKeyName) == 0)
                        return aKeyCodeArray[i].mKeyCode;      

        return KEYCODE_UNKNOWN;
}

const std::string Sexy::GetKeyNameFromCode(const KeyCode& theKeyCode)
{
        if ((theKeyCode >= KEYCODE_ASCIIBEGIN) && (theKeyCode <= KEYCODE_ASCIIEND))
        {
                char aStr[2] = {(char) theKeyCode, 0};
                return aStr;
        }

        if ((theKeyCode >= KEYCODE_ASCIIBEGIN2) && (theKeyCode <= KEYCODE_ASCIIEND2))
        {
                char aStr[2] = {((unsigned char) theKeyCode) - 0x80, 0};
                return aStr;
        }

        for (int i = 0; i < sizeof(aKeyCodeArray)/sizeof(aKeyCodeArray[0]); i++)       
                if (theKeyCode == aKeyCodeArray[i].mKeyCode)
                        return aKeyCodeArray[i].mKeyName;      

        return "UNKNOWN";
}