wgui_virtual_keyboard.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:59k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   wgui_virtual_keyboard.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Virtual keyboard - WGUI integration
  48.  *
  49.  * Author:
  50.  * -------
  51.  * -------
  52.  * -------
  53.  *
  54.  *============================================================================
  55.  *             HISTORY
  56.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  57.  *------------------------------------------------------------------------------
  58.  * removed!
  59.  *
  60.  * removed!
  61.  * removed!
  62.  * removed!
  63.  *
  64.  * removed!
  65.  * removed!
  66.  * removed!
  67.  *
  68.  * removed!
  69.  * removed!
  70.  * removed!
  71.  *
  72.  * removed!
  73.  * removed!
  74.  * removed!
  75.  *
  76.  * removed!
  77.  * removed!
  78.  * removed!
  79.  *
  80.  * removed!
  81.  * removed!
  82.  * removed!
  83.  *
  84.  *------------------------------------------------------------------------------
  85.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  86.  *============================================================================
  87.  ****************************************************************************/
  88. #include "PixtelDataTypes.h"
  89. #include "MMI_features.h"
  90. #include "gui_data_types.h"
  91. #include "gui.h"
  92. #include "gdi_include.h"
  93. #include "wgui.h"
  94. #include "wgui_virtual_keyboard.h"
  95. #include "wgui_categories_defs.h"
  96. #include "DebugInitDef.h"
  97. /***************************************************************************** 
  98. * Define
  99. *****************************************************************************/
  100. /* Dead keys (also as normal symbol) */
  101. #define  GRAVE_ACCENT            0x60   /* ` */
  102. #define  ACCUTE_ACCENT           0xB4
  103. #define  CIRCUMFLEX_ACCENT       0x5E   /* ^ */
  104. #define  DIAERESIS               0xA8
  105. #define  TILDE                   0x7E   /* ~ */
  106. /* Common european symbols */
  107. #define  EURO                    0x20AC
  108. /***************************************************************************** 
  109. * Typedef 
  110. *****************************************************************************/
  111. /***************************************************************************** 
  112. * Local Variable
  113. *****************************************************************************/
  114. /***************************************************************************** 
  115. * Local Function
  116. *****************************************************************************/
  117. /***************************************************************************** 
  118. * Global Variable
  119. *****************************************************************************/
  120. virtual_keyboard MMI_virtual_keyboard;
  121. /* Maximum required size of key image cache. */
  122. S32 MMI_virtual_keyboard_bitmap_cache_size;
  123. /****************************
  124.  * Standard layout
  125.  ****************************/
  126. static const gui_matrix_key_layout_struct gui_standard_matrix_layout = 
  127. {
  128.     MMI_VKBD_STANDARD_MATRIX_X, MMI_VKBD_STANDARD_MATRIX_Y,
  129.     MMI_VKBD_STANDARD_MATRIX_COLUMN, MMI_VKBD_STANDARD_MATRIX_ROW,
  130.     MMI_VKBD_STANDARD_MATRIX_WIDTH, MMI_VKBD_STANDARD_MATRIX_HEIGHT,
  131.     MMI_VKBD_MATRIX_KEY_WIDTH, MMI_VKBD_MATRIX_KEY_HEIGHT,
  132.     MMI_VKBD_MATRIX_KEY_H_GAP, MMI_VKBD_MATRIX_KEY_V_GAP
  133. };
  134. #ifdef __MMI_MAINLCD_240X320__
  135. static const gui_custom_key_layout_struct gui_standard_custom_key_layout[] = 
  136. {
  137.     {141, 2, 19, 19},
  138.     {161, 2, 19, 19},
  139.     {181, 2, 19, 19},
  140.     {201, 2, 38, 19},
  141.     {141, 22, 19, 19},
  142.     {161, 22, 19, 19},
  143.     {181, 22, 19, 19},
  144.     {201, 22, 38, 19},
  145.     {141, 42, 19, 19},
  146.     {161, 42, 39, 19},
  147.     {201, 42, 38, 19}
  148. };
  149. #else /* __MMI_MAINLCD_240X320__ */ 
  150. static const gui_custom_key_layout_struct gui_standard_custom_key_layout[] = 
  151. {
  152.     {106, 1, 14, 14},
  153.     {121, 1, 14, 14},
  154.     {136, 1, 14, 14},
  155.     {151, 1, 24, 14},
  156.     {106, 16, 14, 14},
  157.     {121, 16, 14, 14},
  158.     {136, 16, 14, 14},
  159.     {151, 16, 24, 14},
  160.     {106, 31, 14, 14},
  161.     {121, 31, 29, 14},
  162.     {151, 31, 24, 14}
  163. };
  164. #endif /* __MMI_MAINLCD_240X320__ */ 
  165. static const gui_keyboard_layout_struct gui_virtual_keyboard_standard_layout = 
  166. {
  167.     MMI_VKBD_STANDARD_WIDTH,
  168.     MMI_VKBD_STANDARD_HEIGHT,
  169.     1,
  170.     11,
  171.     &gui_standard_matrix_layout,
  172.     gui_standard_custom_key_layout,
  173.     IMG_VKBD_STANDARD
  174. };
  175. /* English lowercase */
  176. static const gui_keyboard_language_struct gui_keyboard_english_lowercase_string = 
  177. {
  178.     MMI_FALSE,
  179.     1,
  180.     11,
  181.     {
  182.      {'q', 'w', 'e', 'r', 't', 'y', 'u', ''},
  183.      {'a', 's', 'd', 'f', 'g', 'h', 'j', ''},
  184.      {'z', 'x', 'c', 'v', 'b', 'n', 'm', ''}
  185.      },
  186.     {'i', 'o', 'p', '', 'k', 'l', '.', '', '', '', ''},
  187.     {0, 0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE, IMG_VKBD_CUSTOM_CAPSLOCK,
  188.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  189.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  190.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  191.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  192.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  193.      GUI_VKBD_PEN_CAPSLOCK, GUI_VKBD_PEN_SPACE,
  194.      GUI_VKBD_PEN_SYMBPICKER}
  195. };
  196. /* English uppercase */
  197. static const gui_keyboard_language_struct gui_keyboard_english_uppercase_string = 
  198. {
  199.     MMI_FALSE,
  200.     1,
  201.     11,
  202.     {
  203.      {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', ''},
  204.      {'A', 'S', 'D', 'F', 'G', 'H', 'J', ''},
  205.      {'Z', 'X', 'C', 'V', 'B', 'N', 'M', ''}
  206.      },
  207.     {'I', 'O', 'P', '', 'K', 'L', '.', '', '', '', ''},
  208.     {0, 0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE, IMG_VKBD_CUSTOM_CAPSLOCK,
  209.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  210.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  211.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  212.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  213.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  214.      GUI_VKBD_PEN_CAPSLOCK, GUI_VKBD_PEN_SPACE,
  215.      GUI_VKBD_PEN_SYMBPICKER}
  216. };
  217. // #if defined(__MMI_LANG_TR_CHINESE__) || defined(__MMI_LANG_SM_CHINESE__)
  218. static const gui_keyboard_language_struct gui_keyboard_chinese_symbol_string = 
  219. {
  220.     MMI_FALSE,
  221.     1,
  222.     11,
  223.     {
  224.      {0x3002, 0xFF0C, 0xFF0E, 0x3001, 0xFF1B, 0xFF1A, 0xFF1F, ''},
  225.      {0x3010, 0x3011, 0x300A, 0x300B, 0x3008, 0x3009, 0x300C, ''},
  226.      {0x2018, 0x2019, 0x201C, 0x201D, 0x2190, 0x2192, 0x2193, ''}
  227.      },
  228.     {0xFF01, 0xFF08, 0xFF09, '', 0x300D, 0x300E, 0x300F, '', 0x2191, '', ''},
  229.     {0, 0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE, 0,
  230.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  231.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  232.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  233.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  234.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  235.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_SPACE,
  236.      GUI_VKBD_PEN_SYMBPICKER}
  237. };
  238. // #endif /* __MMI_LANG_TR_CHINESE__ || __MMI_LANG_SM_CHINESE__ */
  239. /****************************
  240.  * Extended layout
  241.  ****************************/
  242. static const gui_matrix_key_layout_struct gui_extended_matrix_layout = 
  243. {
  244.     MMI_VKBD_EXTENDED_MATRIX_X, MMI_VKBD_EXTENDED_MATRIX_Y,
  245.     MMI_VKBD_EXTENDED_MATRIX_COLUMN, MMI_VKBD_EXTENDED_MATRIX_ROW,
  246.     MMI_VKBD_EXTENDED_MATRIX_WIDTH, MMI_VKBD_EXTENDED_MATRIX_HEIGHT,
  247.     MMI_VKBD_MATRIX_KEY_WIDTH, MMI_VKBD_MATRIX_KEY_HEIGHT,
  248.     MMI_VKBD_MATRIX_KEY_H_GAP, MMI_VKBD_MATRIX_KEY_V_GAP
  249. };
  250. #ifdef __MMI_MAINLCD_240X320__
  251. static const gui_custom_key_layout_struct gui_extended_custom_key_layout[] = 
  252. {
  253.     {161, 2, 19, 19},
  254.     {181, 2, 19, 19},
  255.     {201, 2, 38, 19},
  256.     {161, 22, 19, 19},
  257.     {181, 22, 19, 19},
  258.     {201, 22, 38, 19},
  259.     {161, 42, 19, 19},
  260.     {181, 42, 19, 19},
  261.     {201, 42, 38, 19},
  262.     {161, 62, 39, 19},
  263.     {201, 62, 38, 19}
  264. };
  265. #else /* __MMI_MAINLCD_240X320__ */ 
  266. static const gui_custom_key_layout_struct gui_extended_custom_key_layout[] = 
  267. {
  268.     {121, 1, 14, 14},
  269.     {136, 1, 14, 14},
  270.     {151, 1, 24, 14},
  271.     {121, 16, 14, 14},
  272.     {136, 16, 14, 14},
  273.     {151, 16, 24, 14},
  274.     {121, 31, 14, 14},
  275.     {136, 31, 14, 14},
  276.     {151, 31, 24, 14},
  277.     {121, 46, 29, 14},
  278.     {151, 46, 24, 14}
  279. };
  280. #endif /* __MMI_MAINLCD_240X320__ */ 
  281. static const gui_keyboard_layout_struct gui_virtual_keyboard_extended_layout = 
  282. {
  283.     MMI_VKBD_EXTENDED_WIDTH,
  284.     MMI_VKBD_EXTENDED_HEIGHT,
  285.     1,
  286.     11,
  287.     &gui_extended_matrix_layout,
  288.     gui_extended_custom_key_layout,
  289.     IMG_VKBD_EXTENDED
  290. };
  291. /* Standard symbols */
  292. static const gui_keyboard_language_struct gui_keyboard_symbol_string = 
  293. {
  294.     MMI_FALSE,
  295.     1,
  296.     11,
  297.     {
  298.      {'x2e', 'x2c', '?', '!', '^', '"', '(', ')', ''},
  299.      {'_', ':', ';', '+', '-', '*', '/', '=', ''},
  300.      {'<', '>', 0xA3, 0x24, 0xA5, 0xA7, 0x20AC, 0xA4, ''},
  301.      {'{', '}', '~', '#', '`', ''', 0xA9, '|'} /* Note that 0xA9 is not standard GSM 7-bit character */
  302.      },
  303.     {'@', '\', '', '%', '&', '', '[', ']', '', '', ''},
  304.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  305.      0, 0, IMG_VKBD_CUSTOM_ENTER,
  306.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  307.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  308.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  309.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_NEWLINE,
  310.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  311. };
  312. #ifdef __MMI_LANG_SPANISH__
  313. static const gui_keyboard_language_struct gui_keyboard_spanish_lowercase_string = 
  314. {
  315.     MMI_TRUE,
  316.     1,
  317.     11,
  318.     {
  319.      {GRAVE_ACCENT, ACCUTE_ACCENT, CIRCUMFLEX_ACCENT, DIAERESIS, TILDE,
  320.       '.', 0xBA, 0xA1},
  321.      {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', ''},
  322.      {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', ''},
  323.      {'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', ''},
  324.      },
  325.     {0xF1, 0xE7, '', 'o', 'p', '', 'l', '', '', '', ''},
  326.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  327.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  328.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  329.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  330.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  331.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  332.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  333. };
  334. static const gui_keyboard_language_struct gui_keyboard_spanish_uppercase_string = 
  335. {
  336.     MMI_TRUE,
  337.     1,
  338.     11,
  339.     {
  340.      {GRAVE_ACCENT, ACCUTE_ACCENT, CIRCUMFLEX_ACCENT, DIAERESIS, TILDE,
  341.       '.', 0xAA, 0xBF},
  342.      {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', ''},
  343.      {'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', ''},
  344.      {'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', ''},
  345.      },
  346.     {0xD1, 0xC7, '', 'O', 'P', '', 'L', '', '', '', ''},
  347.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  348.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  349.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  350.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  351.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  352.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  353.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  354. };
  355. #endif /* __MMI_LANG_SPANISH__ */ 
  356. //KP Jerry add on 2007-4-29 start
  357. #ifdef __MMI_LANG_VIETNAMESE__
  358. #endif /* __MMI_LANG_VIETNAMESE__ */ 
  359. //KP Jerry add on 2007-4-29 end
  360. #ifdef __MMI_LANG_FRENCH__
  361. static const gui_keyboard_language_struct gui_keyboard_french_lowercase_string = 
  362. {
  363.     MMI_TRUE,
  364.     1,
  365.     11,
  366.     {
  367.      {CIRCUMFLEX_ACCENT, DIAERESIS, TILDE, GRAVE_ACCENT,
  368.       '.', 0xE0, 0xE7, 0xE9},
  369.      {'a', 'z', 'e', 'r', 't', 'y', 'u', 'i', ''},
  370.      {'q', 's', 'd', 'f', 'g', 'h', 'j', 'k', ''},
  371.      {'w', 'x', 'c', 'v', 'b', 'n', 0xF9, ',', ''},
  372.      },
  373.     {0xE8, 'm', '', 'o', 'p', '', 'l', '', '', '', ''},
  374.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  375.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  376.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  377.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  378.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  379.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  380.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  381. };
  382. static const gui_keyboard_language_struct gui_keyboard_french_uppercase_string = 
  383. {
  384.     MMI_TRUE,
  385.     1,
  386.     11,
  387.     {
  388.      {CIRCUMFLEX_ACCENT, DIAERESIS, TILDE, GRAVE_ACCENT,
  389.       '.', 0xB0, EURO, 0xA7},
  390.      {'A', 'Z', 'E', 'R', 'T', 'Y', 'U', 'I', ''},
  391.      {'Q', 'S', 'D', 'F', 'G', 'H', 'J', 'K', ''},
  392.      {'W', 'X', 'C', 'V', 'B', 'N', 0xB5, ',', ''},
  393.      },
  394.     {0xA3, 'M', '', 'O', 'P', '', 'L', '', '', '', ''},
  395.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  396.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  397.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  398.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  399.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  400.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  401.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  402. };
  403. #endif /* __MMI_LANG_FRENCH__ */ 
  404. #ifdef __MMI_LANG_PORTUGUESE__
  405. static const gui_keyboard_language_struct gui_keyboard_portuguese_lowercase_string = 
  406. {
  407.     MMI_TRUE,
  408.     1,
  409.     11,
  410.     {
  411.      {CIRCUMFLEX_ACCENT, DIAERESIS, TILDE, GRAVE_ACCENT, ACCUTE_ACCENT,
  412.       '.', 0xBA, 0xA3},
  413.      {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', ''},
  414.      {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', ''},
  415.      {'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', ''},
  416.      },
  417.     {0xA7, 0xE7, '', 'o', 'p', '', 'l', '', '', '', ''},
  418.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  419.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  420.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  421.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  422.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  423.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  424.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  425. };
  426. static const gui_keyboard_language_struct gui_keyboard_portuguese_uppercase_string = 
  427. {
  428.     MMI_TRUE,
  429.     1,
  430.     11,
  431.     {
  432.      {CIRCUMFLEX_ACCENT, DIAERESIS, TILDE, GRAVE_ACCENT, ACCUTE_ACCENT,
  433.       0xBA, 0xAA, 0xAB},
  434.      {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', ''},
  435.      {'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', ''},
  436.      {'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', ''},
  437.      },
  438.     {0xBB, 0xC7, '', 'O', 'P', '', 'L', '', '', '', ''},
  439.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  440.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  441.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  442.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  443.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  444.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  445.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  446. };
  447. #endif /* __MMI_LANG_PORTUGUESE__ */ 
  448. #ifdef __MMI_LANG_GERMAN__
  449. static const gui_keyboard_language_struct gui_keyboard_german_lowercase_string = 
  450. {
  451.     MMI_TRUE,
  452.     1,
  453.     11,
  454.     {
  455.      {CIRCUMFLEX_ACCENT, ACCUTE_ACCENT, GRAVE_ACCENT, '.', 0xB0, 0xB5, 0xDF, 0xE4},
  456.      {'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', ''},
  457.      {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', ''},
  458.      {'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', ''},
  459.      },
  460.     {0xFC, 0xF6, '', 'o', 'p', '', 'l', '', '', '', ''},
  461.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  462.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  463.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  464.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  465.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  466.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  467.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  468. };
  469. static const gui_keyboard_language_struct gui_keyboard_german_uppercase_string = 
  470. {
  471.     MMI_TRUE,
  472.     1,
  473.     11,
  474.     {
  475.      {CIRCUMFLEX_ACCENT, ACCUTE_ACCENT, GRAVE_ACCENT, '.', 0xA7, 0xB2, 0xB3, 0xC4},
  476.      {'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', ''},
  477.      {'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', ''},
  478.      {'Y', 'X', 'C', 'V', 'B', 'N', 'M', ',', ''},
  479.      },
  480.     {0xDC, 0xD6, '', 'O', 'P', '', 'L', '', '', '', ''},
  481.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  482.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  483.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  484.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  485.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  486.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  487.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  488. };
  489. #endif /* __MMI_LANG_GERMAN__ */ 
  490. #ifdef __MMI_LANG_ITALIAN__
  491. static const gui_keyboard_language_struct gui_keyboard_italian_lowercase_string = 
  492. {
  493.     MMI_FALSE,
  494.     1,
  495.     11,
  496.     {
  497.      {'.', CIRCUMFLEX_ACCENT, 0xA3, 0xE9, 0xE8, 0xE0, 0xF9, 0xEC},
  498.      {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', ''},
  499.      {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', ''},
  500.      {'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', ''},
  501.      },
  502.     {0xF2, 0xE7, '', 'o', 'p', '', 'l', '', '', '', ''},
  503.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  504.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  505.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  506.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  507.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  508.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  509.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  510. };
  511. static const gui_keyboard_language_struct gui_keyboard_italian_uppercase_string = 
  512. {
  513.     MMI_FALSE,
  514.     1,
  515.     11,
  516.     {
  517.      {'.', 0xA7, 0xA3, 0xE9, 0xE8, 0xE0, 0xF9, 0xEC},
  518.      {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', ''},
  519.      {'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', ''},
  520.      {'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', ''},
  521.      },
  522.     {0xF2, 0xE7, '', 'O', 'P', '', 'L', '', '', '', ''},
  523.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  524.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  525.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  526.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  527.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  528.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  529.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  530. };
  531. #endif /* __MMI_LANG_ITALIAN__ */ 
  532. #ifdef __MMI_LANG_RUSSIAN__
  533. static const gui_keyboard_language_struct gui_keyboard_russian_lowercase_string = 
  534. {
  535.     MMI_FALSE,
  536.     1,
  537.     11,
  538.     {
  539.      {0x451, '.', DIAERESIS, '!', 0x445, 0x44A, 0x44D, 0x431},
  540.      {0x439, 0x446, 0x443, 0x43A, 0x435, 0x43D, 0x433, 0x448, ''},
  541.      {0x444, 0x44B, 0x432, 0x430, 0x43F, 0x440, 0x43E, 0x43B, ''},
  542.      {0x44F, 0x447, 0x441, 0x43C, 0x438, 0x442, 0x44C, ',', ''},
  543.      },
  544.     {0x44E, '@'/*0x2116*/, '', 0x449, 0x437, '', 0x434, 0x436, '', '', ''},     //KP Jerry modify 0x2116 to '@' for avoid font display error on 2007-4-29
  545.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  546.      0, 0, IMG_VKBD_CUSTOM_CAPSLOCK,
  547.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  548.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  549.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  550.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CAPSLOCK,
  551.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  552. };
  553. static const gui_keyboard_language_struct gui_keyboard_russian_uppercase_string = 
  554. {
  555.     MMI_FALSE,
  556.     1,
  557.     11,
  558.     {
  559.      {0x401, '.', DIAERESIS, '!', 0x425, 0x42A, 0x42D, 0x411},
  560.      {0x419, 0x426, 0x423, 0x41A, 0x415, 0x41D, 0x413, 0x428, ''},
  561.      {0x424, 0x42B, 0x412, 0x410, 0x41F, 0x420, 0x41E, 0x41B, ''},
  562.      {0x42F, 0x427, 0x421, 0x41C, 0x418, 0x422, 0x42C, ',', ''},
  563.      },
  564.     {0x42E, '@'/*0x2116*/, '', 0x429, 0x417, '', 0x414, 0x416, '', '', ''},     //KP Jerry modify 0x2116 to '@' for avoid font display error on 2007-4-29
  565.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  566.      0, 0, IMG_VKBD_CUSTOM_CAPSLOCK,
  567.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  568.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  569.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  570.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CAPSLOCK,
  571.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  572. };
  573. #endif /* __MMI_LANG_RUSSIAN__ */ 
  574. #ifdef __MMI_LANG_TURKISH__
  575. static const gui_keyboard_language_struct gui_keyboard_turkish_lowercase_string = 
  576. {
  577.     MMI_TRUE,
  578.     1,
  579.     11,
  580.     {
  581.      {CIRCUMFLEX_ACCENT, ACCUTE_ACCENT, GRAVE_ACCENT, DIAERESIS, TILDE, 0x15F, 0x62, 0x78},
  582.      {0x66, 0x67, 0x11F, 0x131, 0x6F, 0x64, 0x72, 0x6E, ''},
  583.      {0x75, 0x69, 0x65, 0x61, 0x74, 0x6B, 0x6D, 0x6C, ''},
  584.      {0x6A, 0xF6, 0x76, 0x63, 0xE7, 0x7A, 0x73, ',', ''},
  585.      },
  586.     {0x71, 0x77, '', 0x68, 0x70, '', 0x79, '', '', '', ''},
  587.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  588.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  589.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  590.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  591.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  592.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  593.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  594. };
  595. static const gui_keyboard_language_struct gui_keyboard_turkish_uppercase_string = 
  596. {
  597.     MMI_TRUE,
  598.     1,
  599.     11,
  600.     {
  601.      {CIRCUMFLEX_ACCENT, ACCUTE_ACCENT, GRAVE_ACCENT, DIAERESIS, TILDE, 0x15E, 0x42, 0x58},
  602.      {0x46, 0x47, 0x11E, 0x49, 0x4F, 0x44, 0x52, 0x4E, ''},
  603.      {0x55, 0x130, 0x45, 0x41, 0x54, 0x4B, 0x4D, 0x4C, ''},
  604.      {0x4A, 0xD6, 0x56, 0x43, 0xC7, 0x5A, 0x53, ',', ''},
  605.      },
  606.     {0x51, 0x57, '', 0x48, 0x50, '', 0x59, '', '', '', ''},
  607.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  608.      0, IMG_VKBD_CUSTOM_EUROSYMB, IMG_VKBD_CUSTOM_CAPSLOCK,
  609.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  610.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  611.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  612.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_EUROSYMB, GUI_VKBD_PEN_CAPSLOCK,
  613.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  614. };
  615. #endif /* __MMI_LANG_TURKISH__ */ 
  616. #ifdef __MMI_VKBD_EUROPEAN_SUPPORT__
  617. static const gui_keyboard_language_struct gui_keyboard_european_symbols_string = 
  618. {
  619.     MMI_TRUE,
  620.     1,
  621.     11,
  622.     {
  623.      {0x40, 0xA1, 0xA2, 0xA3, 0xA4, 0xA7, 0xA9, 0xAA, ''},
  624.      {0xAE, 0xB0, 0xB9, 0xBA, 0xB2, 0xB3, 0xB5, 0xB6, ''},
  625.      {0xBD, 0xBE, 0xBF, 0xC6, 0xC7, 0xD8, 0xDF, 0xE6, ''},
  626.      {0x11E, 0x11F, 0x130, 0x131, 0x15E, 0x15F, 0x20AC, ',', ''},
  627.      },
  628.     {0xAB, 0xAC, '', 0xBB, 0xBC, '', 0xE7, 0xF8, '', '', ''},
  629.     {0, 0, IMG_VKBD_CUSTOM_HIDE, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE,
  630.      0, 0, IMG_VKBD_CUSTOM_ENTER,
  631.      IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_SYMBPICKER},
  632.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  633.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE,
  634.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_NEWLINE,
  635.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_SYMBPICKER}
  636. };
  637. #endif /* __MMI_VKBD_EUROPEAN_SUPPORT__ */ 
  638. /****************************
  639.  * Number layout
  640.  ****************************/
  641. static const gui_matrix_key_layout_struct gui_number_matrix_layout = 
  642. {
  643.     MMI_VKBD_NUMBER_MATRIX_X, MMI_VKBD_NUMBER_MATRIX_Y,
  644.     MMI_VKBD_NUMBER_MATRIX_COLUMN, MMI_VKBD_NUMBER_MATRIX_ROW,
  645.     MMI_VKBD_NUMBER_MATRIX_WIDTH, MMI_VKBD_NUMBER_MATRIX_HEIGHT,
  646.     MMI_VKBD_MATRIX_KEY_WIDTH, MMI_VKBD_MATRIX_KEY_HEIGHT,
  647.     MMI_VKBD_MATRIX_KEY_H_GAP, MMI_VKBD_MATRIX_KEY_V_GAP
  648. };
  649. #ifdef __MMI_MAINLCD_240X320__
  650. static const gui_custom_key_layout_struct gui_number_custom_key_layout[] = 
  651. {
  652.     {161, 2, 19, 19},
  653.     {181, 2, 19, 19},
  654.     {201, 2, 38, 19},
  655.     {161, 22, 39, 19},
  656.     {201, 22, 38, 19}
  657. };
  658. #else /* __MMI_MAINLCD_240X320__ */ 
  659. static const gui_custom_key_layout_struct gui_number_custom_key_layout[] = 
  660. {
  661.     {121, 1, 14, 14},
  662.     {136, 1, 14, 14},
  663.     {151, 1, 24, 14},
  664.     {121, 16, 29, 14},
  665.     {151, 16, 24, 14}
  666. };
  667. #endif /* __MMI_MAINLCD_240X320__ */ 
  668. static const gui_keyboard_layout_struct gui_virtual_keyboard_number_layout = 
  669. {
  670.     MMI_VKBD_NUMBER_WIDTH,
  671.     MMI_VKBD_NUMBER_HEIGHT,
  672.     1,
  673.     5,
  674.     &gui_number_matrix_layout,
  675.     gui_number_custom_key_layout,
  676.     IMG_VKBD_NUMBER
  677. };
  678. static const gui_keyboard_language_struct gui_keyboard_number_string = 
  679. {
  680.     MMI_FALSE,
  681.     1,
  682.     5,
  683.     {
  684.      {'0', '1', '2', '3', '4', '5', '6', '7', ''},
  685.      {'*', '/', '+', '-', '.', '%', '$', '=', ''}
  686.      },
  687.     {'8', '9', '', '', ''},
  688.     {0, 0, IMG_VKBD_CUSTOM_HIDE, IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_BACKSPACE},
  689.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  690.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_BAKSPACE}
  691. };
  692. static const gui_keyboard_language_struct gui_keyboard_phone_number_string = 
  693. {
  694.     MMI_FALSE,
  695.     1,
  696.     5,
  697.     {
  698.      {'0', '1', '2', '3', '4', '5', '6', '7', ''},
  699.      {'*', '#', '+', '-', 'p', 'w', '(', ')', ''}
  700.      },
  701.     {'8', '9', '', '', ''},
  702.     {0, 0, IMG_VKBD_CUSTOM_HIDE, IMG_VKBD_CUSTOM_SPACE, IMG_VKBD_CUSTOM_BACKSPACE},
  703.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  704.      GUI_VKBD_PEN_SPACE, GUI_VKBD_PEN_BAKSPACE}
  705. };
  706. /****************************
  707.  * Tray layout
  708.  ****************************/
  709. static const gui_matrix_key_layout_struct gui_tray_matrix_layout = 
  710. {
  711.     MMI_VKBD_TRAY_MATRIX_X, MMI_VKBD_TRAY_MATRIX_Y,
  712.     MMI_VKBD_TRAY_MATRIX_COLUMN, MMI_VKBD_TRAY_MATRIX_ROW,
  713.     MMI_VKBD_TRAY_MATRIX_WIDTH, MMI_VKBD_TRAY_MATRIX_HEIGHT,
  714.     MMI_VKBD_MATRIX_KEY_WIDTH, MMI_VKBD_MATRIX_KEY_HEIGHT,
  715.     MMI_VKBD_MATRIX_KEY_H_GAP, MMI_VKBD_MATRIX_KEY_V_GAP
  716. };
  717. #ifdef __MMI_MAINLCD_240X320__
  718. static const gui_custom_key_layout_struct gui_tray_custom_key_layout[] = 
  719. {
  720.     {101, 2, 19, 19},
  721.     {121, 2, 19, 19},
  722.     {141, 2, 19, 19},
  723.     {161, 2, 19, 19},
  724.     {181, 2, 19, 19},
  725.     {201, 2, 38, 19}
  726. };
  727. #else /* __MMI_MAINLCD_240X320__ */ 
  728. static const gui_custom_key_layout_struct gui_tray_custom_key_layout[] = 
  729. {
  730.     {76, 1, 14, 14},
  731.     {91, 1, 14, 14},
  732.     {106, 1, 14, 14},
  733.     {121, 1, 14, 14},
  734.     {136, 1, 14, 14},
  735.     {151, 1, 24, 14}
  736. };
  737. #endif /* __MMI_MAINLCD_240X320__ */ 
  738. static const gui_keyboard_layout_struct gui_virtual_keyboard_tray_layout = 
  739. {
  740.     MMI_VKBD_TRAY_WIDTH,
  741.     MMI_VKBD_TRAY_HEIGHT,
  742.     1,
  743.     6,
  744.     &gui_tray_matrix_layout,
  745.     gui_tray_custom_key_layout,
  746.     IMG_VKBD_TRAY
  747. };
  748. static const gui_keyboard_language_struct gui_keyboard_tray_string = 
  749. {
  750.     MMI_FALSE,
  751.     1,
  752.     6,
  753.     {'?', ',', ':', '.', ';'},
  754.     {'', '', '', '', '', ''},
  755.     {IMG_VKBD_CUSTOM_BRACKET, IMG_VKBD_CUSTOM_ENTER, IMG_VKBD_CUSTOM_SPACE,
  756.      IMG_VKBD_CUSTOM_BACKSPACE, IMG_VKBD_CUSTOM_SYMBPICKER, IMG_VKBD_CUSTOM_SHOW},
  757.     {GUI_VKBD_PEN_BRACKET, GUI_VKBD_PEN_NEWLINE, GUI_VKBD_PEN_SPACE,
  758.      GUI_VKBD_PEN_BAKSPACE, GUI_VKBD_PEN_SYMBPICKER, GUI_VKBD_PEN_SHOW}
  759. };
  760. /* Used in inline editor */
  761. static const gui_keyboard_language_struct gui_keyboard_empty_tray_string = 
  762. {
  763.     MMI_FALSE,
  764.     1,
  765.     6,
  766.     {'', '', '', '', ''},
  767.     {'', '', '', '', '', ''},
  768.     {0, 0, 0, 0, 0, 0},
  769.     {GUI_VKBD_PEN_NONE, GUI_VKBD_PEN_NONE, GUI_VKBD_PEN_NONE,
  770.      GUI_VKBD_PEN_NONE, GUI_VKBD_PEN_NONE, GUI_VKBD_PEN_NONE}
  771. };
  772. /* Used in inline editor */
  773. static const gui_keyboard_language_struct gui_keyboard_number_tray_string = 
  774. {
  775.     MMI_FALSE,
  776.     1,
  777.     6,
  778.     {'0', '1', '2', '3', '4'},
  779.     {'5', '6', '7', '8', '9', ''},
  780.     {0, 0, 0, 0, 0, IMG_VKBD_CUSTOM_BACKSPACE},
  781.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  782.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE}
  783. };
  784. /* Used in inline editor for 0~9 and dot(.) */
  785. static const gui_keyboard_language_struct gui_keyboard_number_dot_tray_string = 
  786. {
  787.     MMI_FALSE,
  788.     1,
  789.     6,
  790.     {'0', '1', '2', '3', '4'},
  791.     {'5', '6', '7', '8', '9', '.'},
  792.     {0, 0, 0, 0, 0, 0},
  793.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  794.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I}
  795. };
  796. /****************************
  797.  * Pinyin layout
  798.  ****************************/
  799. // #ifdef __MMI_LANG_SM_CHINESE__
  800. static const gui_matrix_key_layout_struct gui_pinyin_matrix_layout = 
  801. {
  802.     MMI_VKBD_PINYIN_MATRIX_X, MMI_VKBD_PINYIN_MATRIX_Y,
  803.     MMI_VKBD_PINYIN_MATRIX_COLUMN, MMI_VKBD_PINYIN_MATRIX_ROW,
  804.     MMI_VKBD_PINYIN_MATRIX_WIDTH, MMI_VKBD_PINYIN_MATRIX_HEIGHT,
  805.     MMI_VKBD_MATRIX_KEY_WIDTH, MMI_VKBD_MATRIX_KEY_HEIGHT,
  806.     MMI_VKBD_MATRIX_KEY_H_GAP, MMI_VKBD_MATRIX_KEY_V_GAP
  807. };
  808. #ifdef __MMI_MAINLCD_240X320__
  809. static const gui_custom_key_layout_struct gui_pinyin_custom_key_layout[] = 
  810. {
  811.     {1, 2, 19, 19},
  812.     {21, 2, 19, 19},
  813.     {41, 2, 159, 19},
  814.     {201, 2, 38, 19},
  815.     {181, 22, 19, 19},
  816.     {201, 22, 38, 19},
  817.     {181, 42, 19, 19},
  818.     {201, 42, 38, 19},
  819.     {181, 62, 58, 19}
  820. };
  821. #else /* __MMI_MAINLCD_240X320__ */ 
  822. static const gui_custom_key_layout_struct gui_pinyin_custom_key_layout[] = 
  823. {
  824.     {1, 1, 14, 14},
  825.     {16, 1, 14, 14},
  826.     {31, 1, 119, 14},
  827.     {151, 1, 24, 14},
  828.     {136, 16, 14, 14},
  829.     {151, 16, 24, 14},
  830.     {136, 31, 14, 14},
  831.     {151, 31, 24, 14},
  832.     {136, 46, 39, 14}
  833. };
  834. #endif /* __MMI_MAINLCD_240X320__ */ 
  835. static const gui_keyboard_layout_struct gui_virtual_keyboard_pinyin_layout = 
  836. {
  837.     MMI_VKBD_PINYIN_WIDTH,
  838.     MMI_VKBD_PINYIN_HEIGHT,
  839.     1,
  840.     9,
  841.     &gui_pinyin_matrix_layout,
  842.     gui_pinyin_custom_key_layout,
  843.     IMG_VKBD_PINYIN
  844. };
  845. static const gui_keyboard_language_struct gui_keyboard_pinyin_string = 
  846. {
  847.     MMI_FALSE,
  848.     1,
  849.     9,
  850.     {
  851.      {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', ''},
  852.      {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ''},
  853.      {'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', ''}
  854.      },
  855.     {':', '', '', '', 'p', '', '?', '', ''},
  856.     {0, IMG_VKBD_CUSTOM_BRACKET, IMG_VKBD_PINYIN_DISPAREA, IMG_VKBD_CUSTOM_HIDE,
  857.      0, IMG_VKBD_CUSTOM_BACKSPACE, 0, IMG_VKBD_CUSTOM_SYMBPICKER, IMG_VKBD_CUSTOM_SPACE},
  858.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BRACKET, GUI_VKBD_PEN_DISPLAY_AREA, GUI_VKBD_PEN_HIDE,
  859.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_BAKSPACE, GUI_VKBD_PEN_CHAR_I,
  860.      GUI_VKBD_PEN_SYMBPICKER, GUI_VKBD_PEN_SPACE}
  861. };
  862. // #endif /* __MMI_LANG_SM_CHINESE__ */
  863. /****************************
  864.  * Bopomo layout
  865.  ****************************/
  866. // #ifdef __MMI_LANG_TR_CHINESE__
  867. static const gui_matrix_key_layout_struct gui_bopomo_matrix_layout = 
  868. {
  869.     MMI_VKBD_BOPOMO_MATRIX_X, MMI_VKBD_BOPOMO_MATRIX_Y,
  870.     MMI_VKBD_BOPOMO_MATRIX_COLUMN, MMI_VKBD_BOPOMO_MATRIX_ROW,
  871.     MMI_VKBD_BOPOMO_MATRIX_WIDTH, MMI_VKBD_BOPOMO_MATRIX_HEIGHT,
  872.     MMI_VKBD_MATRIX_KEY_WIDTH, MMI_VKBD_MATRIX_KEY_HEIGHT,
  873.     MMI_VKBD_MATRIX_KEY_H_GAP, MMI_VKBD_MATRIX_KEY_V_GAP
  874. };
  875. #ifdef __MMI_MAINLCD_240X320__
  876. static const gui_custom_key_layout_struct gui_bopomo_custom_key_layout[] = 
  877. {
  878.     {1, 2, 19, 19},
  879.     {21, 2, 19, 19},
  880.     {41, 2, 19, 19},
  881.     {61, 2, 59, 19},
  882.     {121, 2, 19, 19},
  883.     {141, 2, 19, 19},
  884.     {161, 2, 19, 19},
  885.     {181, 2, 19, 19},
  886.     {201, 2, 38, 19},
  887.     {201, 22, 38, 19},
  888.     {201, 42, 38, 19},
  889.     {201, 62, 38, 19}
  890. };
  891. #else /* __MMI_MAINLCD_240X320__ */ 
  892. static const gui_custom_key_layout_struct gui_bopomo_custom_key_layout[] = 
  893. {
  894.     {1, 1, 14, 14},
  895.     {16, 1, 14, 14},
  896.     {31, 1, 14, 14},
  897.     {46, 1, 44, 14},
  898.     {91, 1, 14, 14},
  899.     {106, 1, 14, 14},
  900.     {121, 1, 14, 14},
  901.     {136, 1, 14, 14},
  902.     {151, 1, 24, 14},
  903.     {151, 16, 24, 14},
  904.     {151, 31, 24, 14},
  905.     {151, 46, 24, 14}
  906. };
  907. #endif /* __MMI_MAINLCD_240X320__ */ 
  908. static const gui_keyboard_layout_struct gui_virtual_keyboard_bopomo_layout = 
  909. {
  910.     MMI_VKBD_BOPOMO_WIDTH,
  911.     MMI_VKBD_BOPOMO_HEIGHT,
  912.     1,
  913.     12,
  914.     &gui_bopomo_matrix_layout,
  915.     gui_bopomo_custom_key_layout,
  916.     IMG_VKBD_BOPOMO
  917. };
  918. static const gui_keyboard_language_struct gui_keyboard_bopomo_string = 
  919. {
  920.     MMI_FALSE,
  921.     1,
  922.     12,
  923.     {
  924.      {0x3106, 0x310a, 0x3114, 0x310d, 0x3110, 0x3117, 0x3127, 0x311b, 0x311f, 0x3123},
  925.      {0x3107, 0x310b, 0x3115, 0x310e, 0x3111, 0x3118, 0x3128, 0x311c, 0x3120, 0x3124},
  926.      {0x3108, 0x310c, 0x3116, 0x310f, 0x3112, 0x3119, 0x3129, 0x311d, 0x3121, 0x3125},
  927.      },
  928.     {0x3105, 0x3109, 0x3113, '', 0x3126, 0x311a, 0x311e, 0x3122, '', '', '', ''},
  929.     {0, 0, 0, IMG_VKBD_BOPOMO_DISPAREA, 0, 0, 0, 0, IMG_VKBD_CUSTOM_HIDE, IMG_VKBD_CUSTOM_BACKSPACE,
  930.      IMG_VKBD_CUSTOM_SYMBPICKER, IMG_VKBD_CUSTOM_SPACE},
  931.     {GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  932.      GUI_VKBD_PEN_DISPLAY_AREA, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I,
  933.      GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_CHAR_I, GUI_VKBD_PEN_HIDE,
  934.      GUI_VKBD_PEN_BAKSPACE, GUI_VKBD_PEN_SYMBPICKER, GUI_VKBD_PEN_SPACE}
  935. };
  936. // #endif /* __MMI_LANG_TR_CHINESE__ */
  937. /****************************
  938.  * Language table
  939.  ****************************/
  940. /* The order should be the same as gui_virtual_keyboard_language_enum */
  941. const gui_keyboard_lang_map_struct MMI_virtual_keyboard_language_map[GUI_VIRTUAL_KEYBOARD_MAX_LANG] = 
  942. {
  943.     {&gui_virtual_keyboard_standard_layout, &gui_keyboard_english_lowercase_string},
  944.     {&gui_virtual_keyboard_standard_layout, &gui_keyboard_english_uppercase_string},
  945.     {&gui_virtual_keyboard_extended_layout, &gui_keyboard_symbol_string},
  946.     {&gui_virtual_keyboard_tray_layout, &gui_keyboard_tray_string},
  947.     {&gui_virtual_keyboard_number_layout, &gui_keyboard_number_string},
  948.     {&gui_virtual_keyboard_number_layout, &gui_keyboard_phone_number_string},
  949.     {&gui_virtual_keyboard_tray_layout, &gui_keyboard_empty_tray_string},
  950.     {&gui_virtual_keyboard_tray_layout, &gui_keyboard_number_tray_string},
  951.     {&gui_virtual_keyboard_tray_layout, &gui_keyboard_number_dot_tray_string}
  952.     /* MTK Terry Temp Solution for Custom Release */
  953.     // #ifdef __MMI_LANG_SM_CHINESE__
  954.     , {&gui_virtual_keyboard_pinyin_layout, &gui_keyboard_pinyin_string}
  955.     //#endif
  956.     //#ifdef __MMI_LANG_TR_CHINESE__
  957.     , {&gui_virtual_keyboard_bopomo_layout, &gui_keyboard_bopomo_string}
  958.     //#endif
  959.     //#if defined(__MMI_LANG_TR_CHINESE__) || defined(__MMI_LANG_SM_CHINESE__)
  960.     , {&gui_virtual_keyboard_standard_layout, &gui_keyboard_chinese_symbol_string}
  961.     // #endif
  962.     /* Asia-pacific */
  963. #ifdef __MMI_LANG_THAI__
  964. #endif 
  965. #ifdef __MMI_LANG_INDONESIAN__
  966. #endif 
  967. #ifdef __MMI_LANG_MALAY__
  968. #endif 
  969. #ifdef __MMI_LANG_VIETNAMESE__
  970. #endif 
  971.     /* Hindi */
  972. #ifdef __MMI_LANG_HINDI__
  973. #endif 
  974.     /* Arabic */
  975. #ifdef __MMI_LANG_ARABIC__
  976. #endif 
  977.     /* Europe */
  978. #ifdef __MMI_LANG_SPANISH__
  979.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_spanish_lowercase_string}
  980.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_spanish_uppercase_string}
  981. #endif /* __MMI_LANG_SPANISH__ */ 
  982. #ifdef __MMI_LANG_FRENCH__
  983.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_french_lowercase_string}
  984.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_french_uppercase_string}
  985. #endif /* __MMI_LANG_FRENCH__ */ 
  986. #ifdef __MMI_LANG_GERMAN__
  987.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_german_lowercase_string}
  988.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_german_uppercase_string}
  989. #endif /* __MMI_LANG_GERMAN__ */ 
  990. #ifdef __MMI_LANG_ITALIAN__
  991.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_italian_lowercase_string}
  992.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_italian_uppercase_string}
  993. #endif /* __MMI_LANG_ITALIAN__ */ 
  994. #ifdef __MMI_LANG_RUSSIAN__
  995.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_russian_lowercase_string}
  996.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_russian_uppercase_string}
  997. #endif /* __MMI_LANG_RUSSIAN__ */ 
  998. #ifdef __MMI_LANG_TURKISH__
  999.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_turkish_lowercase_string}
  1000.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_turkish_uppercase_string}
  1001. #endif /* __MMI_LANG_TURKISH__ */ 
  1002. #ifdef __MMI_LANG_PORTUGUESE__
  1003.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_portuguese_lowercase_string}
  1004.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_portuguese_uppercase_string}
  1005. #endif /* __MMI_LANG_PORTUGUESE__ */ 
  1006. #ifdef __MMI_VKBD_EUROPEAN_SUPPORT__
  1007.     , {&gui_virtual_keyboard_extended_layout, &gui_keyboard_european_symbols_string}
  1008. #endif 
  1009. };
  1010. #ifdef __MMI_VKBD_EUROPEAN_SUPPORT__
  1011. static const gui_dead_key_symbol_struct gui_european_symbols[] = 
  1012. {
  1013.    /****Grave Accent***/
  1014.     {2, {0x60, 0x61}, 0xE0},
  1015.     {2, {0x60, 0x65}, 0xE8},
  1016.     {2, {0x60, 0x69}, 0xEC},
  1017.     {2, {0x60, 0x6F}, 0xF2},
  1018.     {2, {0x60, 0x75}, 0xF9},
  1019.     {2, {0x60, 0x41}, 0xC0},
  1020.     {2, {0x60, 0x45}, 0xC8},
  1021.     {2, {0x60, 0x49}, 0xCC},
  1022.     {2, {0x60, 0x4F}, 0xD2},
  1023.     {2, {0x60, 0x55}, 0xD9},
  1024.    /***Acute Accent***/
  1025.     {2, {0xB4, 0x61}, 0xE1},
  1026.     {2, {0xB4, 0x65}, 0xE9},
  1027.     {2, {0xB4, 0x69}, 0xED},
  1028.     {2, {0xB4, 0x6F}, 0xF3},
  1029.     {2, {0xB4, 0x75}, 0xFA},
  1030.     {2, {0xB4, 0x79}, 0xFD},
  1031.     {2, {0xB4, 0x41}, 0xC1},
  1032.     {2, {0xB4, 0x45}, 0xC9},
  1033.     {2, {0xB4, 0x49}, 0xCD},
  1034.     {2, {0xB4, 0x4F}, 0xD3},
  1035.     {2, {0xB4, 0x55}, 0xDA},
  1036.     {2, {0xB4, 0x59}, 0xDD},
  1037.    /***circumflex accent***/
  1038.     {2, {0x5E, 0x61}, 0xE2},
  1039.     {2, {0x5E, 0x65}, 0xEA},
  1040.     {2, {0x5E, 0x69}, 0xEE},
  1041.     {2, {0x5E, 0x6F}, 0xF4},
  1042.     {2, {0x5E, 0x75}, 0xFB},
  1043.     {2, {0x5E, 0x41}, 0xC2},
  1044.     {2, {0x5E, 0x45}, 0xCA},
  1045.     {2, {0x5E, 0x49}, 0xCE},
  1046.     {2, {0x5E, 0x4F}, 0xD4},
  1047.     {2, {0x5E, 0x55}, 0xDB},
  1048.    /***Diaeresis***/
  1049.     {2, {0xA8, 0x61}, 0xE4},
  1050.     {2, {0xA8, 0x65}, 0xEB},
  1051.     {2, {0xA8, 0x69}, 0xEF},
  1052.     {2, {0xA8, 0x6F}, 0xF6},
  1053.     {2, {0xA8, 0x75}, 0xFC},
  1054.     {2, {0xA8, 0x79}, 0xFF},
  1055.     {2, {0xA8, 0x41}, 0xC4},
  1056.     {2, {0xA8, 0x45}, 0xCB},
  1057.     {2, {0xA8, 0x49}, 0xCF},
  1058.     {2, {0xA8, 0x4F}, 0xD6},
  1059.     {2, {0xA8, 0x55}, 0xDC},
  1060.    /***Tilde***/
  1061.     {2, {0x7E, 0x61}, 0xE3},
  1062.     {2, {0x7E, 0x6F}, 0xF5},
  1063.     {2, {0x7E, 0x6E}, 0xF1},
  1064.     {2, {0x7E, 0x41}, 0xC3},
  1065.     {2, {0x7E, 0x4F}, 0xD5},
  1066.     {2, {0x7E, 0x4E}, 0xD1}
  1067. };
  1068. static const gui_dead_key_symbol_struct gui_turkish_symbols[] = 
  1069. {
  1070.    /****Grave Accent***/
  1071.     {2, {0x60, 0x61}, 0xE0},
  1072.     {2, {0x60, 0x65}, 0xE8},
  1073.     {2, {0x60, 0x69}, 0xEC},
  1074.     {2, {0x60, 0x131}, 0xEC},
  1075.     {2, {0x60, 0x6F}, 0xF2},
  1076.     {2, {0x60, 0x75}, 0xF9},
  1077.     {2, {0x60, 0x41}, 0xC0},
  1078.     {2, {0x60, 0x45}, 0xC8},
  1079.     {2, {0x60, 0x49}, 0xCC},
  1080.     {2, {0x60, 0x130}, 0xCC},
  1081.     {2, {0x60, 0x4F}, 0xD2},
  1082.     {2, {0x60, 0x55}, 0xD9},
  1083.    /***Acute Accent***/
  1084.     {2, {0xB4, 0x61}, 0xE1},
  1085.     {2, {0xB4, 0x65}, 0xE9},
  1086.     {2, {0xB4, 0x69}, 0xED},
  1087.     {2, {0xB4, 0x131}, 0xED},
  1088.     {2, {0xB4, 0x6F}, 0xF3},
  1089.     {2, {0xB4, 0x75}, 0xFA},
  1090.     {2, {0xB4, 0x41}, 0xC1},
  1091.     {2, {0xB4, 0x45}, 0xC9},
  1092.     {2, {0xB4, 0x49}, 0xCD},
  1093.     {2, {0xB4, 0x130}, 0xCD},
  1094.     {2, {0xB4, 0x4F}, 0xD3},
  1095.     {2, {0xB4, 0x55}, 0xDA},
  1096.    /***circumflex accent***/
  1097.     {2, {0x5E, 0x61}, 0xE2},
  1098.     {2, {0x5E, 0x65}, 0xEA},
  1099.     {2, {0x5E, 0x69}, 0xEE},
  1100.     {2, {0x5E, 0x131}, 0xEE},
  1101.     {2, {0x5E, 0x6F}, 0xF4},
  1102.     {2, {0x5E, 0x75}, 0xFB},
  1103.     {2, {0x5E, 0x41}, 0xC2},
  1104.     {2, {0x5E, 0x45}, 0xCA},
  1105.     {2, {0x5E, 0x49}, 0xCE},
  1106.     {2, {0x5E, 0x130}, 0xCE},
  1107.     {2, {0x5E, 0x4F}, 0xD4},
  1108.     {2, {0x5E, 0x55}, 0xDB},
  1109.    /***Diaeresis***/
  1110.     {2, {0xA8, 0x61}, 0xE4},
  1111.     {2, {0xA8, 0x65}, 0xEB},
  1112.     {2, {0xA8, 0x69}, 0xEF},
  1113.     {2, {0xA8, 0x131}, 0xEF},
  1114.     {2, {0xA8, 0x6F}, 0xF6},
  1115.     {2, {0xA8, 0x75}, 0xFC},
  1116.     {2, {0xA8, 0x79}, 0xFF},
  1117.     {2, {0xA8, 0x41}, 0xC4},
  1118.     {2, {0xA8, 0x45}, 0xCB},
  1119.     {2, {0xA8, 0x49}, 0xCF},
  1120.     {2, {0xA8, 0x130}, 0xCF},
  1121.     {2, {0xA8, 0x4F}, 0xD6},
  1122.     {2, {0xA8, 0x55}, 0xDC},
  1123.    /***Tilde***/
  1124.     {2, {0x7E, 0x61}, 0xE3},
  1125.     {2, {0x7E, 0x6F}, 0xF5},
  1126.     {2, {0x7E, 0x6E}, 0xF1},
  1127.     {2, {0x7E, 0x41}, 0xC3},
  1128.     {2, {0x7E, 0x4F}, 0xD5},
  1129.     {2, {0x7E, 0x4E}, 0xD1}
  1130. };
  1131. #endif /* __MMI_VKBD_EUROPEAN_SUPPORT__ */ 
  1132. /* The order should be the same as gui_virtual_keyboard_language_enum */
  1133. const gui_dead_key_map_struct gui_dead_key_symbol_table[] = 
  1134. {
  1135.     /* English */
  1136.     {NULL, 0},
  1137.     {NULL, 0},
  1138.     /* Symbol */
  1139.     {NULL, 0},
  1140.     /* Tray */
  1141.     {NULL, 0},
  1142.     /* Number */
  1143.     {NULL, 0},
  1144.     /* Phone Number */
  1145.     {NULL, 0},
  1146.     /* Empty Tray */
  1147.     {NULL, 0},
  1148.     /* Number Tray */
  1149.     {NULL, 0},
  1150.     /* Number Dot Tray */
  1151.     {NULL, 0}
  1152.     /* MTK Terry Temp Solution for Custom Release */
  1153.     // #ifdef __MMI_LANG_SM_CHINESE__
  1154.     , {NULL, 0}
  1155.     //#endif
  1156.     //#ifdef __MMI_LANG_TR_CHINESE__
  1157.     , {NULL, 0}
  1158.     //#endif
  1159.     //#if defined(__MMI_LANG_TR_CHINESE__) || defined(__MMI_LANG_SM_CHINESE__)
  1160.     , {NULL, 0}
  1161.     // #endif
  1162.     /* Asia-pacific */
  1163. #ifdef __MMI_LANG_THAI__
  1164. #endif 
  1165. #ifdef __MMI_LANG_INDONESIAN__
  1166. #endif 
  1167. #ifdef __MMI_LANG_MALAY__
  1168. #endif 
  1169. #ifdef __MMI_LANG_VIETNAMESE__
  1170. #endif 
  1171.     /* Hindi */
  1172. #ifdef __MMI_LANG_HINDI__
  1173. #endif 
  1174.     /* Arabic */
  1175. #ifdef __MMI_LANG_ARABIC__
  1176. #endif 
  1177.     /* Europe */
  1178. #ifdef __MMI_LANG_SPANISH__
  1179.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1180.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1181. #endif /* __MMI_LANG_SPANISH__ */ 
  1182. #ifdef __MMI_LANG_FRENCH__
  1183.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1184.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1185. #endif /* __MMI_LANG_FRENCH__ */ 
  1186. #ifdef __MMI_LANG_GERMAN__
  1187.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1188.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1189. #endif /* __MMI_LANG_GERMAN__ */ 
  1190. #ifdef __MMI_LANG_ITALIAN__
  1191.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1192.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1193. #endif /* __MMI_LANG_ITALIAN__ */ 
  1194. #ifdef __MMI_LANG_RUSSIAN__
  1195.     , {NULL, 0}
  1196.     , {NULL, 0}
  1197. #endif /* __MMI_LANG_RUSSIAN__ */ 
  1198. #ifdef __MMI_LANG_TURKISH__
  1199.     , {gui_turkish_symbols, sizeof(gui_turkish_symbols) / sizeof(gui_turkish_symbols[0])}
  1200.     , {gui_turkish_symbols, sizeof(gui_turkish_symbols) / sizeof(gui_turkish_symbols[0])}
  1201. #endif /* __MMI_LANG_TURKISH__ */ 
  1202. #ifdef __MMI_LANG_PORTUGUESE__
  1203.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1204.     , {gui_european_symbols, sizeof(gui_european_symbols) / sizeof(gui_european_symbols[0])}
  1205. #endif /* __MMI_LANG_PORTUGUESE__ */ 
  1206. #ifdef __MMI_VKBD_EUROPEAN_SUPPORT__
  1207.     , {NULL, 0}
  1208. #endif 
  1209. };
  1210. /***************************************************************************** 
  1211.  * Local variable 
  1212.  *****************************************************************************/
  1213. static MMI_BOOL g_wgui_virtual_keyboard_multi_block_mode = MMI_FALSE;
  1214. /***************************************************************************** 
  1215.  * Global Function
  1216.  *****************************************************************************/
  1217. /*****************************************************************************
  1218.  * FUNCTION
  1219.  *  create_virtual_keyboard
  1220.  * DESCRIPTION
  1221.  *  Create virtual keyboard object
  1222.  * PARAMETERS
  1223.  *  void
  1224.  * RETURNS
  1225.  *  void
  1226.  * REMARKS
  1227.  *  The function is dummy because the keyboard object is statically allocated.
  1228.  *****************************************************************************/
  1229. void create_virtual_keyboard(void)
  1230. {
  1231.     /*----------------------------------------------------------------*/
  1232.     /* Local Variables                                                */
  1233.     /*----------------------------------------------------------------*/
  1234.     S32 map_index, key_index;
  1235.     S32 max_value = 0, tmp;
  1236.     const gui_keyboard_layout_struct *layout;
  1237.     const gui_keyboard_language_struct *lang;
  1238.     /*----------------------------------------------------------------*/
  1239.     /* Code Body                                                      */
  1240.     /*----------------------------------------------------------------*/
  1241.     MMI_DBG_ASSERT(sizeof(MMI_virtual_keyboard_language_map) / sizeof(gui_keyboard_lang_map_struct) ==
  1242.                    GUI_VIRTUAL_KEYBOARD_MAX_LANG);
  1243.     MMI_DBG_ASSERT(sizeof(gui_dead_key_symbol_table) / sizeof(gui_dead_key_map_struct) ==
  1244.                    GUI_VIRTUAL_KEYBOARD_MAX_LANG);
  1245.     /* Compute the cache size of key */
  1246.     for (map_index = 0; map_index < GUI_VIRTUAL_KEYBOARD_MAX_LANG; map_index++)
  1247.     {
  1248.         layout = MMI_virtual_keyboard_language_map[map_index].virtual_keyboard_layout;
  1249.         lang = MMI_virtual_keyboard_language_map[map_index].virtual_keyboard_language;
  1250.         for (key_index = 0; key_index < layout->n_custom_keys; key_index++)
  1251.         {
  1252.             if (lang->custom_key_type[key_index] == GUI_VKBD_PEN_DISPLAY_AREA)
  1253.             {
  1254.                 /* Display area is not cached due to its size */
  1255.                 continue;
  1256.             }
  1257.             tmp = layout->custom_keys[key_index].key_height * layout->custom_keys[key_index].key_width;
  1258.             if (tmp > max_value)
  1259.             {
  1260.                 max_value = tmp;
  1261.             }
  1262.         }
  1263.     }
  1264.     MMI_virtual_keyboard_bitmap_cache_size = ((max_value * gdi_layer_get_bit_per_pixel()) + 7) >> 3;
  1265.     /* GUI_VIRTUAL_KEYBOARD_EMPTY_TRAY is the default value */
  1266.     gui_create_virtual_keyboard(
  1267.         &MMI_virtual_keyboard,
  1268.         (S16) MMI_content_x,
  1269.         (S16) MMI_content_y,
  1270.         GUI_VIRTUAL_KEYBOARD_EMPTY_TRAY);
  1271. }
  1272. /*****************************************************************************
  1273.  * FUNCTION
  1274.  *  wgui_virtual_keyboard_set_global_multi_block_mode
  1275.  * DESCRIPTION
  1276.  *  Set global flag of multi-block handwriting mode 
  1277.  *
  1278.  *  In multi-block handwriting mode, some keyboard icons are displayed differently.
  1279.  * PARAMETERS
  1280.  *  enabled        [IN]        
  1281.  * RETURNS
  1282.  *  void
  1283.  *****************************************************************************/
  1284. void wgui_virtual_keyboard_set_global_multi_block_mode(MMI_BOOL enabled)
  1285. {
  1286.     /*----------------------------------------------------------------*/
  1287.     /* Local Variables                                                */
  1288.     /*----------------------------------------------------------------*/
  1289.     
  1290.     /*----------------------------------------------------------------*/
  1291.     /* Code Body                                                      */
  1292.     /*----------------------------------------------------------------*/
  1293.     g_wgui_virtual_keyboard_multi_block_mode = enabled;
  1294.     gui_set_virtual_keyboard_multi_block_mode(&MMI_virtual_keyboard, enabled);
  1295. }
  1296. /*****************************************************************************
  1297.  * FUNCTION
  1298.  *  wgui_setup_virtual_keyboard
  1299.  * DESCRIPTION
  1300.  *  Setup the language of virtual keyboard object
  1301.  * PARAMETERS
  1302.  *  lang_type       [IN]        Language
  1303.  * RETURNS
  1304.  *  void
  1305.  *****************************************************************************/
  1306. void wgui_setup_virtual_keyboard(gui_virtual_keyboard_language_enum lang_type)
  1307. {
  1308.     /*----------------------------------------------------------------*/
  1309.     /* Local Variables                                                */
  1310.     /*----------------------------------------------------------------*/
  1311.     S32 vkbd_height = MMI_virtual_keyboard_language_map[lang_type].virtual_keyboard_layout->height;
  1312.     /*----------------------------------------------------------------*/
  1313.     /* Code Body                                                      */
  1314.     /*----------------------------------------------------------------*/
  1315.     gui_create_virtual_keyboard(
  1316.         &MMI_virtual_keyboard,
  1317.         (S16) MMI_content_x,
  1318.         (S16) (MMI_content_y + MMI_content_height - vkbd_height),
  1319.         lang_type);
  1320.         
  1321.     gui_set_virtual_keyboard_multi_block_mode(&MMI_virtual_keyboard, g_wgui_virtual_keyboard_multi_block_mode);
  1322. }
  1323. /*****************************************************************************
  1324.  * FUNCTION
  1325.  *  wgui_close_virtual_keyboard
  1326.  * DESCRIPTION
  1327.  *  Release the resource used by virtual keyboard object
  1328.  * PARAMETERS
  1329.  *  void
  1330.  *  lang_type(?)        [IN]        Language
  1331.  * RETURNS
  1332.  *  void
  1333.  * REMARKS
  1334.  *  Used in exit function or exit category function
  1335.  *****************************************************************************/
  1336. void wgui_close_virtual_keyboard(void)
  1337. {
  1338.     /*----------------------------------------------------------------*/
  1339.     /* Local Variables                                                */
  1340.     /*----------------------------------------------------------------*/
  1341.     /*----------------------------------------------------------------*/
  1342.     /* Code Body                                                      */
  1343.     /*----------------------------------------------------------------*/
  1344.     /* DUMMY */
  1345. }
  1346. /*****************************************************************************
  1347.  * FUNCTION
  1348.  *  wgui_set_virtual_keyboard_display_area
  1349.  * DESCRIPTION
  1350.  *  Update text displayed on display area
  1351.  * PARAMETERS
  1352.  *  string      [IN]        String to be displayed in display area
  1353.  *  redraw      [IN]        Whether to redraw the keyboard
  1354.  * RETURNS
  1355.  *  void
  1356.  * REMARKS
  1357.  *  
  1358.  *****************************************************************************/
  1359. void wgui_set_virtual_keyboard_display_area(const U8 *string, BOOL redraw)
  1360. {
  1361.     /*----------------------------------------------------------------*/
  1362.     /* Local Variables                                                */
  1363.     /*----------------------------------------------------------------*/
  1364.     /*----------------------------------------------------------------*/
  1365.     /* Code Body                                                      */
  1366.     /*----------------------------------------------------------------*/
  1367.     gui_set_virtual_keyboard_display_area(&MMI_virtual_keyboard, string, redraw);
  1368. }
  1369. /*****************************************************************************
  1370.  * FUNCTION
  1371.  *  wgui_get_virtual_keyboard_size
  1372.  * DESCRIPTION
  1373.  *  Get the current size of virtual keyboard
  1374.  * PARAMETERS
  1375.  *  width       [OUT]       
  1376.  *  height      [OUT]       
  1377.  * RETURNS
  1378.  *  void
  1379.  * REMARKS
  1380.  *  Keyboards of different languages have different size
  1381.  *****************************************************************************/
  1382. void wgui_get_virtual_keyboard_size(S32 *width, S32 *height)
  1383. {
  1384.     /*----------------------------------------------------------------*/
  1385.     /* Local Variables                                                */
  1386.     /*----------------------------------------------------------------*/
  1387.     /*----------------------------------------------------------------*/
  1388.     /* Code Body                                                      */
  1389.     /*----------------------------------------------------------------*/
  1390.     *width = MMI_virtual_keyboard.width;
  1391.     *height = MMI_virtual_keyboard.height;
  1392. }
  1393. /*****************************************************************************
  1394.  * FUNCTION
  1395.  *  wgui_set_virtual_keyboard_allowed_characters
  1396.  * DESCRIPTION
  1397.  *  Only the allowd characters can be input on keyboard.
  1398.  *  This function and wgui_set_virtual_keyboard_disabled_list() are mutually-exclusive.
  1399.  *  
  1400.  *  Control keys such as GUI_VKBD_PEN_HIDE, GUI_VKBD_PEN_SHOW... are enabled because
  1401.  *  they are not related to character insertion.
  1402.  *  
  1403.  *  `allowed_characters' may contain '-' for consecutive characters
  1404.  *  (Ex. 'a-z' for characters from a to z.)
  1405.  *  If we want to accept "-", please write it as '-'.
  1406.  *  For example, '-0-9.' represents "-0123456789."
  1407.  *  
  1408.  *  Example of valid characters in email addresss:
  1409.  *  wgui_set_virtual_keyboard_allowed_characters((const UI_character_type *) L"+_\-.@A-Za-z0-9");
  1410.  *  (it is not a complete list of all characters allowed in RFC, but it satisfies almost all cases)
  1411.  * PARAMETERS
  1412.  *  allowed_chars       [IN]        Allowed characters
  1413.  * RETURNS
  1414.  *  void
  1415.  *****************************************************************************/
  1416. void wgui_set_virtual_keyboard_allowed_characters(const UI_character_type *allowed_chars)
  1417. {
  1418.     /*----------------------------------------------------------------*/
  1419.     /* Local Variables                                                */
  1420.     /*----------------------------------------------------------------*/
  1421.     /*----------------------------------------------------------------*/
  1422.     /* Code Body                                                      */
  1423.     /*----------------------------------------------------------------*/
  1424.     gui_set_virtual_keyboard_allowed_characters(&MMI_virtual_keyboard, allowed_chars);
  1425. }
  1426. /*****************************************************************************
  1427.  * FUNCTION
  1428.  *  wgui_set_virtual_keyboard_disabled_list
  1429.  * DESCRIPTION
  1430.  *  Set disabled characters in virtual keyboard
  1431.  * PARAMETERS
  1432.  *  disabled_chars          [IN]        Ended by ''
  1433.  *  disabled_symbols        [IN]        Ended by GUI_VKBD_PEN_NONE
  1434.  * RETURNS
  1435.  *  void
  1436.  * REMARKS
  1437.  *  
  1438.  *****************************************************************************/
  1439. void wgui_set_virtual_keyboard_disabled_list(
  1440.         const UI_character_type *disabled_chars,
  1441.         const gui_virtual_keyboard_pen_enum *disabled_symbols)
  1442. {
  1443.     /*----------------------------------------------------------------*/
  1444.     /* Local Variables                                                */
  1445.     /*----------------------------------------------------------------*/
  1446.     /*----------------------------------------------------------------*/
  1447.     /* Code Body                                                      */
  1448.     /*----------------------------------------------------------------*/
  1449.     gui_set_virtual_board_disable_list(&MMI_virtual_keyboard, disabled_chars, disabled_symbols);
  1450. }
  1451. /*****************************************************************************
  1452.  * FUNCTION
  1453.  *  wgui_move_virtual_keyboard
  1454.  * DESCRIPTION
  1455.  *  Move the position of virtual keyboard
  1456.  * PARAMETERS
  1457.  *  x       [IN]        
  1458.  *  y       [IN]        
  1459.  * RETURNS
  1460.  *  void
  1461.  * REMARKS
  1462.  *  
  1463.  *****************************************************************************/
  1464. void wgui_move_virtual_keyboard(S32 x, S32 y)
  1465. {
  1466.     /*----------------------------------------------------------------*/
  1467.     /* Local Variables                                                */
  1468.     /*----------------------------------------------------------------*/
  1469.     /*----------------------------------------------------------------*/
  1470.     /* Code Body                                                      */
  1471.     /*----------------------------------------------------------------*/
  1472.     gui_move_virtual_keyboard(&MMI_virtual_keyboard, (S16) x, (S16) y);
  1473. }
  1474. /*****************************************************************************
  1475.  * FUNCTION
  1476.  *  wgui_show_virtual_keyboard
  1477.  * DESCRIPTION
  1478.  *  Display virtual keyboard
  1479.  * PARAMETERS
  1480.  *  void
  1481.  * RETURNS
  1482.  *  void
  1483.  * REMARKS
  1484.  *  
  1485.  *****************************************************************************/
  1486. void wgui_show_virtual_keyboard(void)
  1487. {
  1488.     /*----------------------------------------------------------------*/
  1489.     /* Local Variables                                                */
  1490.     /*----------------------------------------------------------------*/
  1491.     /*----------------------------------------------------------------*/
  1492.     /* Code Body                                                      */
  1493.     /*----------------------------------------------------------------*/
  1494.     gui_lock_double_buffer();
  1495.     gui_show_virtual_keyboard(&MMI_virtual_keyboard);
  1496.     gui_unlock_double_buffer();
  1497.     gui_BLT_double_buffer(
  1498.         MMI_virtual_keyboard.x,
  1499.         MMI_virtual_keyboard.y,
  1500.         MMI_virtual_keyboard.x + MMI_virtual_keyboard.width - 1,
  1501.         MMI_virtual_keyboard.y + MMI_virtual_keyboard.height - 1);
  1502. }
  1503. /*****************************************************************************
  1504.  * FUNCTION
  1505.  *  wgui_greyscale_virtual_keyboard
  1506.  * DESCRIPTION
  1507.  *  Make the 'displayed' virtual keyboard as greyed (disabled)
  1508.  * PARAMETERS
  1509.  *  void
  1510.  * RETURNS
  1511.  *  void
  1512.  * REMARKS
  1513.  *  
  1514.  *****************************************************************************/
  1515. void wgui_greyscale_virtual_keyboard(void)
  1516. {
  1517.     /*----------------------------------------------------------------*/
  1518.     /* Local Variables                                                */
  1519.     /*----------------------------------------------------------------*/
  1520.     /*----------------------------------------------------------------*/
  1521.     /* Code Body                                                      */
  1522.     /*----------------------------------------------------------------*/
  1523.     gui_lock_double_buffer();
  1524.     gui_greyscale_rectangle(MMI_virtual_keyboard.x, MMI_virtual_keyboard.y, MMI_virtual_keyboard.x + MMI_virtual_keyboard.width - 1, MMI_virtual_keyboard.y + MMI_virtual_keyboard.height - 1, MMI_VKBD_GRAYSCALE_VALUE, MMI_BG_GREYSCALE_BLACK_VALUE); /* 102605 greyscale Calvin modified */
  1525.     gui_unlock_double_buffer();
  1526.     gui_BLT_double_buffer(
  1527.         MMI_virtual_keyboard.x,
  1528.         MMI_virtual_keyboard.y,
  1529.         MMI_virtual_keyboard.x + MMI_virtual_keyboard.width - 1,
  1530.         MMI_virtual_keyboard.y + MMI_virtual_keyboard.height - 1);
  1531. }