1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/boardsupport/emulator/emulatorbsp/specific/keyboard.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,817 @@
1.4 +// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// wins\specific\keyboard.cpp
1.18 +//
1.19 +//
1.20 +
1.21 +#include "gui.h"
1.22 +
1.23 +class KeySet
1.24 + {
1.25 +public:
1.26 + struct SEntry
1.27 + {
1.28 + const char* iName;
1.29 + TInt iVal;
1.30 + };
1.31 +public:
1.32 + inline KeySet(const SEntry aMap[], TInt aSize)
1.33 + :iMap(aMap), iSize(aSize)
1.34 + {}
1.35 + TInt operator[](const TDesC8& aName) const;
1.36 +private:
1.37 + const SEntry* iMap;
1.38 + TInt iSize;
1.39 + };
1.40 +
1.41 +
1.42 +const TUint8 StandardKeyMap[KStandardKeyMapSize]=
1.43 + {
1.44 + EStdKeyNull,
1.45 + EStdKeyEscape,
1.46 + '1',
1.47 + '2',
1.48 + '3',
1.49 + '4',
1.50 + '5',
1.51 + '6',
1.52 + '7',
1.53 + '8',
1.54 + '9',
1.55 + '0',
1.56 + EStdKeyMinus,
1.57 + EStdKeyEquals,
1.58 + EStdKeyBackspace,
1.59 + EStdKeyTab,
1.60 + 'Q',
1.61 + 'W',
1.62 + 'E',
1.63 + 'R',
1.64 + 'T',
1.65 + 'Y',
1.66 + 'U',
1.67 + 'I',
1.68 + 'O',
1.69 + 'P',
1.70 + EStdKeySquareBracketLeft,
1.71 + EStdKeySquareBracketRight,
1.72 + EStdKeyEnter,
1.73 + EStdKeyLeftCtrl,
1.74 + 'A',
1.75 + 'S',
1.76 + 'D',
1.77 + 'F',
1.78 + 'G',
1.79 + 'H',
1.80 + 'J',
1.81 + 'K',
1.82 + 'L',
1.83 + EStdKeySemiColon,
1.84 + EStdKeySingleQuote,
1.85 + EStdKeyXXX,
1.86 + EStdKeyLeftShift,
1.87 + EStdKeyHash,
1.88 + 'Z',
1.89 + 'X',
1.90 + 'C',
1.91 + 'V',
1.92 + 'B',
1.93 + 'N',
1.94 + 'M',
1.95 + EStdKeyComma,
1.96 + EStdKeyFullStop,
1.97 + EStdKeyForwardSlash,
1.98 + EStdKeyRightShift,
1.99 + EStdKeyNkpAsterisk,
1.100 + EStdKeyLeftFunc, // Alt key used as Func Key
1.101 + EStdKeySpace,
1.102 + EStdKeyCapsLock,
1.103 + EStdKeyMenu,
1.104 + EStdKeyHelp,
1.105 + EStdKeyDial,
1.106 + EStdKeyF4,
1.107 + EStdKeyF5,
1.108 + EStdKeyF6,
1.109 + EStdKeyF7,
1.110 + EStdKeyF8,
1.111 + EStdKeyOff,
1.112 + EStdKeyF10,
1.113 + EStdKeyPause,
1.114 + EStdKeyScrollLock,
1.115 + EStdKeyNkp7,
1.116 + EStdKeyNkp8,
1.117 + EStdKeyNkp9,
1.118 + EStdKeyNkpMinus,
1.119 + EStdKeyNkp4,
1.120 + EStdKeyNkp5,
1.121 + EStdKeyNkp6,
1.122 + EStdKeyNkpPlus,
1.123 + EStdKeyNkp1,
1.124 + EStdKeyNkp2,
1.125 + EStdKeyNkp3,
1.126 + EStdKeyNkp0,
1.127 + EStdKeyNkpFullStop,
1.128 + EStdKeyNull,
1.129 + EStdKeyNull,
1.130 + EStdKeyBackSlash,
1.131 + EStdKeyF11,
1.132 + EStdKeyF12
1.133 + };
1.134 +
1.135 +const TUint8 ExtendedKeyMap[]=
1.136 + {
1.137 +// EStdKeyNumLock,
1.138 +// EStdKeyNull,
1.139 +// EStdKeyHome,
1.140 +// EStdKeyUpArrow,
1.141 +// EStdKeyPageUp,
1.142 +// EStdKeyNull,
1.143 +// EStdKeyLeftArrow,
1.144 +// EStdKeyNull,
1.145 +// EStdKeyRightArrow,
1.146 +// EStdKeyNull,
1.147 +// EStdKeyEnd,
1.148 +// EStdKeyDownArrow,
1.149 +// EStdKeyPageDown,
1.150 +// EStdKeyInsert,
1.151 +// EStdKeyDelete
1.152 + /*1c*/ EStdKeyNkpEnter,
1.153 + /*1d*/ EStdKeyRightCtrl,
1.154 + /*1e*/ EStdKeyNull,
1.155 + /*1f*/ EStdKeyNull,
1.156 + /*20*/ EStdKeyNull,
1.157 + /*21*/ EStdKeyNull,
1.158 + /*22*/ EStdKeyNull,
1.159 + /*23*/ EStdKeyNull,
1.160 + /*24*/ EStdKeyNull,
1.161 + /*25*/ EStdKeyNull,
1.162 + /*26*/ EStdKeyNull,
1.163 + /*27*/ EStdKeyNull,
1.164 + /*28*/ EStdKeyNull,
1.165 + /*29*/ EStdKeyNull,
1.166 + /*2a*/ EStdKeyNull,
1.167 + /*2b*/ EStdKeyNull,
1.168 + /*2c*/ EStdKeyNull,
1.169 + /*2d*/ EStdKeyNull,
1.170 + /*2e*/ EStdKeyNull,
1.171 + /*2f*/ EStdKeyNull,
1.172 + /*30*/ EStdKeyNull,
1.173 + /*31*/ EStdKeyNull,
1.174 + /*32*/ EStdKeyNull,
1.175 + /*33*/ EStdKeyNull,
1.176 + /*34*/ EStdKeyNull,
1.177 + /*35*/ EStdKeyNkpForwardSlash,
1.178 + /*36*/ EStdKeyNull,
1.179 + /*37*/ EStdKeyPrintScreen, // Actually e0 2a e0 37
1.180 + /*38*/ EStdKeyRightFunc,
1.181 + /*39*/ EStdKeyNull,
1.182 + /*3a*/ EStdKeyNull,
1.183 + /*3b*/ EStdKeyNull,
1.184 + /*3c*/ EStdKeyNull,
1.185 + /*3d*/ EStdKeyNull,
1.186 + /*3e*/ EStdKeyNull,
1.187 + /*3f*/ EStdKeyNull,
1.188 + /*40*/ EStdKeyNull,
1.189 + /*41*/ EStdKeyNull,
1.190 + /*42*/ EStdKeyNull,
1.191 + /*43*/ EStdKeyNull,
1.192 + /*44*/ EStdKeyNull,
1.193 + /*45*/ EStdKeyNumLock,
1.194 + /*46*/ EStdKeyNull,
1.195 + /*47*/ EStdKeyHome,
1.196 + /*48*/ EStdKeyUpArrow,
1.197 + /*49*/ EStdKeyPageUp,
1.198 + /*4a*/ EStdKeyNull,
1.199 + /*4b*/ EStdKeyLeftArrow,
1.200 + /*4c*/ EStdKeyNull,
1.201 + /*4d*/ EStdKeyRightArrow,
1.202 + /*4e*/ EStdKeyNull,
1.203 + /*4f*/ EStdKeyEnd,
1.204 + /*50*/ EStdKeyDownArrow,
1.205 + /*51*/ EStdKeyPageDown,
1.206 + /*52*/ EStdKeyInsert,
1.207 + /*53*/ EStdKeyDelete,
1.208 + /*54*/ EStdKeyNull,
1.209 + /*55*/ EStdKeyNull,
1.210 + /*56*/ EStdKeyNull,
1.211 + /*57*/ EStdKeyNull,
1.212 + /*58*/ EStdKeyNull,
1.213 + /*59*/ EStdKeyNull,
1.214 + /*5a*/ EStdKeyNull,
1.215 + /*5b*/ EStdKeyLeftAlt, //left windows key
1.216 + /*5c*/ EStdKeyMenu, //right windows key
1.217 + /*5d*/ EStdKeyHelp //right mouse button key
1.218 + };
1.219 +
1.220 +
1.221 +const KeySet::SEntry EPOCKeyNameToKeyMap[] =
1.222 + {
1.223 + {"EStdKeyNull",EStdKeyNull},
1.224 + {"EStdKeyBackspace",EStdKeyBackspace},
1.225 + {"EStdKeyTab",EStdKeyTab},
1.226 + {"EStdKeyEnter",EStdKeyEnter},
1.227 + {"EStdKeyEscape",EStdKeyEscape},
1.228 + {"EStdKeySpace",EStdKeySpace},
1.229 + {"EStdKeyPrintScreen",EStdKeyPrintScreen},
1.230 + {"EStdKeyPause",EStdKeyPause},
1.231 + {"EStdKeyHome",EStdKeyHome},
1.232 + {"EStdKeyEnd",EStdKeyEnd},
1.233 + {"EStdKeyPageUp",EStdKeyPageUp},
1.234 + {"EStdKeyPageDown",EStdKeyPageDown},
1.235 + {"EStdKeyInsert",EStdKeyInsert},
1.236 + {"EStdKeyDelete",EStdKeyDelete},
1.237 + {"EStdKeyLeftArrow",EStdKeyLeftArrow},
1.238 + {"EStdKeyRightArrow",EStdKeyRightArrow},
1.239 + {"EStdKeyUpArrow",EStdKeyUpArrow},
1.240 + {"EStdKeyDownArrow",EStdKeyDownArrow},
1.241 + {"EStdKeyLeftShift",EStdKeyLeftShift},
1.242 + {"EStdKeyRightShift",EStdKeyRightShift},
1.243 + {"EStdKeyLeftAlt",EStdKeyLeftAlt},
1.244 + {"EStdKeyRightAlt",EStdKeyRightAlt},
1.245 + {"EStdKeyLeftCtrl",EStdKeyLeftCtrl},
1.246 + {"EStdKeyRightCtrl",EStdKeyRightCtrl},
1.247 + {"EStdKeyLeftFunc",EStdKeyLeftFunc},
1.248 + {"EStdKeyRightFunc",EStdKeyRightFunc},
1.249 + {"EStdKeyCapsLock",EStdKeyCapsLock},
1.250 + {"EStdKeyNumLock",EStdKeyNumLock},
1.251 + {"EStdKeyScrollLock",EStdKeyScrollLock},
1.252 + {"EStdKeyF1",EStdKeyF1},
1.253 + {"EStdKeyF2",EStdKeyF2},
1.254 + {"EStdKeyF3",EStdKeyF3},
1.255 + {"EStdKeyF4",EStdKeyF4},
1.256 + {"EStdKeyF5",EStdKeyF5},
1.257 + {"EStdKeyF6",EStdKeyF6},
1.258 + {"EStdKeyF7",EStdKeyF7},
1.259 + {"EStdKeyF8",EStdKeyF8},
1.260 + {"EStdKeyF9",EStdKeyF9},
1.261 + {"EStdKeyF10",EStdKeyF10},
1.262 + {"EStdKeyF11",EStdKeyF11},
1.263 + {"EStdKeyF12",EStdKeyF12},
1.264 + {"EStdKeyF13",EStdKeyF13},
1.265 + {"EStdKeyF14",EStdKeyF14},
1.266 + {"EStdKeyF15",EStdKeyF15},
1.267 + {"EStdKeyF16",EStdKeyF16},
1.268 + {"EStdKeyF17",EStdKeyF17},
1.269 + {"EStdKeyF18",EStdKeyF18},
1.270 + {"EStdKeyF19",EStdKeyF19},
1.271 + {"EStdKeyF20",EStdKeyF20},
1.272 + {"EStdKeyF21",EStdKeyF21},
1.273 + {"EStdKeyF22",EStdKeyF22},
1.274 + {"EStdKeyF23",EStdKeyF23},
1.275 + {"EStdKeyF24",EStdKeyF24},
1.276 + {"EStdKeyXXX",EStdKeyXXX},
1.277 + {"EStdKeyComma",EStdKeyComma},
1.278 + {"EStdKeyFullStop",EStdKeyFullStop},
1.279 + {"EStdKeyForwardSlash",EStdKeyForwardSlash},
1.280 + {"EStdKeyBackSlash",EStdKeyBackSlash},
1.281 + {"EStdKeySemiColon",EStdKeySemiColon},
1.282 + {"EStdKeySingleQuote",EStdKeySingleQuote},
1.283 + {"EStdKeyHash",EStdKeyHash},
1.284 + {"EStdKeySquareBracketLeft",EStdKeySquareBracketLeft},
1.285 + {"EStdKeySquareBracketRight",EStdKeySquareBracketRight},
1.286 + {"EStdKeyMinus",EStdKeyMinus},
1.287 + {"EStdKeyEquals",EStdKeyEquals},
1.288 + {"EStdKeyNkpForwardSlash",EStdKeyNkpForwardSlash},
1.289 + {"EStdKeyNkpAsterisk",EStdKeyNkpAsterisk},
1.290 + {"EStdKeyNkpMinus",EStdKeyNkpMinus},
1.291 + {"EStdKeyNkpPlus",EStdKeyNkpPlus},
1.292 + {"EStdKeyNkpEnter",EStdKeyNkpEnter},
1.293 + {"EStdKeyNkp1",EStdKeyNkp1},
1.294 + {"EStdKeyNkp2",EStdKeyNkp2},
1.295 + {"EStdKeyNkp3",EStdKeyNkp3},
1.296 + {"EStdKeyNkp4",EStdKeyNkp4},
1.297 + {"EStdKeyNkp5",EStdKeyNkp5},
1.298 + {"EStdKeyNkp6",EStdKeyNkp6},
1.299 + {"EStdKeyNkp7",EStdKeyNkp7},
1.300 + {"EStdKeyNkp8",EStdKeyNkp8},
1.301 + {"EStdKeyNkp9",EStdKeyNkp9},
1.302 + {"EStdKeyNkp0",EStdKeyNkp0},
1.303 + {"EStdKeyNkpFullStop",EStdKeyNkpFullStop},
1.304 + {"EStdKeyMenu",EStdKeyMenu},
1.305 + {"EStdKeyBacklightOn",EStdKeyBacklightOn},
1.306 + {"EStdKeyBacklightOff",EStdKeyBacklightOff},
1.307 + {"EStdKeyBacklightToggle",EStdKeyBacklightToggle},
1.308 + {"EStdKeyIncContrast",EStdKeyIncContrast},
1.309 + {"EStdKeyDecContrast",EStdKeyDecContrast},
1.310 + {"EStdKeySliderDown",EStdKeySliderDown},
1.311 + {"EStdKeySliderUp",EStdKeySliderUp},
1.312 + {"EStdKeyDictaphonePlay",EStdKeyDictaphonePlay},
1.313 + {"EStdKeyDictaphoneStop",EStdKeyDictaphoneStop},
1.314 + {"EStdKeyDictaphoneRecord",EStdKeyDictaphoneRecord},
1.315 + {"EStdKeyHelp",EStdKeyHelp},
1.316 + {"EStdKeyOff",EStdKeyOff},
1.317 + {"EStdKeyDial",EStdKeyDial},
1.318 + {"EStdKeyIncVolume",EStdKeyIncVolume},
1.319 + {"EStdKeyDecVolume",EStdKeyDecVolume},
1.320 + {"EStdKeyDevice0",EStdKeyDevice0},
1.321 + {"EStdKeyDevice1",EStdKeyDevice1},
1.322 + {"EStdKeyDevice2",EStdKeyDevice2},
1.323 + {"EStdKeyDevice3",EStdKeyDevice3},
1.324 + {"EStdKeyDevice4",EStdKeyDevice4},
1.325 + {"EStdKeyDevice5",EStdKeyDevice5},
1.326 + {"EStdKeyDevice6",EStdKeyDevice6},
1.327 + {"EStdKeyDevice7",EStdKeyDevice7},
1.328 + {"EStdKeyDevice8",EStdKeyDevice8},
1.329 + {"EStdKeyDevice9",EStdKeyDevice9},
1.330 + {"EStdKeyDeviceA",EStdKeyDeviceA},
1.331 + {"EStdKeyDeviceB",EStdKeyDeviceB},
1.332 + {"EStdKeyDeviceC",EStdKeyDeviceC},
1.333 + {"EStdKeyDeviceD",EStdKeyDeviceD},
1.334 + {"EStdKeyDeviceE",EStdKeyDeviceE},
1.335 + {"EStdKeyDeviceF",EStdKeyDeviceF},
1.336 + {"EStdKeyDevice10",EStdKeyDevice10},
1.337 + {"EStdKeyDevice11",EStdKeyDevice11},
1.338 + {"EStdKeyDevice12",EStdKeyDevice12},
1.339 + {"EStdKeyDevice13",EStdKeyDevice13},
1.340 + {"EStdKeyDevice14",EStdKeyDevice14},
1.341 + {"EStdKeyDevice15",EStdKeyDevice15},
1.342 + {"EStdKeyDevice16",EStdKeyDevice16},
1.343 + {"EStdKeyDevice17",EStdKeyDevice17},
1.344 + {"EStdKeyDevice18",EStdKeyDevice18},
1.345 + {"EStdKeyDevice19",EStdKeyDevice19},
1.346 + {"EStdKeyDevice1A",EStdKeyDevice1A},
1.347 + {"EStdKeyDevice1B",EStdKeyDevice1B},
1.348 + {"EStdKeyDevice1C",EStdKeyDevice1C},
1.349 + {"EStdKeyDevice1D",EStdKeyDevice1D},
1.350 + {"EStdKeyDevice1E",EStdKeyDevice1E},
1.351 + {"EStdKeyDevice1F",EStdKeyDevice1F},
1.352 + {"EStdKeyDevice20",EStdKeyDevice20},
1.353 + {"EStdKeyDevice21",EStdKeyDevice21},
1.354 + {"EStdKeyDevice22",EStdKeyDevice22},
1.355 + {"EStdKeyDevice23",EStdKeyDevice23},
1.356 + {"EStdKeyDevice24",EStdKeyDevice24},
1.357 + {"EStdKeyDevice25",EStdKeyDevice25},
1.358 + {"EStdKeyDevice26",EStdKeyDevice26},
1.359 + {"EStdKeyDevice27",EStdKeyDevice27},
1.360 + {"EStdKeyApplication0",EStdKeyApplication0},
1.361 + {"EStdKeyApplication1",EStdKeyApplication1},
1.362 + {"EStdKeyApplication2",EStdKeyApplication2},
1.363 + {"EStdKeyApplication3",EStdKeyApplication3},
1.364 + {"EStdKeyApplication4",EStdKeyApplication4},
1.365 + {"EStdKeyApplication5",EStdKeyApplication5},
1.366 + {"EStdKeyApplication6",EStdKeyApplication6},
1.367 + {"EStdKeyApplication7",EStdKeyApplication7},
1.368 + {"EStdKeyApplication8",EStdKeyApplication8},
1.369 + {"EStdKeyApplication9",EStdKeyApplication9},
1.370 + {"EStdKeyApplicationA",EStdKeyApplicationA},
1.371 + {"EStdKeyApplicationB",EStdKeyApplicationB},
1.372 + {"EStdKeyApplicationC",EStdKeyApplicationC},
1.373 + {"EStdKeyApplicationD",EStdKeyApplicationD},
1.374 + {"EStdKeyApplicationE",EStdKeyApplicationE},
1.375 + {"EStdKeyApplicationF",EStdKeyApplicationF},
1.376 + {"EStdKeyApplication10",EStdKeyApplication10},
1.377 + {"EStdKeyApplication11",EStdKeyApplication11},
1.378 + {"EStdKeyApplication12",EStdKeyApplication12},
1.379 + {"EStdKeyApplication13",EStdKeyApplication13},
1.380 + {"EStdKeyApplication14",EStdKeyApplication14},
1.381 + {"EStdKeyApplication15",EStdKeyApplication15},
1.382 + {"EStdKeyApplication16",EStdKeyApplication16},
1.383 + {"EStdKeyApplication17",EStdKeyApplication17},
1.384 + {"EStdKeyApplication18",EStdKeyApplication18},
1.385 + {"EStdKeyApplication19",EStdKeyApplication19},
1.386 + {"EStdKeyApplication1A",EStdKeyApplication1A},
1.387 + {"EStdKeyApplication1B",EStdKeyApplication1B},
1.388 + {"EStdKeyApplication1C",EStdKeyApplication1C},
1.389 + {"EStdKeyApplication1D",EStdKeyApplication1D},
1.390 + {"EStdKeyApplication1E",EStdKeyApplication1E},
1.391 + {"EStdKeyApplication1F",EStdKeyApplication1F},
1.392 + {"EStdKeyApplication20",EStdKeyApplication20},
1.393 + {"EStdKeyApplication21",EStdKeyApplication21},
1.394 + {"EStdKeyApplication22",EStdKeyApplication22},
1.395 + {"EStdKeyApplication23",EStdKeyApplication23},
1.396 + {"EStdKeyApplication24",EStdKeyApplication24},
1.397 + {"EStdKeyApplication25",EStdKeyApplication25},
1.398 + {"EStdKeyApplication26",EStdKeyApplication26},
1.399 + {"EStdKeyApplication27",EStdKeyApplication27},
1.400 + {"EStdKeyYes",EStdKeyYes},
1.401 + {"EStdKeyNo",EStdKeyNo},
1.402 + {"EStdKeyIncBrightness",EStdKeyIncBrightness},
1.403 + {"EStdKeyDecBrightness",EStdKeyDecBrightness},
1.404 + {"A", 'A'},
1.405 + {"B", 'B'},
1.406 + {"C", 'C'},
1.407 + {"D", 'D'},
1.408 + {"E", 'E'},
1.409 + {"F", 'F'},
1.410 + {"G", 'G'},
1.411 + {"H", 'H'},
1.412 + {"I", 'I'},
1.413 + {"J", 'J'},
1.414 + {"K", 'K'},
1.415 + {"L", 'L'},
1.416 + {"M", 'M'},
1.417 + {"N", 'N'},
1.418 + {"O", 'O'},
1.419 + {"P", 'P'},
1.420 + {"Q", 'Q'},
1.421 + {"R", 'R'},
1.422 + {"S", 'S'},
1.423 + {"T", 'T'},
1.424 + {"U", 'U'},
1.425 + {"V", 'V'},
1.426 + {"W", 'W'},
1.427 + {"X", 'X'},
1.428 + {"Y", 'Y'},
1.429 + {"Z", 'Z'},
1.430 + {"0", '0'},
1.431 + {"1", '1'},
1.432 + {"2", '2'},
1.433 + {"3", '3'},
1.434 + {"4", '4'},
1.435 + {"5", '5'},
1.436 + {"6", '6'},
1.437 + {"7", '7'},
1.438 + {"8", '8'},
1.439 + {"9", '9'},
1.440 + {"EKeyScreenDimension0",EKeyScreenDimension0<<16},
1.441 + {"EKeyScreenDimension1",EKeyScreenDimension1<<16},
1.442 + {"EKeyScreenDimension2",EKeyScreenDimension2<<16},
1.443 + {"EKeyScreenDimension3",EKeyScreenDimension3<<16}
1.444 + };
1.445 +
1.446 +const KeySet::SEntry RealKeyNames[] =
1.447 + {
1.448 + {"Escape",1},
1.449 + {"1",2},
1.450 + {"2",3},
1.451 + {"3",4},
1.452 + {"4",5},
1.453 + {"5",6},
1.454 + {"6",7},
1.455 + {"7",8},
1.456 + {"8",9},
1.457 + {"9",10},
1.458 + {"0",11},
1.459 + {"Minus",12},
1.460 + {"Equals",13},
1.461 + {"BackSpace",14},
1.462 + {"Tab",15},
1.463 + {"Q",16},
1.464 + {"W",17},
1.465 + {"E",18},
1.466 + {"R",19},
1.467 + {"T",20},
1.468 + {"Y",21},
1.469 + {"U",22},
1.470 + {"I",23},
1.471 + {"O",24},
1.472 + {"P",25},
1.473 + {"SquareBracketLeft",26},
1.474 + {"SquareBracketRight",27},
1.475 + {"Enter",28},
1.476 + {"LeftCtrl",29},
1.477 + {"A",30},
1.478 + {"S",31},
1.479 + {"D",32},
1.480 + {"F",33},
1.481 + {"G",34},
1.482 + {"H",35},
1.483 + {"J",36},
1.484 + {"K",37},
1.485 + {"L",38},
1.486 + {"SemiColon",39},
1.487 + {"SingleQuote",40},
1.488 + {"BackTick",41},
1.489 + {"LeftShift",42},
1.490 + {"Hash",43},
1.491 + {"Z",44},
1.492 + {"X",45},
1.493 + {"C",46},
1.494 + {"V",47},
1.495 + {"B",48},
1.496 + {"N",49},
1.497 + {"M",50},
1.498 + {"Comma",51},
1.499 + {"FullStop",52},
1.500 + {"ForwardSlash",53},
1.501 + {"RightShift",54},
1.502 + {"NkpAsterisk",55},
1.503 + {"LeftAlt",56}, // Alt key used as Func Key
1.504 + {"Space",57},
1.505 + {"CapsLock",58},
1.506 + {"F1",59},
1.507 + {"F2",60},
1.508 + {"F3",61},
1.509 + {"F4",62},
1.510 + {"F5",63},
1.511 + {"F6",64},
1.512 + {"F7",65},
1.513 + {"F8",66},
1.514 + {"F9",67},
1.515 + {"F10",68},
1.516 + {"Pause",69},
1.517 + {"ScrollLock",70},
1.518 + {"Nkp7",71},
1.519 + {"Nkp8",72},
1.520 + {"Nkp9",73},
1.521 + {"NkpMinus",74},
1.522 + {"Nkp4",75},
1.523 + {"Nkp5",76},
1.524 + {"Nkp6",77},
1.525 + {"NkpPlus",78},
1.526 + {"Nkp1",79},
1.527 + {"Nkp2",80},
1.528 + {"Nkp3",81},
1.529 + {"Nkp0",82},
1.530 + {"NkpFullStop",83},
1.531 + {"BackSlash",86},
1.532 + {"F11",87},
1.533 + {"F12",88}
1.534 + };
1.535 +
1.536 +const KeySet::SEntry RealExtendedKeyNames[] =
1.537 + {
1.538 + {"NkpEnter",0},
1.539 + {"RightCtrl",1},
1.540 + {"NkpForwardSlash", 25},
1.541 + {"PrintScreen",27},
1.542 + {"RightAlt", 28},
1.543 + {"NumLock", 41},
1.544 + {"Home",43},
1.545 + {"UpArrow",44},
1.546 + {"PageUp",45},
1.547 + {"LeftArrow",47},
1.548 + {"RightArrow",49},
1.549 + {"End",51},
1.550 + {"DownArrow",52},
1.551 + {"PageDown",53},
1.552 + {"Insert",54},
1.553 + {"Delete",55},
1.554 + {"LeftWindows",63},
1.555 + {"RightWindows",64},
1.556 + {"ContextMenu",65}
1.557 + };
1.558 +
1.559 +const KeySet EpocKeys(EPOCKeyNameToKeyMap, sizeof(EPOCKeyNameToKeyMap)/sizeof(KeySet::SEntry));
1.560 +const KeySet StandardKeys(RealKeyNames, sizeof(RealKeyNames)/sizeof(KeySet::SEntry));
1.561 +const KeySet ExtendedKeys(RealExtendedKeyNames, sizeof(RealExtendedKeyNames)/sizeof(KeySet::SEntry));
1.562 +
1.563 +TInt KeySet::operator[](const TDesC8& aName) const
1.564 + {
1.565 + TInt len = aName.Length();
1.566 + const char* p = (const char*)aName.Ptr();
1.567 + for (const SEntry* e = iMap + iSize; --e >= iMap; )
1.568 + {
1.569 + if (_strnicmp(e->iName, p, len) == 0 && e->iName[len] == '\0')
1.570 + return e->iVal;
1.571 + }
1.572 + return KErrNotFound;
1.573 + }
1.574 +
1.575 +// Class Alias
1.576 +
1.577 +Alias::Alias()
1.578 + :iMap(10)
1.579 + {}
1.580 +
1.581 +TInt Alias::Add(const TDesC8& aAlias, const TDesC8& aName)
1.582 +//
1.583 +// add a new alias
1.584 +//
1.585 + {
1.586 + TInt r = KErrNoMemory;
1.587 + SEntry e;
1.588 + e.iAlias = HBuf8::New(aAlias);
1.589 + if (e.iAlias)
1.590 + {
1.591 + e.iName = HBuf8::New(aName);
1.592 + if (e.iName)
1.593 + {
1.594 + r = iMap.InsertInOrder(e, &Alias::Compare);
1.595 + if (r == KErrNone)
1.596 + return KErrNone;
1.597 + delete e.iName;
1.598 + }
1.599 + delete e.iAlias;
1.600 + }
1.601 + return r;
1.602 + }
1.603 +
1.604 +const TDesC8* Alias::operator[](const TDesC8& aAlias)
1.605 +//
1.606 +// Look up an alias
1.607 +//
1.608 + {
1.609 + SEntry e;
1.610 + e.iAlias = const_cast<TDesC8*>(&aAlias);
1.611 + TInt ix = iMap.FindInOrder(e, &Alias::Compare);
1.612 + return ix >= 0 ? iMap[ix].iName : NULL;
1.613 + }
1.614 +
1.615 +TInt Alias::Compare(const SEntry& aLhs, const SEntry& aRhs)
1.616 + {
1.617 + return CompareI(*aLhs.iAlias, *aRhs.iAlias);
1.618 + }
1.619 +
1.620 +
1.621 +
1.622 +// keyboard mapping
1.623 +
1.624 +DWinsKeyboard::DWinsKeyboard()
1.625 + {
1.626 + memcpy(iStandardKeyMap, StandardKeyMap, KStandardKeyMapSize);
1.627 + memcpy(iExtendedKeyMap, ExtendedKeyMap, KExtendedKeyMapSize);
1.628 + memcpy(iAltStandardKeyMap, StandardKeyMap, KStandardKeyMapSize);
1.629 + memcpy(iAltExtendedKeyMap, ExtendedKeyMap, KExtendedKeyMapSize);
1.630 + memcpy(iCtrlStandardKeyMap, StandardKeyMap, KStandardKeyMapSize);
1.631 + memcpy(iCtrlExtendedKeyMap, ExtendedKeyMap, KExtendedKeyMapSize);
1.632 + }
1.633 +
1.634 +TInt DWinsKeyboard::Init(TInt aId)
1.635 +//
1.636 +// Initialise the alias and key maps from the properties
1.637 +//
1.638 + {
1.639 + char property[50];
1.640 + wsprintfA(property, "Configuration[%d]DefineKeyName",aId);
1.641 + TInt r = MultiProperty(&DWinsKeyboard::DoDefineAlias, this, property);
1.642 + if (r != KErrNone)
1.643 + return r;
1.644 + wsprintfA(property, "Configuration[%d]KeyMap",aId);
1.645 + r = MultiProperty(&DWinsKeyboard::DoMapKey, this, property);
1.646 + return r;
1.647 + }
1.648 +
1.649 +TInt DWinsKeyboard::DoDefineAlias(TAny* aPtr, const char* aValue)
1.650 + {
1.651 + return static_cast<DWinsKeyboard*>(aPtr)->DefineAlias(aValue);
1.652 + }
1.653 +
1.654 +TInt DWinsKeyboard::DefineAlias(const char* aValue)
1.655 +//
1.656 +// The character string terminates in a ';' or a '\0'
1.657 +//
1.658 + {
1.659 + //get the alias name
1.660 + const char* beg = skipws(aValue);
1.661 + const char* end = skiptok(beg);
1.662 + TPtrC8 alias((const TUint8*)beg, end-beg);
1.663 +
1.664 + //get the real name
1.665 + beg = skipws(end);
1.666 + end = skiptok(beg);
1.667 + TPtrC8 name((const TUint8*)beg, end-beg);
1.668 +
1.669 + //prevent an alias being made of an alias
1.670 + if (iAliasedKeys[name] != NULL)
1.671 + return KErrArgument;
1.672 +
1.673 + // ensure this is valid name
1.674 + TInt r = GetEPOCKeyCode(name);
1.675 + if (r == KErrNotFound)
1.676 + return r;
1.677 +
1.678 + //now we need to record the alias name and the real key name
1.679 + return iAliasedKeys.Add(alias, name);
1.680 + }
1.681 +
1.682 +
1.683 +TInt DWinsKeyboard::DoMapKey(TAny* aPtr, const char* aValue)
1.684 + {
1.685 + return static_cast<DWinsKeyboard*>(aPtr)->MapKey(aValue);
1.686 + }
1.687 +
1.688 +TInt DWinsKeyboard::MapKey(const char* aValue)
1.689 + {
1.690 + //get the win32 name
1.691 + const char* beg = skipws(aValue);
1.692 + const char* end = skiptok(beg);
1.693 +
1.694 + // check to see if a modifier key has been specified
1.695 + TBool altModifier = !_strnicmp(beg, "LeftAlt", 7);
1.696 + altModifier |= !_strnicmp(beg, "RightAlt", 8);
1.697 + TBool ctrlModifier = !_strnicmp(beg, "LeftCtrl", 8);
1.698 + ctrlModifier |= !_strnicmp(beg, "RightCtrl", 9);
1.699 +
1.700 + // if modifier was found, skip to next token
1.701 + if (altModifier || ctrlModifier)
1.702 + {
1.703 + beg = skipws(end);
1.704 + end = skiptok(beg);
1.705 + }
1.706 +
1.707 + TPtrC8 name((const TUint8*)beg, end-beg);
1.708 +
1.709 + //get the epoc key
1.710 + beg = skipws(end);
1.711 + end = skiptok(beg);
1.712 + TInt key = GetEPOCKeyCode(TPtrC8((const TUint8*)beg, end-beg));
1.713 + if (key == KErrNotFound)
1.714 + return key;
1.715 +
1.716 + TInt scancode = StandardKeys[name];
1.717 +
1.718 + // if alt modifier was specified, change the alt key map
1.719 + if (altModifier)
1.720 + {
1.721 + if (scancode >= 0)
1.722 + iAltStandardKeyMap[scancode] = (TUint8)key;
1.723 + else
1.724 + {
1.725 + scancode = ExtendedKeys[name];
1.726 + if (scancode >= 0)
1.727 + iAltExtendedKeyMap[scancode] = (TUint8)key;
1.728 + else
1.729 + return KErrNotFound;
1.730 + }
1.731 + }
1.732 +
1.733 + // if ctrl modifier was specified, change the ctrl key map
1.734 + else if (ctrlModifier)
1.735 + {
1.736 + if (scancode >= 0)
1.737 + iCtrlStandardKeyMap[scancode] = (TUint8)key;
1.738 + else
1.739 + {
1.740 + scancode = ExtendedKeys[name];
1.741 + if (scancode >= 0)
1.742 + iCtrlExtendedKeyMap[scancode] = (TUint8)key;
1.743 + else
1.744 + return KErrNotFound;
1.745 + }
1.746 + }
1.747 +
1.748 + // no modifier, change the default key map
1.749 + else
1.750 + {
1.751 + if (scancode >= 0)
1.752 + iStandardKeyMap[scancode] = (TUint8)key;
1.753 + else
1.754 + {
1.755 + scancode = ExtendedKeys[name];
1.756 + if (scancode >= 0)
1.757 + iExtendedKeyMap[scancode] = (TUint8)key;
1.758 + else
1.759 + return KErrNotFound;
1.760 + }
1.761 + }
1.762 +
1.763 + return KErrNone;
1.764 + }
1.765 +
1.766 +TInt DWinsKeyboard::GetEPOCKeyCode(const TDesC8& aStr)
1.767 + {
1.768 + // look for an alias
1.769 + const TDesC8* arg = iAliasedKeys[aStr];
1.770 + return EpocKeys[arg ? *arg : aStr];
1.771 + }
1.772 +
1.773 +TInt DWinsKeyboard::ScanCodeToKey(TInt aScanCode, const TUint8* aStandardMap, const TUint8* aExtendedMap)
1.774 +//
1.775 +// Map Windows scan codes to Epoc key
1.776 +//
1.777 + {
1.778 + TInt stdCode = EStdKeyNull;
1.779 + TInt extended = aScanCode&KKeyExtendedBit;
1.780 + aScanCode &= KKeyNormalBits;
1.781 + if (extended)
1.782 + {
1.783 + if (aScanCode >= KExtendedKeyBase && aScanCode <= KMaxExtendedKey)
1.784 + stdCode = aExtendedMap[aScanCode - KExtendedKeyBase];
1.785 + }
1.786 + else if (aScanCode < KStandardKeyMapSize)
1.787 + stdCode = aStandardMap[aScanCode];
1.788 + return stdCode;
1.789 + }
1.790 +
1.791 +TInt DWinsKeyboard::ScanCodeToStandardKey(TInt aScanCode)
1.792 +//
1.793 +// Map Windows scan codes to standard keys
1.794 +//
1.795 + {
1.796 + return ScanCodeToKey(aScanCode, StandardKeyMap, ExtendedKeyMap );
1.797 + }
1.798 +
1.799 +TInt DWinsKeyboard::ScanCodeToRemappedKey(TInt aScanCode)
1.800 +//
1.801 +// Map Windows scan codes to remapped keys
1.802 +//
1.803 + {
1.804 + if (HIBYTE(GetKeyState(VK_MENU))) // Alt key is pressed
1.805 + return ScanCodeToKey(aScanCode, iAltStandardKeyMap, iAltExtendedKeyMap );
1.806 +
1.807 + if (HIBYTE(GetKeyState(VK_CONTROL))) // Ctrl key is pressed
1.808 + return ScanCodeToKey(aScanCode, iCtrlStandardKeyMap, iCtrlExtendedKeyMap );
1.809 +
1.810 + return ScanCodeToKey(aScanCode, iStandardKeyMap, iExtendedKeyMap );
1.811 + }
1.812 +
1.813 +
1.814 +
1.815 +
1.816 +TInt DWinsKeyboard::GetScanCode(const TDesC8& aStr)
1.817 + {
1.818 + return StandardKeys[aStr];
1.819 + }
1.820 +