bluetoothengine/bthid/layouts/src/french.cpp
changeset 0 f63038272f30
equal deleted inserted replaced
-1:000000000000 0:f63038272f30
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This is the implementation of application class
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "french.h"
       
    20 #include "hiddebug.h"
       
    21 #include "hidlayoutids.h"
       
    22 
       
    23 // CONSTANTS
       
    24 
       
    25 // Look-up tables to translate HID keyboard usage codes (usage page 7)
       
    26 // to the corresponding Symbian "TKeyCode" (Unicode) values:
       
    27 
       
    28 const TInt CFrenchLayout::KColumnMap[] =
       
    29     {
       
    30     THidModifier::EUnmodified,  // ----
       
    31     THidModifier::EShift        // ---S
       
    32     };
       
    33 
       
    34 const TUint16 CFrenchLayout::KKeyCodes[] = 
       
    35     {
       
    36     //----    ---S   // Hex  Dec  Usage name (UK)
       
    37          0,      0,  // 0x00   0  Reserved (no event)
       
    38          0,      0,  // 0x01   1  Rollover error
       
    39          0,      0,  // 0x02   2  POST Fail
       
    40          0,      0,  // 0x03   3  Undefined error
       
    41        'q',    'Q',  // 0x04   4  a A
       
    42        'b',    'B',  // 0x05   5  b B
       
    43        'c',    'C',  // 0x06   6  c C
       
    44        'd',    'D',  // 0x07   7  d D
       
    45        'e',    'E',  // 0x08   8  e E
       
    46        'f',    'F',  // 0x09   9  f F
       
    47        'g',    'G',  // 0x0a  10  g G
       
    48        'h',    'H',  // 0x0b  11  h H
       
    49        'i',    'I',  // 0x0c  12  i I
       
    50        'j',    'J',  // 0x0d  13  j J
       
    51        'k',    'K',  // 0x0e  14  k K
       
    52        'l',    'L',  // 0x0f  15  l L
       
    53        ',',    '?',  // 0x10  16  m M
       
    54        'n',    'N',  // 0x11  17  n N
       
    55        'o',    'O',  // 0x12  18  o O
       
    56        'p',    'P',  // 0x13  19  p P
       
    57        'a',    'A',  // 0x14  20  q Q
       
    58        'r',    'R',  // 0x15  21  r R
       
    59        's',    'S',  // 0x16  22  s S
       
    60        't',    'T',  // 0x17  23  t T
       
    61        'u',    'U',  // 0x18  24  u U
       
    62        'v',    'V',  // 0x19  25  v V
       
    63        'z',    'Z',  // 0x1a  26  w W
       
    64        'x',    'X',  // 0x1b  27  x X
       
    65        'y',    'Y',  // 0x1c  28  y Y
       
    66        'w',    'W',  // 0x1d  29  z Z
       
    67        '&',    '1',  // 0x1e  30  1 !
       
    68     0x00e9,    '2',  // 0x1f  31  2 "
       
    69        '"',    '3',  // 0x20  32  3 £
       
    70       '\'',    '4',  // 0x21  33  4 $
       
    71        '(',    '5',  // 0x22  34  5 %
       
    72        '-',    '6',  // 0x23  35  6 ^
       
    73     0x00e8,    '7',  // 0x24  36  7 &
       
    74        '_',    '8',  // 0x25  37  8 *
       
    75     0x00e7,    '9',  // 0x26  38  9 (
       
    76     0x00e0,    '0',  // 0x27  39  0 )
       
    77     0x000d, 0xf845,  // 0x28  40  Enter (Return)
       
    78     0x001b, 0x001b,  // 0x29  41  Escape
       
    79     0x0008, 0x0008,  // 0x2a  42  Backspace (Delete)
       
    80     0x0009, 0x0009,  // 0x2b  43  Tab
       
    81        ' ',    ' ',  // 0x2c  44  Spacebar
       
    82        ')', 0x00b0,  // 0x2d  45  - _
       
    83        '=',    '+',  // 0x2e  46  = +
       
    84        '^', 0x00a8,  // 0x2f  47  [ {
       
    85        '$', 0x00a3,  // 0x30  48  ] }
       
    86        '*', 0x00b5,  // 0x31  49  US \ bar
       
    87        '*', 0x00b5,  // 0x32  50  # ~
       
    88        'm',    'M',  // 0x33  51  ; :
       
    89     0x00f9,    '%',  // 0x34  52  ' @
       
    90     0x00b2,      0,  // 0x35  53  Grave/not/bar
       
    91        ';',    '.',  // 0x36  54  , <
       
    92        ':',    '/',  // 0x37  55  . >
       
    93        '!', 0x00a7,  // 0x38  56  / ?
       
    94          0,      0,  // 0x39  57  Caps Lock
       
    95     0xf816, 0xf816,  // 0x3a  58  F1
       
    96     0xf817, 0xf817,  // 0x3b  59  F2
       
    97     0xf818, 0xf818,  // 0x3c  60  F3
       
    98     0xf819, 0xf819,  // 0x3d  61  F4
       
    99     0xf81a, 0xf81a,  // 0x3e  62  F5
       
   100     0xf81b, 0xf81b,  // 0x3f  63  F6
       
   101     0xf81c, 0xf81c,  // 0x40  64  F7
       
   102     0xf81d, 0xf81d,  // 0x41  65  F8
       
   103     0xf81e, 0xf81e,  // 0x42  66  F9
       
   104     0xf81f, 0xf81f,  // 0x43  67  F10
       
   105     0xf820, 0xf820,  // 0x44  68  F11
       
   106     0xf821, 0xf821,  // 0x45  69  F12
       
   107     0xf800, 0xf800,  // 0x46  70  Print Screen
       
   108     0xf815, 0xf815,  // 0x47  71  Scroll Lock
       
   109     0xf801, 0xf801,  // 0x48  72  Break / Pause
       
   110     0xf806, 0xf806,  // 0x49  73  Insert
       
   111     0xf802, 0xf802,  // 0x4a  74  Home
       
   112     0xf804, 0xf804,  // 0x4b  75  Page Up
       
   113     0x007f, 0x007f,  // 0x4c  76  Delete
       
   114     0xf803, 0xf803,  // 0x4d  77  End
       
   115     0xf805, 0xf805,  // 0x4e  78  Page Down
       
   116     0xf808, 0xf808,  // 0x4f  79  Right Arrow
       
   117     0xf807, 0xf807,  // 0x50  80  Left Arrow
       
   118     0xf80a, 0xf80a,  // 0x51  81  Down Arrow
       
   119     0xf809, 0xf809,  // 0x52  82  Up Arrow
       
   120          0,      0,  // 0x53  83  Num Lock
       
   121        '/',    '/',  // 0x54  84  Keypad /
       
   122        '*',    '*',  // 0x55  85  Keypad *
       
   123        '-',    '-',  // 0x56  86  Keypad -
       
   124        '+',    '+',  // 0x57  87  Keypad +
       
   125     0x000d, 0xf845,  // 0x58  88  Keypad Enter
       
   126        '1', 0xf803,  // 0x59  89  Keypad 1 End
       
   127        '2', 0xf80a,  // 0x5a  90  Keypad 2 Down
       
   128        '3', 0xf805,  // 0x5b  91  Keypad 3 PageDn
       
   129        '4', 0xf807,  // 0x5c  92  Keypad 4 Left
       
   130        '5',    ' ',  // 0x5d  93  Keypad 5
       
   131        '6', 0xf808,  // 0x5e  94  Keypad 6 Right
       
   132        '7', 0xf802,  // 0x5f  95  Keypad 7 Home
       
   133        '8', 0xf809,  // 0x60  96  Keypad 8 Up
       
   134        '9', 0xf804,  // 0x61  97  Keypad 9 PageUp
       
   135        '0', 0xf806,  // 0x62  98  Keypad 0 Insert
       
   136        '.', 0x007f,  // 0x63  99  Keypad . Delete
       
   137        '<',    '>',  // 0x64 100  \ | (near left shift)
       
   138     0xf843, 0xf863,  // 0x65 101  Application key
       
   139          0,      0,  // 0x66 102  Keyboard power
       
   140        '=',    '=',  // 0x67 103  Keypad =
       
   141     };
       
   142 
       
   143 // ----------------------------------------------------------------------
       
   144 
       
   145 const CStandardKeyboardLayout::TSpecialKey CFrenchLayout::KSpecialCases[] =
       
   146     {
       
   147     // HID usage, modifiers, Unicode            // Usage name (UK)
       
   148     { 0x28, THidModifier::ECtrl,      0xf845 }, // Enter (Return)
       
   149     { 0x2c, THidModifier::ECtrl,      0x0020 }, // Spacebar
       
   150     { 0x58, THidModifier::ECtrl,      0xf845 }, // Keypad Enter
       
   151     { 0x2b, THidModifier::EAlt,       0xf852 }, // Tab
       
   152     { 0x08, THidModifier::EAltCtrl,   0x20ac }, // e E
       
   153     { 0x1f, THidModifier::EAltCtrl,   0x007e }, // 2 "
       
   154     { 0x20, THidModifier::EAltCtrl,   0x0023 }, // 3 £
       
   155     { 0x21, THidModifier::EAltCtrl,   0x007b }, // 4 $
       
   156     { 0x22, THidModifier::EAltCtrl,   0x005b }, // 5 %
       
   157     { 0x23, THidModifier::EAltCtrl,   0x007c }, // 6 ^
       
   158     { 0x24, THidModifier::EAltCtrl,   0x0060 }, // 7 &
       
   159     { 0x25, THidModifier::EAltCtrl,   0x005c }, // 8 *
       
   160     { 0x26, THidModifier::EAltCtrl,   0x005e }, // 9 (
       
   161     { 0x27, THidModifier::EAltCtrl,   0x0040 }, // 0 )
       
   162     { 0x2d, THidModifier::EAltCtrl,   0x005d }, // - _
       
   163     { 0x2e, THidModifier::EAltCtrl,   0x007d }, // = +
       
   164     { 0x30, THidModifier::EAltCtrl,   0x00a4 }, // ] }
       
   165     { 0x4c, THidModifier::EAltCtrl,   0xf844 }, // Delete
       
   166     { 0x63, THidModifier::EAltCtrl,   0xf844 }, // Keypad . Delete
       
   167     { 0xe3, THidModifier::EFunc,      0xf842 }, // Left GUI key
       
   168     { 0xe7, THidModifier::EFunc,      0xf843 }, // Right GUI key
       
   169     { 0xe3, THidModifier::EFuncShift, 0xf862 }, // Left GUI key
       
   170     { 0xe7, THidModifier::EFuncShift, 0xf863 }, // Right GUI key
       
   171     { 0x00 } // end of table
       
   172     };
       
   173 
       
   174 // ----------------------------------------------------------------------
       
   175 
       
   176 // 0x007e (Tilde)
       
   177 //
       
   178 const CDeadKeyLayout::TKeyPair CFrenchLayout::KDeadKeyTilde[] =
       
   179     {
       
   180     { 0x0020, 0x007e },    // space
       
   181     { 0x0041, 0x00c3 },    // A
       
   182     { 0x004e, 0x00d1 },    // N
       
   183     { 0x004f, 0x00d5 },    // O
       
   184     { 0x0061, 0x00e3 },    // a
       
   185     { 0x006e, 0x00f1 },    // n
       
   186     { 0x006f, 0x00f5 },    // o
       
   187     { 0x0000 }             // end of table
       
   188     };
       
   189 
       
   190 // 0x0060 (Grave accent)
       
   191 //
       
   192 const CDeadKeyLayout::TKeyPair CFrenchLayout::KDeadKeyGrave[] =
       
   193     {
       
   194     { 0x0020, 0x0060 },    // space
       
   195     { 0x0041, 0x00c0 },    // A
       
   196     { 0x0045, 0x00c8 },    // E
       
   197     { 0x0049, 0x00cc },    // I
       
   198     { 0x004f, 0x00d2 },    // O
       
   199     { 0x0055, 0x00d9 },    // U
       
   200     { 0x0061, 0x00e0 },    // a
       
   201     { 0x0065, 0x00e8 },    // e
       
   202     { 0x0069, 0x00ec },    // i
       
   203     { 0x006f, 0x00f2 },    // o
       
   204     { 0x0075, 0x00f9 },    // u
       
   205     { 0x0000 }             // end of table
       
   206     };
       
   207 
       
   208 // 0x005e (Circumflex accent)
       
   209 //
       
   210 const CDeadKeyLayout::TKeyPair CFrenchLayout::KDeadKeyCircumflex[] =
       
   211     {
       
   212     { 0x0020, 0x005e },    // space
       
   213     { 0x0041, 0x00c2 },    // A
       
   214     { 0x0045, 0x00ca },    // E
       
   215     { 0x0049, 0x00ce },    // I
       
   216     { 0x004f, 0x00d4 },    // O
       
   217     { 0x0055, 0x00db },    // U
       
   218     { 0x0061, 0x00e2 },    // a
       
   219     { 0x0065, 0x00ea },    // e
       
   220     { 0x0069, 0x00ee },    // i
       
   221     { 0x006f, 0x00f4 },    // o
       
   222     { 0x0075, 0x00fb },    // u
       
   223     { 0x0000 }             // end of table
       
   224     };
       
   225 
       
   226 // 0x00a8 (Diaeresis)
       
   227 //
       
   228 const CDeadKeyLayout::TKeyPair CFrenchLayout::KDeadKeyDiaeresis[] =
       
   229     {
       
   230     { 0x0020, 0x00a8 },    // space
       
   231     { 0x0041, 0x00c4 },    // A
       
   232     { 0x0045, 0x00cb },    // E
       
   233     { 0x0049, 0x00cf },    // I
       
   234     { 0x004f, 0x00d6 },    // O
       
   235     { 0x0055, 0x00dc },    // U
       
   236     { 0x0061, 0x00e4 },    // a
       
   237     { 0x0065, 0x00eb },    // e
       
   238     { 0x0069, 0x00ef },    // i
       
   239     { 0x006f, 0x00f6 },    // o
       
   240     { 0x0075, 0x00fc },    // u
       
   241     { 0x0079, 0x00ff },    // y
       
   242     { 0x0000 }             // end of table
       
   243     };
       
   244 
       
   245 // ----------------------------------------------------------------------
       
   246 
       
   247 const CDeadKeyLayout::TIndexPair CFrenchLayout::KDeadKeyIndex[] =
       
   248     {
       
   249     { 0x007e, KDeadKeyTilde },
       
   250     { 0x0060, KDeadKeyGrave },
       
   251     { 0x005e, KDeadKeyCircumflex },
       
   252     { 0x00a8, KDeadKeyDiaeresis },
       
   253     { 0x0000 } // end of table
       
   254     };
       
   255 
       
   256 // ----------------------------------------------------------------------
       
   257 
       
   258 CFrenchLayout::CFrenchLayout()
       
   259     : CDeadKeyLayout(KColumnMap, sizeof (KColumnMap),
       
   260         KKeyCodes, sizeof (KKeyCodes), KSpecialCases, KDeadKeyIndex)
       
   261     {
       
   262     // nothing else to do
       
   263     }
       
   264 
       
   265 TBool CFrenchLayout::ChangesWithCapsLock(TInt aHidKey,
       
   266     THidModifier aModifiers) const
       
   267     {
       
   268     if (aModifiers.None() || aModifiers.ShiftOnly())
       
   269         {
       
   270         // Additional keys that should behave as if shift is pressed
       
   271         // whenever caps lock is active:
       
   272         //
       
   273         TBool isExtraCapsKey = 
       
   274             (aHidKey == 0x1e) ||  // 1 !
       
   275             (aHidKey == 0x1f) ||  // 2 "
       
   276             (aHidKey == 0x20) ||  // 3 £
       
   277             (aHidKey == 0x21) ||  // 4 $
       
   278             (aHidKey == 0x22) ||  // 5 %
       
   279             (aHidKey == 0x23) ||  // 6 ^
       
   280             (aHidKey == 0x24) ||  // 7 &
       
   281             (aHidKey == 0x25) ||  // 8 *
       
   282             (aHidKey == 0x26) ||  // 9 (
       
   283             (aHidKey == 0x27) ||  // 0 )
       
   284             (aHidKey == 0x2d) ||  // - _
       
   285             (aHidKey == 0x2e) ||  // = +
       
   286             (aHidKey == 0x2f) ||  // [ {
       
   287             (aHidKey == 0x30) ||  // ] }
       
   288             (aHidKey == 0x31) ||  // US \ bar
       
   289             (aHidKey == 0x32) ||  // # ~
       
   290             (aHidKey == 0x33) ||  // ; :
       
   291             (aHidKey == 0x34) ||  // ' @
       
   292             (aHidKey == 0x36) ||  // , <
       
   293             (aHidKey == 0x37) ||  // . >
       
   294             (aHidKey == 0x38);    // / ?
       
   295 
       
   296         if (isExtraCapsKey)
       
   297             return ETrue;
       
   298         }
       
   299 
       
   300     return CDeadKeyLayout::ChangesWithCapsLock(aHidKey, aModifiers);
       
   301     }
       
   302 
       
   303 
       
   304 TInt CFrenchLayout::LayoutId() const
       
   305     {
       
   306     DBG(RDebug::Print(_L("[HID]\tCFrenchLayout::LayoutId()")));
       
   307     return EFrench;
       
   308     }
       
   309 
       
   310 CKeyboardLayout* CFrenchLayout::NewL()
       
   311     {
       
   312     DBG(RDebug::Print(_L("[HID]\tCFrenchLayout::NewL()")));
       
   313     CKeyboardLayout* layout = new (ELeave) CFrenchLayout;
       
   314     return layout;
       
   315     }
       
   316