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

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.  *   gui_inputs.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   General Editor - UI component
  48.  *
  49.  *   [Single-line input box]
  50.  *   [Multi-line input box]
  51.  *   [Dialer input box]
  52.  *
  53.  * Author:
  54.  * -------
  55.  * -------
  56.  * -------
  57.  *
  58.  *============================================================================
  59.  *             HISTORY
  60.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  61.  *------------------------------------------------------------------------------
  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.  * removed!
  85.  * removed!
  86.  * removed!
  87.  *
  88.  * removed!
  89.  * removed!
  90.  * removed!
  91.  *
  92.  * removed!
  93.  * removed!
  94.  * removed!
  95.  *
  96.  * removed!
  97.  * removed!
  98.  * removed!
  99.  *
  100.  * removed!
  101.  * removed!
  102.  * removed!
  103.  *
  104.  * removed!
  105.  * removed!
  106.  * removed!
  107.  *
  108.  * removed!
  109.  * removed!
  110.  * removed!
  111.  *
  112.  * removed!
  113.  * removed!
  114.  * removed!
  115.  *
  116.  * removed!
  117.  * removed!
  118.  * removed!
  119.  *
  120.  * removed!
  121.  * removed!
  122.  * removed!
  123.  *
  124.  * removed!
  125.  * removed!
  126.  * removed!
  127.  *
  128.  * removed!
  129.  * removed!
  130.  * removed!
  131.  *
  132.  * removed!
  133.  * removed!
  134.  * removed!
  135.  *
  136.  * removed!
  137.  * removed!
  138.  * removed!
  139.  *
  140.  * removed!
  141.  * removed!
  142.  * removed!
  143.  *
  144.  * removed!
  145.  * removed!
  146.  * removed!
  147.  *
  148.  * removed!
  149.  * removed!
  150.  * removed!
  151.  *
  152.  * removed!
  153.  * removed!
  154.  * removed!
  155.  *
  156.  * removed!
  157.  * removed!
  158.  * removed!
  159.  *
  160.  * removed!
  161.  * removed!
  162.  * removed!
  163.  *
  164.  * removed!
  165.  * removed!
  166.  * removed!
  167.  *
  168.  * removed!
  169.  * removed!
  170.  * removed!
  171.  *
  172.  * removed!
  173.  * removed!
  174.  * removed!
  175.  *
  176.  * removed!
  177.  * removed!
  178.  * removed!
  179.  *
  180.  * removed!
  181.  * removed!
  182.  * removed!
  183.  *
  184.  * removed!
  185.  * removed!
  186.  * removed!
  187.  *
  188.  * removed!
  189.  * removed!
  190.  * removed!
  191.  *
  192.  * removed!
  193.  * removed!
  194.  * removed!
  195.  *
  196.  * removed!
  197.  * removed!
  198.  * removed!
  199.  *
  200.  * removed!
  201.  * removed!
  202.  * removed!
  203.  *
  204.  * removed!
  205.  * removed!
  206.  * removed!
  207.  *
  208.  * removed!
  209.  * removed!
  210.  * removed!
  211.  *
  212.  * removed!
  213.  * removed!
  214.  * removed!
  215.  *
  216.  * removed!
  217.  * removed!
  218.  * removed!
  219.  *
  220.  * removed!
  221.  * removed!
  222.  * removed!
  223.  *
  224.  * removed!
  225.  * removed!
  226.  * removed!
  227.  *
  228.  * removed!
  229.  * removed!
  230.  * removed!
  231.  *
  232.  * removed!
  233.  * removed!
  234.  * removed!
  235.  *
  236.  * removed!
  237.  * removed!
  238.  * removed!
  239.  *
  240.  * removed!
  241.  * removed!
  242.  * removed!
  243.  *
  244.  * removed!
  245.  * removed!
  246.  * removed!
  247.  *
  248.  * removed!
  249.  * removed!
  250.  * removed!
  251.  *
  252.  * removed!
  253.  * removed!
  254.  * removed!
  255.  *
  256.  * removed!
  257.  * removed!
  258.  * removed!
  259.  *
  260.  * removed!
  261.  * removed!
  262.  * removed!
  263.  *
  264.  * removed!
  265.  * removed!
  266.  * removed!
  267.  *
  268.  * removed!
  269.  * removed!
  270.  * removed!
  271.  *
  272.  * removed!
  273.  * removed!
  274.  * removed!
  275.  *
  276.  * removed!
  277.  * removed!
  278.  * removed!
  279.  *
  280.  * removed!
  281.  * removed!
  282.  * removed!
  283.  *
  284.  * removed!
  285.  * removed!
  286.  * removed!
  287.  *
  288.  * removed!
  289.  * removed!
  290.  * removed!
  291.  *
  292.  * removed!
  293.  * removed!
  294.  * removed!
  295.  *
  296.  * removed!
  297.  * removed!
  298.  * removed!
  299.  *
  300.  * removed!
  301.  * removed!
  302.  * removed!
  303.  *
  304.  * removed!
  305.  * removed!
  306.  * removed!
  307.  *
  308.  * removed!
  309.  * removed!
  310.  * removed!
  311.  *
  312.  * removed!
  313.  * removed!
  314.  * removed!
  315.  *
  316.  * removed!
  317.  * removed!
  318.  * removed!
  319.  *
  320.  * removed!
  321.  * removed!
  322.  * removed!
  323.  *
  324.  * removed!
  325.  * removed!
  326.  * removed!
  327.  *
  328.  * removed!
  329.  * removed!
  330.  * removed!
  331.  *
  332.  * removed!
  333.  * removed!
  334.  * removed!
  335.  *
  336.  * removed!
  337.  * removed!
  338.  * removed!
  339.  *
  340.  * removed!
  341.  * removed!
  342.  * removed!
  343.  *
  344.  * removed!
  345.  * removed!
  346.  * removed!
  347.  *
  348.  * removed!
  349.  * removed!
  350.  * removed!
  351.  *
  352.  * removed!
  353.  * removed!
  354.  * removed!
  355.  *
  356.  * removed!
  357.  * removed!
  358.  * removed!
  359.  *
  360.  * removed!
  361.  * removed!
  362.  * removed!
  363.  *
  364.  * removed!
  365.  * removed!
  366.  * removed!
  367.  *
  368.  * removed!
  369.  * removed!
  370.  * removed!
  371.  *
  372.  * removed!
  373.  * removed!
  374.  * removed!
  375.  *
  376.  * removed!
  377.  * removed!
  378.  * removed!
  379.  *
  380.  * removed!
  381.  * removed!
  382.  * removed!
  383.  *
  384.  * removed!
  385.  * removed!
  386.  * removed!
  387.  *
  388.  * removed!
  389.  * removed!
  390.  * removed!
  391.  *
  392.  * removed!
  393.  * removed!
  394.  * removed!
  395.  *
  396.  * removed!
  397.  * removed!
  398.  * removed!
  399.  *
  400.  * removed!
  401.  * removed!
  402.  * removed!
  403.  *
  404.  * removed!
  405.  * removed!
  406.  * removed!
  407.  *
  408.  * removed!
  409.  * removed!
  410.  * removed!
  411.  *
  412.  * removed!
  413.  * removed!
  414.  * removed!
  415.  *
  416.  * removed!
  417.  * removed!
  418.  * removed!
  419.  *
  420.  * removed!
  421.  * removed!
  422.  * removed!
  423.  *
  424.  * removed!
  425.  * removed!
  426.  * removed!
  427.  *
  428.  * removed!
  429.  * removed!
  430.  * removed!
  431.  *
  432.  * removed!
  433.  * removed!
  434.  * removed!
  435.  *
  436.  * removed!
  437.  * removed!
  438.  * removed!
  439.  *
  440.  * removed!
  441.  * removed!
  442.  * removed!
  443.  *
  444.  * removed!
  445.  * removed!
  446.  * removed!
  447.  *
  448.  * removed!
  449.  * removed!
  450.  * removed!
  451.  *
  452.  * removed!
  453.  * removed!
  454.  * removed!
  455.  *
  456.  * removed!
  457.  * removed!
  458.  * removed!
  459.  *
  460.  * removed!
  461.  * removed!
  462.  * removed!
  463.  *
  464.  * removed!
  465.  * removed!
  466.  * removed!
  467.  *
  468.  * removed!
  469.  * removed!
  470.  * removed!
  471.  *
  472.  * removed!
  473.  * removed!
  474.  * removed!
  475.  *
  476.  * removed!
  477.  * removed!
  478.  * removed!
  479.  *
  480.  * removed!
  481.  * removed!
  482.  * removed!
  483.  *
  484.  * removed!
  485.  * removed!
  486.  * removed!
  487.  *
  488.  * removed!
  489.  * removed!
  490.  * removed!
  491.  *
  492.  * removed!
  493.  * removed!
  494.  * removed!
  495.  *
  496.  * removed!
  497.  * removed!
  498.  * removed!
  499.  *
  500.  * removed!
  501.  * removed!
  502.  * removed!
  503.  *
  504.  * removed!
  505.  * removed!
  506.  * removed!
  507.  *
  508.  * removed!
  509.  * removed!
  510.  * removed!
  511.  *
  512.  * removed!
  513.  * removed!
  514.  * removed!
  515.  *
  516.  * removed!
  517.  * removed!
  518.  * removed!
  519.  *
  520.  * removed!
  521.  * removed!
  522.  * removed!
  523.  *
  524.  * removed!
  525.  * removed!
  526.  * removed!
  527.  *
  528.  * removed!
  529.  * removed!
  530.  * removed!
  531.  *
  532.  * removed!
  533.  * removed!
  534.  * removed!
  535.  *
  536.  * removed!
  537.  * removed!
  538.  * removed!
  539.  *
  540.  * removed!
  541.  * removed!
  542.  * removed!
  543.  *
  544.  * removed!
  545.  * removed!
  546.  * removed!
  547.  *
  548.  * removed!
  549.  * removed!
  550.  * removed!
  551.  *
  552.  * removed!
  553.  * removed!
  554.  * removed!
  555.  *
  556.  * removed!
  557.  * removed!
  558.  * removed!
  559.  *
  560.  * removed!
  561.  * removed!
  562.  * removed!
  563.  *
  564.  * removed!
  565.  * removed!
  566.  * removed!
  567.  *
  568.  * removed!
  569.  * removed!
  570.  * removed!
  571.  *
  572.  *------------------------------------------------------------------------------
  573.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  574.  *============================================================================
  575.  ****************************************************************************/
  576. /**
  577.  * Copyright Notice
  578.  * (c) 2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
  579.  * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
  580.  *  (It is illegal to remove this copyright notice from this software or any
  581.  *  portion of it)
  582.  */
  583. /**********************************************************************************
  584.    Filename:      gui_inputs.c
  585.    Author:        manju
  586.    Date Created:  July-22-2002
  587.    Contains:      PixTel UI routines for Input objects
  588.                Contains functions for Multitap,
  589.                Single Line, Multi Line input boxes.
  590. **********************************************************************************/
  591. #include "gui_inputs.h"
  592. #include "gui_themes.h"
  593. #include "MMI_features.h"
  594. #include "gui_theme_struct.h"
  595. #include "GlobalDefs.h"
  596. #include "kal_non_specific_general_types.h"
  597. #include "gdi_include.h"
  598. #include "lcd_sw_rnd.h"
  599. #include "DebugInitDef.h"
  600. #include "SimDetectionGprot.h"
  601. #if defined(__UI_PAGING_IN_MULTILINE_EDITOR__)
  602. #include "Gui_Setting.h"
  603. #endif 
  604. /* MTK Arabic Connectivity issue */
  605. #ifdef __MMI_ZI_V7__
  606. #include "ezicmn.h"
  607. #endif 
  608. #if defined (__MMI_ZI_ARABIC__) || defined (__MMI_ZI_PERSIAN__)
  609. #include "zi8ARshape.h"
  610. #endif /* defined (__MMI_ZI_ARABIC__) || defined (__MMI_ZI_PERSIAN__) */ 
  611. /* MTK End */
  612. /* if needs to modify this define ,remember to update the define in ChatGType.h */
  613. #define MAX_MSG_SIZE_UCS2   256
  614. #ifdef __MMI_HINDI_ALG__
  615. #include "hf_rules.h"
  616. #define MAX_EDITOR_DISP_LEN      60
  617. #endif /* __MMI_HINDI_ALG__ */ 
  618. #include "gui_ems.h"
  619. /* MTK Elvis for R2L characters */
  620. #include "BIDIDEF.h"
  621. #include "BIDIProt.h"
  622. /* MTK end */
  623. #ifdef __MMI_LANG_VIETNAMESE__
  624. #include "gui_lang_viet.h"
  625. #endif 
  626. /* start vijay 20050221 */
  627. #ifdef __MMI_TOUCH_SCREEN__
  628. #include "wgui.h"
  629. #include "TouchScreenGprot.h"
  630. #include "GlobalConstants.h"
  631. #endif /* __MMI_TOUCH_SCREEN__ */ 
  632. /* end vijay */
  633. #if defined (__MMI_TOUCH_DIAL_SCREEN_WITH_FUNCTION__)
  634. /* PMT HIMANSHU START 20050825 */
  635. #include "IdleAppDef.h"
  636. #include "SimDetectionGprot.h"
  637. /* PMT HIMANSHU END 20050825 */
  638. #endif /* defined (__MMI_TOUCH_DIAL_SCREEN_WITH_FUNCTION__) */ 
  639. /* MTK Elvis 20031126 */
  640. #include "TimerEvents.h"
  641. /* MTK end */
  642. #include "wgui_categories.h"    /* for WCSS editor */
  643. #include "wgui_categories_defs.h"
  644. #include "wgui_categories_inputs.h"
  645. #ifdef __MMI_ARSHAPING_ENGINE__
  646. extern void ArabicShapeEngine(PU16, PU16);
  647. #endif 
  648. #if defined __MMI_LANG_ARABIC__ || defined __MMI_LANG_PERSIAN__
  649. // for total text shaping
  650. U16 shaping_str[MAX_TEXT_LENGTH * BIDI_ENCODING_LENGTH];
  651. U16 OrgToSha[MAX_TEXT_LENGTH * BIDI_ENCODING_LENGTH];
  652. S32 unshaped_text_len = 0;
  653. // for 2nd pass  line shaping
  654. U16 shaping_str1[128]; 
  655. U16 OrgToSha1[128];
  656. #endif /* defined __MMI_LANG_ARABIC__ || defined __MMI_LANG_PERSIAN__ */ 
  657. extern void wgui_redraw_remaining_characters_display(void);
  658. #ifdef __MMI_HINDI_ALG__
  659. #define UI_CHK_CONSONANT(ch)  (( (ch >= 0x15 && ch <= 0x39) || (ch >= 0x58 && ch <= 0x5f) || ch==0x50 )? (1):(0))
  660. UI_buffer_type save_cursor_p = NULL;
  661. UI_buffer_type save_cursor_text_p = NULL;
  662. #endif /* __MMI_HINDI_ALG__ */ 
  663. /* MTK Terry for inline multiline issue */
  664. extern void (*complete_inline_item_edit) (void);
  665. /* MTK Steven 20050505 */
  666. #ifdef __MMI_LANG_THAI__
  667. #define isThaiChar(ch)  (((ch >= 0x0E01) && (ch <= 0x0E7F))? (1):(0))
  668. #endif 
  669. /* MTK End */
  670. /*
  671.  * Rich text
  672.  */
  673. typedef enum
  674. {
  675.     GUI_INPUT_ALIGN_LEFT,
  676.     GUI_INPUT_ALIGN_CENTER,
  677.     GUI_INPUT_ALIGN_RIGHT
  678. } gui_input_alignment_enum;
  679. #define GUI_INPUT_IS_MARKER(ch) 
  680.                   ((ch)>= GUI_INPUT_MARKER_BEGIN && (ch) <= GUI_INPUT_MARKER_END)
  681. #define GUI_INPUT_IS_FORMAT_MARKER(ch) 
  682.                   (((ch) & GUI_INPUT_MARKER_FORMAT_MASK) == GUI_INPUT_MARKER_FORMAT)
  683. #define GUI_INPUT_IS_PARAGRAPH_MARKER(ch) 
  684.                   (((ch) & GUI_INPUT_MARKER_PARAGRAPH_MASK) == GUI_INPUT_MARKER_PARAGRAPH)
  685. /* Format marker */
  686. /* test 1-bit flag */
  687. #define GUI_INPUT_CHECK_FORMAT_MARKER(ch, flag) 
  688.                    (((ch) & (flag)) == (flag))
  689. /* test multiple-bit flag */
  690. #define GUI_INPUT_CHECK_SIZE_MARKER(ch,  flag)  
  691.                   (((ch) & GUI_INPUT_MARKER_SIZE_MASK) == (flag))
  692. /* test 1-bit flag */
  693. #define GUI_INPUT_CHECK_PARAGRAPH_MARKER(ch, flag) 
  694.                    (((ch) & (flag)) == (flag))
  695. /* test multiple-bit flag */
  696. #define GUI_INPUT_CHECK_ALIGN_MARKER(ch, flag) 
  697.                   (((ch) & GUI_INPUT_MARKER_ALIGN_MASK) == (flag))
  698. #define GUI_INPUT_CHECK_LINE_SPACING_MARKER(ch, flag) 
  699.                   (((ch) & GUI_INPUT_MARKER_LINE_SPACING_MASK) == (flag))
  700. typedef struct
  701. {
  702.     color default_color;
  703.     color curr_color;
  704.     /* USAT */
  705.     color default_text_bg_color;
  706.     color curr_text_bg_color;
  707.     U8 draw_text_bg_color;
  708.     gui_input_alignment_enum default_alignment;
  709.     gui_input_alignment_enum curr_alignment;
  710.     stFontAttribute curr_font;
  711.     U8 curr_border;         /* border not part of font attribute */
  712.     /* USAT */
  713.     U8 curr_strikethrough;  /* strikethrough not part of font attribute */
  714.     /* backup the font used at the beginning of a line */
  715.     stFontAttribute line_begin_font;
  716.     U8 line_begin_border;
  717.     /* USAT */
  718.     U8 line_begin_strikethrough;
  719.     /* attributes that are only active in the current line */
  720.     U8 more_line_spacing;
  721.     U8 line_separator;
  722. } gui_input_richtext_struct;
  723. /* USAT */
  724. extern void UI_draw_horizontal_line(S32 x1, S32 x2, S32 y, color c);
  725. extern void UI_fill_rectangle(S32 x1, S32 y1, S32 x2, S32 y2, color c);
  726. color gui_richtext_strikethrough_color = {255, 112, 125, 240};
  727. color gui_richtext_default_text_bg_color = {255, 255, 255, 100};
  728. /* barcode */
  729. color gui_hilite_underline_color = {0, 0, 220};
  730. /* 122 colors */
  731. static const color g_mmi_gui_input_format_color_table[] = 
  732. {
  733.     {255, 0, 0, 100},
  734.     {255, 255, 0, 100},
  735.     {0, 255, 0, 100},
  736.     {0, 255, 255, 100},
  737.     {0, 0, 235, 100},   /* Avoid transparent color */
  738.     {255, 0, 255, 100},
  739.     {255, 255, 255, 100},
  740.     {230, 230, 230, 100},
  741.     {218, 218, 218, 100},
  742.     {205, 205, 205, 100},
  743.     {192, 192, 192, 100},
  744.     {180, 180, 180, 100},
  745.     {168, 168, 168, 100},
  746.     {154, 154, 154, 100},
  747.     {141, 141, 141, 100},
  748.     {129, 129, 129, 100},
  749.     {230, 0, 6, 100},
  750.     {255, 237, 0, 100},
  751.     {0, 152, 55, 100},
  752.     {0, 166, 234, 100},
  753.     {45, 29, 134, 100},
  754.     {228, 0, 132, 100},
  755.     {116, 116, 116, 100},
  756.     {102, 102, 102, 100},
  757.     {89, 89, 89, 100},
  758.     {75, 75, 75, 100},
  759.     {62, 62, 62, 100},
  760.     {48, 48, 48, 100},
  761.     {33, 33, 33, 100},
  762.     {19, 19, 19, 100},
  763.     {10, 10, 10, 100},
  764.     {0, 0, 0, 100},
  765.     {240, 148, 115, 100},
  766.     {244, 173, 124, 100},
  767.     {249, 200, 134, 100},
  768.     {255, 245, 148, 100},
  769.     {209, 224, 149, 100},
  770.     {173, 210, 149, 100},
  771.     {141, 199, 149, 100},
  772.     {136, 203, 199, 100},
  773.     {129, 207, 244, 100},
  774.     {136, 169, 217, 100},
  775.     {141, 147, 199, 100},
  776.     {144, 127, 186, 100},
  777.     {169, 134, 188, 100},
  778.     {195, 141, 187, 100},
  779.     {238, 155, 193, 100},
  780.     {238, 151, 156, 100},
  781.     {233, 98, 63, 100},
  782.     {240, 136, 70, 100},
  783.     {245, 175, 77, 100},
  784.     {255, 240, 87, 100},
  785.     {138, 208, 96, 100},
  786.     {136, 192, 102, 100},
  787.     {79, 176, 104, 100},
  788.     {66, 138, 177, 100},
  789.     {12, 188, 239, 100},
  790.     {85, 138, 199, 100},
  791.     {98, 109, 179, 100},
  792.     {104, 81, 159, 100},
  793.     {139, 85, 160, 100},
  794.     {172, 91, 161, 100},
  795.     {233, 102, 163, 100},
  796.     {233, 101, 117, 100},
  797.     {230, 0, 6, 100},
  798.     {234, 89, 0, 100},
  799.     {242, 143, 0, 100},
  800.     {255, 237, 0, 100},
  801.     {153, 192, 0, 100},
  802.     {79, 172, 37, 100},
  803.     {0, 152, 55, 100},
  804.     {0, 158, 150, 100},
  805.     {0, 166, 234, 100},
  806.     {0, 104, 180, 100},
  807.     {1, 70, 154, 100},
  808.     {45, 29, 134, 100},
  809.     {107, 18, 133, 100},
  810.     {149, 0, 133, 100},
  811.     {228, 0, 132, 100},
  812.     {229, 0, 79, 100},
  813.     {159, 0, 3, 100},
  814.     {161, 60, 0, 100},
  815.     {167, 98, 0, 100},
  816.     {179, 162, 0, 100},
  817.     {102, 132, 0, 100},
  818.     {45, 118, 21, 100},
  819.     {0, 105, 35, 100},
  820.     {0, 109, 103, 100},
  821.     {0, 113, 164, 100},
  822.     {0, 69, 128, 100},
  823.     {0, 43, 109, 100},
  824.     {32, 4, 95, 100},
  825.     {74, 0, 94, 100},
  826.     {103, 0, 92, 100},
  827.     {159, 0, 90, 100},
  828.     {160, 0, 52, 100},
  829.     {117, 0, 0, 100},
  830.     {120, 43, 0, 100},
  831.     {124, 70, 0, 100},
  832.     {131, 118, 0, 100},
  833.     {69, 96, 0, 100},
  834.     {22, 86, 10, 100},
  835.     {0, 76, 23, 100},
  836.     {0, 79, 74, 100},
  837.     {0, 82, 121, 100},
  838.     {0, 47, 93, 100},
  839.     {0, 23, 77, 100},
  840.     {22, 0, 68, 100},
  841.     {56, 0, 67, 100},
  842.     {78, 0, 65, 100},
  843.     {119, 0, 64, 100},
  844.     {118, 0, 33, 100},
  845.     {203, 187, 164, 100},
  846.     {165, 141, 121, 100},
  847.     {125, 99, 85, 100},
  848.     {90, 65, 58, 100},
  849.     {63, 41, 35, 100},
  850.     {199, 163, 111, 100},
  851.     {176, 130, 78, 100},
  852.     {150, 98, 46, 100},
  853.     {124, 74, 25, 100},
  854.     {101, 51, 7, 100}
  855. };
  856. /* 147 colors */
  857. static const color g_mmi_gui_input_format_w3c_color_table[] = 
  858. {
  859.     {240, 248, 255, 100},
  860.     {250, 235, 215, 100},
  861.     {0, 255, 255, 100},
  862.     {127, 255, 212, 100},
  863.     {240, 255, 255, 100},
  864.     {245, 245, 220, 100},
  865.     {255, 228, 196, 100},
  866.     {0, 0, 0, 100},
  867.     {255, 235, 205, 100},
  868.     {0, 0, 235, 100},   /* Avoid transparent color */
  869.     {138, 43, 226, 100},
  870.     {165, 42, 42, 100},
  871.     {222, 184, 135, 100},
  872.     {95, 158, 160, 100},
  873.     {127, 255, 0, 100},
  874.     {210, 105, 30, 100},
  875.     {255, 127, 80, 100},
  876.     {100, 149, 237, 100},
  877.     {255, 248, 220, 100},
  878.     {220, 20, 60, 100},
  879.     {0, 255, 255, 100},
  880.     {0, 0, 139, 100},
  881.     {0, 139, 139, 100},
  882.     {184, 134, 11, 100},
  883.     {169, 169, 169, 100},
  884.     {0, 100, 0, 100},
  885.     {169, 169, 169, 100},
  886.     {189, 183, 107, 100},
  887.     {139, 0, 139, 100},
  888.     {85, 107, 47, 100},
  889.     {255, 140, 0, 100},
  890.     {153, 50, 204, 100},
  891.     {139, 0, 0, 100},
  892.     {233, 150, 122, 100},
  893.     {143, 188, 143, 100},
  894.     {72, 61, 139, 100},
  895.     {47, 79, 79, 100},
  896.     {47, 79, 79, 100},
  897.     {0, 206, 209, 100},
  898.     {148, 0, 211, 100},
  899.     {255, 20, 147, 100},
  900.     {0, 191, 255, 100},
  901.     {105, 105, 105, 100},
  902.     {105, 105, 105, 100},
  903.     {30, 144, 255, 100},
  904.     {178, 34, 34, 100},
  905.     {255, 250, 240, 100},
  906.     {34, 139, 34, 100},
  907.     {255, 0, 255, 100},
  908.     {220, 220, 220, 100},
  909.     {248, 248, 255, 100},
  910.     {255, 215, 0, 100},
  911.     {218, 165, 32, 100},
  912.     {128, 128, 128, 100},
  913.     {128, 128, 128, 100},
  914.     {0, 128, 0, 100},
  915.     {173, 255, 47, 100},
  916.     {240, 255, 240, 100},
  917.     {255, 105, 180, 100},
  918.     {205, 92, 92, 100},
  919.     {75, 0, 130, 100},
  920.     {255, 255, 240, 100},
  921.     {240, 230, 140, 100},
  922.     {230, 230, 250, 100},
  923.     {255, 240, 245, 100},
  924.     {124, 252, 0, 100},
  925.     {255, 250, 205, 100},
  926.     {173, 216, 230, 100},
  927.     {240, 128, 128, 100},
  928.     {224, 255, 255, 100},
  929.     {250, 250, 210, 100},
  930.     {211, 211, 211, 100},
  931.     {144, 238, 144, 100},
  932.     {211, 211, 211, 100},
  933.     {255, 182, 193, 100},
  934.     {255, 160, 122, 100},
  935.     {32, 178, 170, 100},
  936.     {135, 206, 250, 100},
  937.     {119, 136, 153, 100},
  938.     {119, 136, 153, 100},
  939.     {176, 196, 222, 100},
  940.     {255, 255, 224, 100},
  941.     {0, 255, 0, 100},
  942.     {50, 205, 50, 100},
  943.     {250, 240, 230, 100},
  944.     {255, 0, 255, 100},
  945.     {128, 0, 0, 100},
  946.     {102, 205, 170, 100},
  947.     {0, 0, 205, 100},
  948.     {186, 85, 211, 100},
  949.     {147, 112, 219, 100},
  950.     {60, 179, 113, 100},
  951.     {123, 104, 238, 100},
  952.     {0, 250, 154, 100},
  953.     {72, 209, 204, 100},
  954.     {199, 21, 133, 100},
  955.     {25, 25, 112, 100},
  956.     {245, 255, 250, 100},
  957.     {255, 228, 225, 100},
  958.     {255, 228, 181, 100},
  959.     {255, 222, 173, 100},
  960.     {0, 0, 128, 100},
  961.     {253, 245, 230, 100},
  962.     {128, 128, 0, 100},
  963.     {107, 142, 35, 100},
  964.     {255, 165, 0, 100},
  965.     {255, 69, 0, 100},
  966.     {218, 112, 214, 100},
  967.     {238, 232, 170, 100},
  968.     {152, 251, 152, 100},
  969.     {175, 238, 238, 100},
  970.     {219, 112, 147, 100},
  971.     {255, 239, 213, 100},
  972.     {255, 218, 185, 100},
  973.     {205, 133, 63, 100},
  974.     {255, 192, 203, 100},
  975.     {221, 160, 221, 100},
  976.     {176, 224, 230, 100},
  977.     {128, 0, 128, 100},
  978.     {255, 0, 0, 100},
  979.     {188, 143, 143, 100},
  980.     {65, 105, 225, 100},
  981.     {139, 69, 19, 100},
  982.     {250, 128, 114, 100},
  983.     {244, 164, 96, 100},
  984.     {46, 139, 87, 100},
  985.     {255, 245, 238, 100},
  986.     {160, 82, 45, 100},
  987.     {192, 192, 192, 100},
  988.     {135, 206, 235, 100},
  989.     {106, 90, 205, 100},
  990.     {112, 128, 144, 100},
  991.     {112, 128, 144, 100},
  992.     {255, 250, 250, 100},
  993.     {0, 255, 127, 100},
  994.     {70, 130, 180, 100},
  995.     {210, 180, 140, 100},
  996.     {0, 128, 128, 100},
  997.     {216, 191, 216, 100},
  998.     {255, 99, 71, 100},
  999.     {64, 224, 208, 100},
  1000.     {238, 130, 238, 100},
  1001.     {245, 222, 179, 100},
  1002.     {255, 255, 255, 100},
  1003.     {245, 245, 245, 100},
  1004.     {255, 255, 0, 100},
  1005.     {154, 205, 50, 100}
  1006. };
  1007. /* USAT */
  1008. /* 16 colors */
  1009. static const color g_mmi_gui_input_format_w3c_text_background_color_table[] = 
  1010. {
  1011.     {169, 169, 169, 100},
  1012.     {139, 0, 0, 100},
  1013.     {255, 255, 0, 100},
  1014.     {0, 100, 0, 100},
  1015.     {0, 139, 139, 100},
  1016.     {0, 0, 139, 100},
  1017.     {139, 0, 139, 100},
  1018.     {128, 128, 128, 100},
  1019.     {255, 255, 255, 100},
  1020.     {255, 0, 0, 100},
  1021.     {255, 255, 224, 100},
  1022.     {144, 238, 144, 100},
  1023.     {224, 255, 255, 100},
  1024.     {173, 216, 230, 100},
  1025.     {255, 0, 255, 100},
  1026.     {0, 0, 0, 100}
  1027. };
  1028. #define MAX_GUI_INPUT_COLOR         (sizeof(g_mmi_gui_input_format_color_table)/sizeof(color))
  1029. #define MAX_GUI_INPUT_W3C_COLOR     (sizeof(g_mmi_gui_input_format_w3c_color_table)/sizeof(color))
  1030. /* USAT */
  1031. #define MAX_GUI_INPUT_W3C_TEXT_BG_COLOR      (sizeof(g_mmi_gui_input_format_w3c_text_background_color_table)/sizeof(color))
  1032. /*
  1033.  * WCSS
  1034.  */
  1035. #if defined(__MMI_WCSS_INPUT_FORMAT_SUPPORT__)
  1036. #define PIXTEL_UI_ALL_INPUT_METHODS_ALLOWED        0x20
  1037. #define PIXTEL_UI_WCSS_SPACE_DEFAULT_CHARACTER     0x40
  1038. #define PIXTEL_UI_WCSS_STAR_INPUT               0x80
  1039. /* Prevent automatically changing input method while deleting characters 
  1040.    and also avoid reentrance of gui_change_WCSS_input_method() */
  1041. static U8 WCSS_input_change_enable = 1;
  1042. void gui_change_WCSS_input_method(multi_line_input_box *b);
  1043. /* Force to change input method regardless of multitap state */
  1044. static U8 WCSS_Esc_Char = 0;
  1045. extern MMI_BOOL is_fisrt_entry_WCSS_editor;
  1046. #endif /* defined(__MMI_WCSS_INPUT_FORMAT_SUPPORT__) */ 
  1047. /* START FARHAD PMT 20050211 */
  1048. #ifdef __MMI_HINDI_ALG__
  1049. extern BOOL cancelWidth;
  1050. #endif 
  1051. /* END FARHAD PMT 20050211 */
  1052. /* for R2L characters */
  1053. #ifdef __MMI_BIDI_ALG__
  1054. U8 visual_str[MAX_TEXT_LENGTH * BIDI_ENCODING_LENGTH];
  1055. /* MTK begin chat issue 2005.10.27 */
  1056. #ifdef __MMI_MESSAGES_CHAT__
  1057. U8 visual_str_chat[MAX_TEXT_LENGTH * BIDI_ENCODING_LENGTH];
  1058. U8 *pTemp = NULL;
  1059. #endif /* __MMI_MESSAGES_CHAT__ */ 
  1060. /* MTK End */
  1061. U8 MMI_bidi_input_type = BIDI_L;
  1062. U16 pwcWord[MAX_TEXT_LENGTH];
  1063. #endif /* __MMI_BIDI_ALG__ */ 
  1064. BOOL r2lMMIFlag;
  1065. /* MTK Terry for 0x81 encoding support for Phone Book */
  1066. extern S16 MMI_current_input_ext_type;
  1067. extern U8 mmi_phb_convert_to_0x81(S8 *input_name, BOOL is_convert);
  1068. #if defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__)
  1069. S8 hilited_item_changed = 0;
  1070. extern void wgui_redraw_input_information_bar(void);
  1071. #endif /* defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__) */ 
  1072. /* GUI: multitap input object functions            */
  1073. extern U8 wgui_inputbox_information_flag;
  1074. extern S32 wgui_inputbox_information_bar_height;
  1075. extern void inline_fixed_list_goto_previous_item(void);
  1076. extern void inline_fixed_list_goto_next_item(void);
  1077. /* Auto scroll of Multiline Input text */
  1078. extern void multiline_inputbox_vertical_scroll(void);
  1079. /* START TARUN PMT 20041002 */
  1080. extern S8 g_mmi_wgui_halfline_marquee_scroll_enable;
  1081. #define MMI_HALF_LINE_MARQUEE_SCROLLING_ENABLE     1
  1082. /* END TARUN PMT 20041002 */
  1083. #if defined(__MMI_SMART_MESSAGE_MO__) && !defined(__MMI_MESSAGES_EMS__)
  1084. #include "SmsGuiInterfaceType.h"
  1085. #include "SettingProfile.h"
  1086. #include "MessagesResourceData.h"
  1087. #include "MessagesExDcl.h"
  1088. extern nsm_msg_struct g_nsm_msg_context;
  1089. #if (0)
  1090. /* under construction !*/
  1091. #endif /* (0) */ 
  1092. #endif /* defined(__MMI_SMART_MESSAGE_MO__) && !defined(__MMI_MESSAGES_EMS__) */ 
  1093. #if defined(__MMI_SMART_MESSAGE_MT__) || defined(__MMI_SMART_MESSAGE_MO__)
  1094. extern S32 wgui_inputbox_buffer_size;
  1095. #endif 
  1096. #if defined(__MMI_SMART_MESSAGE_MT__)
  1097. #include "MessagesExDcl.h"
  1098. #include "MessagesResourceData.h"
  1099. #include "HistoryGprot.h"
  1100. extern nsm_picmsg_text_struct picmsg_text_struct;
  1101. #endif /* defined(__MMI_SMART_MESSAGE_MT__) */ 
  1102. U8 numeric_leading_zero = TRUE;
  1103. UI_multitap_input_theme *current_multitap_input_theme = NULL;
  1104. UI_information_bar_theme *current_information_bar_theme = NULL;
  1105. #ifdef __MMI_TOUCH_DIAL_SCREEN__
  1106. MMI_ID_TYPE dialing_key_image[] = 
  1107. {
  1108.     IMG_DIALING_KEY_1,
  1109.     IMG_DIALING_KEY_2,
  1110.     IMG_DIALING_KEY_3,
  1111.     IMG_DIALING_KEY_4,
  1112.     IMG_DIALING_KEY_5,
  1113.     IMG_DIALING_KEY_6,
  1114.     IMG_DIALING_KEY_7,
  1115.     IMG_DIALING_KEY_8,
  1116.     IMG_DIALING_KEY_9,
  1117.     IMG_DIALING_KEY_STAR,
  1118.     IMG_DIALING_KEY_0,
  1119.     IMG_DIALING_KEY_HASH,
  1120. #if defined (__MMI_TOUCH_DIAL_SCREEN_WITH_FUNCTION__)
  1121.     IMG_DIALING_KEY_PHB,
  1122.     IMG_DIALING_KEY_CALL,
  1123.     IMG_DIALING_KEY_IPCALL,        //KP Jerry add on 2006-11-10
  1124. #endif /* defined (__MMI_TOUCH_DIAL_SCREEN_WITH_FUNCTION__) */ 
  1125. };
  1126. #endif /* __MMI_TOUCH_DIAL_SCREEN__ */ 
  1127. /* MTK Elvis 20040611 for color dialing font */
  1128. const color_dialing_font color_dialing_font_map[] = 
  1129. {
  1130.     {'*', {255, 0, 0, 100}},
  1131.     {'#', {0, 0, 247, 100}},
  1132.     {'+', {0, 0, 247, 100}},
  1133.     {'p', {255, 0, 0, 100}},
  1134.     {'w', {0, 255, 0, 100}},
  1135.     {'0', {0, 255, 0, 100}},
  1136.     {'1', {255, 0, 0, 100}},
  1137.     {'2', {0, 255, 0, 100}},
  1138.     {'3', {0, 0, 247, 100}},
  1139.     {'4', {255, 0, 0, 100}},
  1140.     {'5', {0, 255, 0, 100}},
  1141.     {'6', {0, 0, 247, 100}},
  1142.     {'7', {255, 0, 0, 100}},
  1143.     {'8', {0, 255, 0, 100}},
  1144.     {'9', {0, 0, 247, 100}},
  1145.     {0, {0, 0, 0, 100}},
  1146. };
  1147. /* MTK end */
  1148. //PMT VIKAS START 20050530
  1149. //Remove this part of code.
  1150. #if 0
  1151. /* under construction !*/
  1152. /* under construction !*/
  1153. #ifdef __MMI_UI_TRANSPARENT_EFFECT__
  1154. /* under construction !*/
  1155. /* under construction !*/
  1156. /* under construction !*/
  1157. /* under construction !*/
  1158. /* under construction !*/
  1159. /* under construction !*/
  1160. /* under construction !*/
  1161. /* under construction !*/
  1162. /* under construction !*/
  1163. /* under construction !*/
  1164. /* under construction !*/
  1165. /* under construction !*/
  1166. /* under construction !*/
  1167. /* under construction !*/
  1168. /* under construction !*/
  1169. /* under construction !*/
  1170. /* under construction !*/
  1171. /* under construction !*/
  1172. /* under construction !*/
  1173. /* under construction !*/
  1174. /* under construction !*/
  1175. /* under construction !*/
  1176. /* under construction !*/
  1177. /* under construction !*/
  1178. /* under construction !*/
  1179. /* under construction !*/
  1180. /* under construction !*/
  1181. /* under construction !*/
  1182. /* under construction !*/
  1183. /* under construction !*/
  1184. /* under construction !*/
  1185. /* under construction !*/
  1186. /* under construction !*/
  1187. /* under construction !*/
  1188. /* under construction !*/
  1189. /* under construction !*/
  1190. /* under construction !*/
  1191. /* under construction !*/
  1192. /* under construction !*/
  1193. /* under construction !*/
  1194. /* under construction !*/
  1195. /* under construction !*/
  1196. /* under construction !*/
  1197. #endif
  1198. /* under construction !*/
  1199. /* under construction !*/
  1200. #endif /* 0 */ 
  1201. /* PMT VIKAS END */
  1202. /*****************************************************************************
  1203.  * FUNCTION
  1204.  *  set_leading_zero
  1205.  * DESCRIPTION
  1206.  *  set the flag..whether zero is allowed as first number or not
  1207.  *  Input Parameter      u8 u8type
  1208.  * PARAMETERS
  1209.  *  u8type      [IN]        
  1210.  * RETURNS
  1211.  *  void
  1212.  *****************************************************************************/
  1213. void set_leading_zero(U8 u8type)
  1214. {
  1215.     /*----------------------------------------------------------------*/
  1216.     /* Local Variables                                                */
  1217.     /*----------------------------------------------------------------*/
  1218.     /*----------------------------------------------------------------*/
  1219.     /* Code Body                                                      */
  1220.     /*----------------------------------------------------------------*/
  1221.     numeric_leading_zero = u8type;
  1222. }
  1223. /*****************************************************************************
  1224.  * FUNCTION
  1225.  *  gui_set_multitap_input_current_theme
  1226.  * DESCRIPTION
  1227.  *  Applies the current theme for a multitap input object
  1228.  * PARAMETERS
  1229.  *  m       [IN]        Is the multitap input object
  1230.  * RETURNS
  1231.  *  void
  1232.  *****************************************************************************/
  1233. void gui_set_multitap_input_current_theme(multitap_input *m)
  1234. {
  1235.     /*----------------------------------------------------------------*/
  1236.     /* Local Variables                                                */
  1237.     /*----------------------------------------------------------------*/
  1238.     /*----------------------------------------------------------------*/
  1239.     /* Code Body                                                      */
  1240.     /*----------------------------------------------------------------*/
  1241.     m->normal_text_color = current_multitap_input_theme->normal_text_color;
  1242.     m->selected_text_color = current_multitap_input_theme->selected_text_color;
  1243.     m->selector_color = current_multitap_input_theme->selector_color;
  1244.     m->f = current_multitap_input_theme->f;
  1245.     m->text_font = current_multitap_input_theme->text_font;
  1246.     m->text_gap = current_multitap_input_theme->text_gap;
  1247.     m->flags |= current_multitap_input_theme->flags;
  1248. }
  1249. /*****************************************************************************
  1250.  * FUNCTION
  1251.  *  gui_set_multitap_input_theme
  1252.  * DESCRIPTION
  1253.  *  Applies the given theme to a multitap input object
  1254.  * PARAMETERS
  1255.  *  m       [IN]        Is the multitap input object
  1256.  *  t       [IN]        Is the theme
  1257.  * RETURNS
  1258.  *  void
  1259.  *****************************************************************************/
  1260. void gui_set_multitap_input_theme(multitap_input *m, UI_multitap_input_theme *t)
  1261. {
  1262.     /*----------------------------------------------------------------*/
  1263.     /* Local Variables                                                */
  1264.     /*----------------------------------------------------------------*/
  1265.     /*----------------------------------------------------------------*/
  1266.     /* Code Body                                                      */
  1267.     /*----------------------------------------------------------------*/
  1268.     m->normal_text_color = t->normal_text_color;
  1269.     m->selected_text_color = t->selected_text_color;
  1270.     m->selector_color = t->selector_color;
  1271.     m->f = t->f;
  1272.     m->text_font = t->text_font;
  1273.     m->text_gap = t->text_gap;
  1274.     m->flags |= t->flags;
  1275. }
  1276. /*****************************************************************************
  1277.  * FUNCTION
  1278.  *  gui_set_multitap_input_text
  1279.  * DESCRIPTION
  1280.  *  
  1281.  * PARAMETERS
  1282.  *  b           [?]         
  1283.  *  text        [IN]        
  1284.  * RETURNS
  1285.  *  void
  1286.  *****************************************************************************/
  1287. void gui_set_multitap_input_text(multitap_input *b, UI_string_type text)
  1288. {
  1289.     /*----------------------------------------------------------------*/
  1290.     /* Local Variables                                                */
  1291.     /*----------------------------------------------------------------*/
  1292.     S32 string_width, string_height;
  1293.     S32 width = b->width;
  1294.     S32 height = b->height;
  1295.     /*----------------------------------------------------------------*/
  1296.     /* Code Body                                                      */
  1297.     /*----------------------------------------------------------------*/
  1298.     b->text = text;
  1299.     gui_set_font(b->text_font);
  1300.     gui_measure_string_w(text, b->text_gap, &string_width, &string_height);
  1301.     if (b->flags & UI_MULTITAP_INPUT_CENTER_X)
  1302.     {
  1303.         b->text_x = (width >> 1) - (string_width >> 1);
  1304.     }
  1305.     else
  1306.     {
  1307.         b->text_x = 0;
  1308.     }
  1309.     if (b->flags & UI_MULTITAP_INPUT_CENTER_Y)
  1310.     {
  1311.         b->text_y = (height >> 1) - (string_height >> 1);
  1312.     }
  1313.     else
  1314.     {
  1315.         b->text_y = 0;
  1316.     }
  1317.     b->length = gui_strlen(b->text);
  1318.     b->current_position = b->length - 1;
  1319. }
  1320. /*****************************************************************************
  1321.  * FUNCTION
  1322.  *  gui_create_multitap_input
  1323.  * DESCRIPTION
  1324.  *  Applies the given theme to a multitap input object
  1325.  *  
  1326.  *  Note: Each key on a keypad requires one multitap input object.
  1327.  *  For example, the text for multitap input for key 2 would be "ABC2"
  1328.  * PARAMETERS
  1329.  *  b               [?]         
  1330.  *  x               [IN]        Is the left-top corner
  1331.  *  y               [IN]        Is the left-top corner
  1332.  *  width           [IN]        Is the width of the multitap-input object
  1333.  *  height          [IN]        Is the height of the multitap-input object
  1334.  *  text            [IN]        Is a pointer to the string containing all the characters
  1335.  *  m(?)            [IN]        Is the multitap input object
  1336.  *  possible(?)     [IN]        With this multitap-input object.
  1337.  * RETURNS
  1338.  *  void
  1339.  *****************************************************************************/
  1340. void gui_create_multitap_input(multitap_input *b, S32 x, S32 y, S32 width, S32 height, UI_string_type text)
  1341. {
  1342.     /*----------------------------------------------------------------*/
  1343.     /* Local Variables                                                */
  1344.     /*----------------------------------------------------------------*/
  1345.     S32 string_width, string_height;
  1346.     /*----------------------------------------------------------------*/
  1347.     /* Code Body                                                      */
  1348.     /*----------------------------------------------------------------*/
  1349.     b->x = x;
  1350.     b->y = y;
  1351.     b->width = width;
  1352.     b->height = height;
  1353.     b->flags = 0;
  1354.     b->text = text;
  1355.     gui_set_multitap_input_current_theme(b);
  1356.     /* Autocalculate the text position based on font   */
  1357.     gui_set_font(b->text_font);
  1358.     /* PMT dara added for multitap thai */
  1359. #ifdef __MMI_MULTITAP_THAI__
  1360.     Get_StringWidthHeight_multitap((U8*) text, b->text_gap, &string_width, &string_height);
  1361. #else 
  1362.     gui_measure_string_w(text, b->text_gap, &string_width, &string_height);
  1363. #endif 
  1364.     if (b->flags & UI_MULTITAP_INPUT_CENTER_X)
  1365.     {
  1366.         b->text_x = (width >> 1) - (string_width >> 1);
  1367.     }
  1368.     else
  1369.     {
  1370.         b->text_x = 0;
  1371.     }
  1372.     if (b->flags & UI_MULTITAP_INPUT_CENTER_Y)
  1373.     {
  1374.         b->text_y = (height >> 1) - (string_height >> 1);
  1375.     }
  1376.     else
  1377.     {
  1378.         b->text_y = 0;
  1379.     }
  1380.     b->length = gui_strlen(b->text);
  1381.     b->current_position = b->length - 1;
  1382.     b->input_complete_callback = UI_dummy_function;
  1383.     b->input_callback = UI_dummy_function_character;
  1384. }
  1385. /*****************************************************************************
  1386.  * FUNCTION
  1387.  *  gui_move_multitap_input
  1388.  * DESCRIPTION
  1389.  *  move multitap to x , y position
  1390.  * PARAMETERS
  1391.  *  b           [?]         
  1392.  *  x           [IN]        Is the left-top corner
  1393.  *  y           [IN]        Is the left-top corner
  1394.  *  m(?)        [IN]        Is the multitap input object
  1395.  * RETURNS
  1396.  *  void
  1397.  *****************************************************************************/
  1398. void gui_move_multitap_input(multitap_input *b, S32 x, S32 y)
  1399. {
  1400.     /*----------------------------------------------------------------*/
  1401.     /* Local Variables                                                */
  1402.     /*----------------------------------------------------------------*/
  1403.     /*----------------------------------------------------------------*/
  1404.     /* Code Body                                                      */
  1405.     /*----------------------------------------------------------------*/
  1406.     b->x = x;
  1407.     b->y = y;
  1408. }
  1409. /*****************************************************************************
  1410.  * FUNCTION
  1411.  *  gui_resize_multitap_input
  1412.  * DESCRIPTION
  1413.  *  resize  multitap
  1414.  * PARAMETERS
  1415.  *  b           [?]         
  1416.  *  width       [IN]        Width of multitap
  1417.  *  height      [IN]        Height of multitap
  1418.  *  m(?)        [IN]        Is the multitap input object
  1419.  * RETURNS
  1420.  *  void
  1421.  *****************************************************************************/
  1422. void gui_resize_multitap_input(multitap_input *b, S32 width, S32 height)
  1423. {
  1424.     /*----------------------------------------------------------------*/
  1425.     /* Local Variables                                                */
  1426.     /*----------------------------------------------------------------*/
  1427.     S32 string_width, string_height;
  1428.     /*----------------------------------------------------------------*/
  1429.     /* Code Body                                                      */
  1430.     /*----------------------------------------------------------------*/
  1431.     b->width = width;
  1432.     b->height = height;
  1433.     /* Autocalculate the text position based on font   */
  1434.     gui_set_font(b->text_font);
  1435.     /* PMT dara added for Multitap thai */
  1436. #ifdef __MMI_MULTITAP_THAI__
  1437.     Get_StringWidthHeight_multitap((U8*) b->text, b->text_gap, &string_width, &string_height);
  1438. #else 
  1439.     gui_measure_string_w(b->text, b->text_gap, &string_width, &string_height);
  1440. #endif 
  1441.     if (b->flags & UI_MULTITAP_INPUT_CENTER_X)
  1442.     {
  1443.         b->text_x = (width >> 1) - (string_width >> 1);
  1444.     }
  1445.     else
  1446.     {
  1447.         b->text_x = 0;
  1448.     }
  1449.     if (b->flags & UI_MULTITAP_INPUT_CENTER_Y)
  1450.     {
  1451.         b->text_y = (height >> 1) - (string_height >> 1);
  1452.     }
  1453.     else
  1454.     {
  1455.         b->text_y = 0;
  1456.     }
  1457. }
  1458. /*****************************************************************************
  1459.  * FUNCTION
  1460.  *  gui_set_multitap_input_callbacks
  1461.  * DESCRIPTION
  1462.  *  Sets the callback functions for a multitap input object
  1463.  *  
  1464.  *  See the documentation for the operation of the callback functions.
  1465.  * PARAMETERS
  1466.  *  b                           [?]         
  1467.  *  input_callback              [IN]        Is the function that is called whenever the
  1468.  *  input_complete_callback     [IN]        Is the function that is called when
  1469.  *  the(?)                      [IN]        Input character is confirmed.
  1470.  *  m(?)                        [IN]        Is the multitap input object
  1471.  *  This(?)                     [IN]        Causes the timer associated witht the multitap object
  1472.  *  state(?)                    [IN]        Of the multitap inputobject changes
  1473.  *  to(?)                       [IN]        Expire and call the input_complete_callback function)
  1474.  *  ke(?)                       [IN]        (Ex: in "ABC2", the user has selected "B" and releases the key,
  1475.  *  in(?)                       [IN]        (Ex: in "ABC2", the user has selected "B" and releases the key,
  1476.  * RETURNS
  1477.  *  void
  1478.  *****************************************************************************/
  1479. void gui_set_multitap_input_callbacks(
  1480.         multitap_input *b,
  1481.         void (*input_callback) (UI_character_type),
  1482.         void (*input_complete_callback) (void))
  1483. {
  1484.     /*----------------------------------------------------------------*/
  1485.     /* Local Variables                                                */
  1486.     /*----------------------------------------------------------------*/
  1487.     /*----------------------------------------------------------------*/
  1488.     /* Code Body                                                      */
  1489.     /*----------------------------------------------------------------*/
  1490.     b->input_complete_callback = input_complete_callback;
  1491.     b->input_callback = input_callback;
  1492. }
  1493. /*****************************************************************************
  1494.  * FUNCTION
  1495.  *  gui_change_multitap_input_state
  1496.  * DESCRIPTION
  1497.  *  Causes the multitap input object to change its state
  1498.  *  
  1499.  *  Example, if "ABC2" is now highlighting "A", calling this
  1500.  *  function will cause it to highlight "B".
  1501.  *  This also causes the input_callback function to be called.
  1502.  *  This function is normally called on key-down or key-repeat
  1503.  * PARAMETERS
  1504.  *  b           [?]         
  1505.  *  m(?)        [IN]        Is the multitap input object
  1506.  * RETURNS
  1507.  *  void
  1508.  *****************************************************************************/
  1509. void gui_change_multitap_input_state(multitap_input *b)
  1510. {
  1511.     /*----------------------------------------------------------------*/
  1512.     /* Local Variables                                                */
  1513.     /*----------------------------------------------------------------*/
  1514.     /*----------------------------------------------------------------*/
  1515.     /* Code Body                                                      */
  1516.     /*----------------------------------------------------------------*/
  1517.     /* MTK Terry for null multitap */
  1518.     if (0 == b->length)
  1519.     {
  1520.         return;
  1521.     }
  1522.     b->current_position++;
  1523.     if (b->current_position >= b->length)
  1524.     {
  1525.         b->current_position = 0;
  1526.     }
  1527.     /* MTK Terry for multitap length > lcm width */
  1528.     if (b->text_x <= 0)
  1529.     {
  1530.         S32 string_width = 0, string_height = 0;
  1531.         gui_set_font(b->text_font);
  1532.         gui_measure_string_w(b->text, b->text_gap, &string_width, &string_height);
  1533.         if (b->current_position > ((b->length) >> 1))
  1534.         {
  1535.             b->text_x = b->width - string_width;
  1536.         }
  1537.         else
  1538.         {
  1539.             b->text_x = 0;
  1540.         }
  1541.     }
  1542.     b->input_callback(b->text[b->current_position]);
  1543. }
  1544. /*****************************************************************************
  1545.  * FUNCTION
  1546.  *  gui_multitap_input_complete
  1547.  * DESCRIPTION
  1548.  *  Completes the input in the current multitap object
  1549.  *  
  1550.  *  This also causes the input_complete_callback function to be called.
  1551.  *  This function is normally called on key-up
  1552.  * PARAMETERS
  1553.  *  b           [?]         
  1554.  *  m(?)        [IN]        Is the multitap input object
  1555.  * RETURNS
  1556.  *  void
  1557.  *****************************************************************************/
  1558. void gui_multitap_input_complete(multitap_input *b)
  1559. {
  1560. #if defined(__MMI_WCSS_INPUT_FORMAT_SUPPORT__)
  1561.     /*----------------------------------------------------------------*/
  1562.     /* Local Variables                                                */
  1563.     /*----------------------------------------------------------------*/
  1564.     /*----------------------------------------------------------------*/
  1565.     /* Code Body                                                      */
  1566.     /*----------------------------------------------------------------*/
  1567.     /* Gurinder - It will chnage the cursor location on multitap complete */
  1568.     /*
  1569.      * Justin: it will not invokes gui_show_multi_line_inputbox on multitap completion
  1570.      * * and it needs to change input method by itself
  1571.      */
  1572.     if (MMI_multiline_inputbox.flags & UI_MULTI_LINE_WCSS_INPUT_BOX_ENABLE)
  1573.     {
  1574.         /* To Solve Input Mode Change Bug - Gurinder 4/5/2003 */
  1575.         WCSS_Esc_Char = 1;
  1576.         gui_change_WCSS_input_method(&MMI_multiline_inputbox);
  1577.     }
  1578. #endif /* defined(__MMI_WCSS_INPUT_FORMAT_SUPPORT__) */ 
  1579.     b->current_position = b->length - 1;
  1580.     b->input_complete_callback();
  1581. }
  1582. /*****************************************************************************
  1583.  * FUNCTION
  1584.  *  gui_show_multitap_input
  1585.  * DESCRIPTION
  1586.  *  Displays the multitap input object
  1587.  * PARAMETERS
  1588.  *  b           [?]         
  1589.  *  m(?)        [IN]        Is the multitap input object
  1590.  * RETURNS
  1591.  *  void
  1592.  *****************************************************************************/
  1593. void gui_show_multitap_input(multitap_input *b)
  1594. {
  1595.     /*----------------------------------------------------------------*/
  1596.     /* Local Variables                                                */
  1597.     /*----------------------------------------------------------------*/
  1598.     S32 x1, y1, x2, y2;
  1599.     S32 sy1, sy2;
  1600.     S32 text_x, text_y;
  1601.     color text_color;
  1602.     UI_filled_area *f;
  1603. #if defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__)
  1604.     UI_filled_area fTemp;
  1605. #endif 
  1606.     UI_character_type current_character;
  1607.     S32 i;
  1608.     S32 character_width;
  1609.     UI_string_type text = b->text;
  1610. #ifdef __MMI_HINDI_ALG__
  1611.     S32 character_height;
  1612. #endif 
  1613.     /*----------------------------------------------------------------*/
  1614.     /* Code Body                                                      */
  1615.     /*----------------------------------------------------------------*/
  1616.     x1 = b->x;
  1617.     y1 = b->y;
  1618.     x2 = x1 + b->width - 1;
  1619.     y2 = y1 + b->height - 1;
  1620.     text_x = b->text_x + x1;
  1621.     text_y = b->text_y + y1;
  1622.     sy1 = y1;
  1623.     sy2 = y2;
  1624.     f = b->f;
  1625.     if ((b->f->flags & UI_FILLED_AREA_DOUBLE_BORDER) == UI_FILLED_AREA_DOUBLE_BORDER)
  1626.     {
  1627.         sy1 += 2;
  1628.         sy2 -= 2;
  1629.     }
  1630.     else if (b->f->flags & UI_FILLED_AREA_BORDER)
  1631.     {
  1632.         sy1 += 1;
  1633.         sy2 -= 1;
  1634.     }
  1635.     gui_push_clip();
  1636.     gui_set_clip(x1, y1, x2 + 2, y2 + 2);
  1637.     /* Pixtel - Gurinder - 2/6/4 - Dont show mutlitap shadow if __MMI_INSCREEN_MULTILINE_TEXTBOX__ is defined. */
  1638. #if defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__)
  1639.     fTemp = *f;
  1640.     if (MMI_multi_line_inputbox_present)
  1641.     {
  1642.         if (f->flags & UI_FILLED_AREA_SHADOW)
  1643.         {
  1644.             fTemp.flags &= ~UI_FILLED_AREA_SHADOW;
  1645.         }
  1646.     }
  1647.     gui_draw_filled_area(x1, y1, x2, y2, &fTemp);
  1648. #else /* defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__) */ 
  1649.     gui_draw_filled_area(x1, y1, x2, y2, f);
  1650. #endif /* defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__) */ 
  1651.     gui_push_text_clip();
  1652.     gui_set_text_clip(x1, y1, x2, y2);
  1653.     gui_set_font(b->text_font);
  1654.     for (i = 0; i < b->length; i++)
  1655.     {
  1656.         current_character = gui_get_next_character(&text);  /* get next character of text */
  1657.         /* HACK: Space character should be displayed as 0x86 but input as 0x20  */
  1658.         if (current_character == (UI_character_type) 0x20)
  1659.         {
  1660.             current_character = (UI_character_type) 0x86;
  1661.         }
  1662.         /* get character width in pixels */
  1663.         character_width = gui_get_character_width(current_character);
  1664.         /* set text xolor */
  1665.         text_color = b->normal_text_color;
  1666.     #if defined(__MMI_HINDI_ALG__)
  1667.         /* START VIJAY PMT 20050725...ADDED VALUE 134 FOR DOT */
  1668.         if (UI_HINDI_CHARACTER_UCS2_RANGE(current_character) || current_character == 46 || current_character == 134)
  1669.             /* END VIJAY PMT 20050725 */
  1670.         {
  1671.             get_multitap_text_x(&text_x, current_character, b->length, i);
  1672.         }
  1673.         PRINT_INFORMATION_2((MMI_TRACE_INFO, "pixtel_UI_show_text_x[text_x]:%d  ", text_x));
  1674.     #endif /* defined(__MMI_HINDI_ALG__) */ 
  1675.         if (i == b->current_position)
  1676.         {
  1677.         #if defined(__MMI_HINDI_ALG__)
  1678.             if (UI_HINDI_CHARACTER_UCS2_RANGE(current_character))
  1679.             {
  1680.                 Get_CharWidthHeight(current_character, &character_width, &character_height);
  1681.                 PRINT_INFORMATION_2((MMI_TRACE_INFO, "pixtel_UI_show_character_width[character_width]:%d  ",
  1682.                                      character_width));
  1683.                 gui_fill_rectangle(
  1684.                     text_x - (b->text_gap - 1),
  1685.                     sy1,
  1686.                     text_x + b->text_gap + character_width - 2,
  1687.                     sy2,
  1688.                     b->selector_color);
  1689.             }
  1690.             else
  1691.         #endif /* defined(__MMI_HINDI_ALG__) */ 
  1692.                 gui_fill_rectangle(
  1693.                     text_x - (b->text_gap - 1),
  1694.                     sy1,
  1695.                     text_x + b->text_gap + character_width - 2,
  1696.                     sy2,
  1697.                     b->selector_color);
  1698.             text_color = b->selected_text_color;
  1699.         }
  1700.         /* MTK Elvis for R2L characters */
  1701.         if (r2lMMIFlag)
  1702.         {
  1703.             gui_move_text_cursor(text_x + character_width, text_y);
  1704.         }
  1705.         else
  1706.         {
  1707.             gui_move_text_cursor(text_x, text_y);
  1708.         }
  1709.         /* MTK end */
  1710.         /* gui_move_text_cursor(text_x,text_y); */
  1711.         gui_set_text_color(text_color);
  1712.         gui_print_character(current_character);
  1713.         text_x += b->text_gap + character_width;
  1714.     }
  1715.     gui_pop_text_clip();
  1716.     gui_pop_clip();
  1717. }
  1718. #ifdef __MMI_TOUCH_SCREEN__
  1719. /*****************************************************************************
  1720.  * FUNCTION
  1721.  *  gui_multitap_input_translate_pen_position
  1722.  * DESCRIPTION
  1723.  *  
  1724.  * PARAMETERS
  1725.  *  b                   [IN]        
  1726.  *  x                   [IN]        
  1727.  *  y                   [IN]        
  1728.  *  index               [?]         
  1729.  *  char_index(?)       [OUT]       
  1730.  * RETURNS
  1731.  *  whether the point is inside multitap input
  1732.  *****************************************************************************/
  1733. BOOL gui_multitap_input_translate_pen_position(multitap_input *b, S32 x, S32 y, S32 *index)
  1734. {
  1735.     /*----------------------------------------------------------------*/
  1736.     /* Local Variables                                                */
  1737.     /*----------------------------------------------------------------*/
  1738.     /* FIXME. Hindi code has potential problems */
  1739.     S32 i;
  1740.     S32 xoffset = b->x + b->text_x;
  1741.     UI_string_type text = b->text;
  1742.     UI_character_type current_character;
  1743.     S32 character_width;
  1744.     /*----------------------------------------------------------------*/
  1745.     /* Code Body                                                      */
  1746.     /*----------------------------------------------------------------*/
  1747.     gui_set_font(b->text_font);
  1748.     if (PEN_CHECK_BOUND(x, y, b->x, b->y, b->width, b->height) && x >= xoffset)
  1749.     {
  1750.         for (i = 0; i < b->length; i++)
  1751.         {
  1752.             current_character = gui_get_next_character(&text);
  1753.             /* HACK: Space character should be displayed as 0x86 but input as 0x20  */
  1754.             if (current_character == (UI_character_type) 0x20)
  1755.             {
  1756.                 current_character = (UI_character_type) 0x86;
  1757.             }
  1758.             character_width = gui_get_character_width(current_character);
  1759.         #if defined(__MMI_HINDI_ALG__)
  1760.             if (UI_HINDI_CHARACTER_UCS2_RANGE(current_character) || current_character == 46)
  1761.             {
  1762.                 get_multitap_text_x(&xoffset, current_character, b->length, i);
  1763.             }
  1764.         #endif /* defined(__MMI_HINDI_ALG__) */ 
  1765.             xoffset += b->text_gap + character_width;
  1766.             if (xoffset > x)
  1767.             {
  1768.                 *index = i;
  1769.                 return MMI_TRUE;
  1770.             }
  1771.         }
  1772.         return MMI_FALSE;
  1773.     }
  1774.     else
  1775.     {
  1776.         return MMI_FALSE;
  1777.     }
  1778. }
  1779. #endif /* __MMI_TOUCH_SCREEN__ */ 
  1780. /*****************************************************************************
  1781.  * FUNCTION
  1782.  *  UI_dummy_validation_function
  1783.  * DESCRIPTION
  1784.  *  dummy validation function
  1785.  * PARAMETERS
  1786.  *  text            [IN]        
  1787.  *  cursor_p        [IN]        
  1788.  *  text_length     [IN]        
  1789.  * RETURNS
  1790.  *  void
  1791.  *****************************************************************************/
  1792. void UI_dummy_validation_function(UI_buffer_type text, UI_buffer_type cursor_p, S32 text_length)
  1793. {
  1794.     /*----------------------------------------------------------------*/
  1795.     /* Local Variables                                                */
  1796.     /*----------------------------------------------------------------*/
  1797.     /*----------------------------------------------------------------*/
  1798.     /* Code Body                                                      */
  1799.     /*----------------------------------------------------------------*/
  1800.     UI_UNUSED_PARAMETER(text);
  1801.     UI_UNUSED_PARAMETER(cursor_p);
  1802.     UI_UNUSED_PARAMETER(text_length);
  1803. }
  1804. /* GUI: Blinking cursor functions   */
  1805. #if(UI_BLINKING_CURSOR_SUPPORT)
  1806. #define UI_CURSOR_BACKUP_BITMAP_SIZE   256
  1807. extern void _show_bitmap(S32 x1, S32 y1, bitmap *b);
  1808. extern void _get_bitmap(S32 x1, S32 y1, S32 x2, S32 y2, bitmap *b);
  1809. /* MTK Elvis */
  1810. extern U16 StopMyTimer(U16 nTimerId);
  1811. extern U16 StartMyTimerInt(U16 nTimerId, U32 nTimeDuration, oslTimerFuncPtr TimerExpiry, U8 alignment);
  1812. /* MTK end */
  1813. U8 UI_cursor_backup_bitmap_data[UI_CURSOR_BACKUP_BITMAP_SIZE];
  1814. S32 UI_cursor_x1 = 0;                   /* cursor x1 postioon */
  1815. S32 UI_cursor_y1 = 0;                   /* cursor y1 position */
  1816. S32 UI_cursor_x2 = 0;                   /* cursor x2 postion */
  1817. S32 UI_cursor_y2 = 0;                   /* cursor y2position */
  1818. color UI_cursor_color = {0, 0, 0, 0};   /* cursor color black */
  1819. U8 UI_cursor_blink_flag = 0;            /* blinking flag of cursor */
  1820. /* cusror bitmap */
  1821. bitmap UI_cursor_backup_bitmap = 
  1822. {
  1823.     0,
  1824.     0,
  1825.     0,
  1826.     0,
  1827.     NULL,
  1828.     UI_cursor_backup_bitmap_data
  1829. };
  1830. /*****************************************************************************
  1831.  * FUNCTION
  1832.  *  UI_inputbox_blink_cursor
  1833.  * DESCRIPTION
  1834.  *  show blinking crusor in input box
  1835.  * PARAMETERS
  1836.  *  void
  1837.  * RETURNS
  1838.  *  void
  1839.  *****************************************************************************/
  1840. void UI_inputbox_blink_cursor(void)
  1841. {
  1842.     /*----------------------------------------------------------------*/
  1843.     /* Local Variables                                                */
  1844.     /*----------------------------------------------------------------*/
  1845.     /*----------------------------------------------------------------*/
  1846.     /* Code Body                                                      */
  1847.     /*----------------------------------------------------------------*/
  1848.     gui_reset_clip();
  1849. #if(UI_DOUBLE_BUFFER_SUPPORT)
  1850.     gui_lock_double_buffer();
  1851. #endif 
  1852.     if (UI_cursor_blink_flag)   /* if blinking curosr flag is set */
  1853.     {
  1854.         gui_fill_rectangle(UI_cursor_x1, UI_cursor_y1, UI_cursor_x2, UI_cursor_y2, UI_cursor_color);
  1855.         UI_cursor_blink_flag = 0;
  1856.     }
  1857.     else
  1858.     {
  1859.         _show_bitmap(UI_cursor_x1, UI_cursor_y1, &UI_cursor_backup_bitmap);
  1860.         UI_cursor_blink_flag = 1;
  1861.     }
  1862. #if(UI_DOUBLE_BUFFER_SUPPORT)
  1863.     gui_unlock_double_buffer();
  1864.     gui_BLT_double_buffer(UI_cursor_x1, UI_cursor_y1, UI_cursor_x2, UI_cursor_y2);
  1865. #endif /* (UI_DOUBLE_BUFFER_SUPPORT) */ 
  1866.     //gui_start_timer(UI_CURSOR_BLINK_TIME,UI_inputbox_blink_cursor);
  1867.     //MTK Elvis to StartMyTimerInt instead of the gui_start_timer
  1868.     StartMyTimerInt(BLINKING_CURSOR, UI_CURSOR_WAIT_TIME, (oslTimerFuncPtr) UI_inputbox_blink_cursor, 0);
  1869.     /* MTK end */
  1870. }
  1871. /*****************************************************************************
  1872.  * FUNCTION
  1873.  *  UI_inputbox_show_cursor
  1874.  * DESCRIPTION
  1875.  *  show blinking crusor in input box
  1876.  * PARAMETERS
  1877.  *  x1      [IN]        X1 position of cursor
  1878.  *  y1      [IN]        Y1 position of cursor
  1879.  *  x2      [IN]        X2 position of cursor
  1880.  *  y2      [IN]        Y2 position of cursor
  1881.  *  c       [IN]        Color of cursor
  1882.  * RETURNS
  1883.  *  void
  1884.  *****************************************************************************/
  1885. void UI_inputbox_show_cursor(S32 x1, S32 y1, S32 x2, S32 y2, color c)
  1886. {
  1887.     /*----------------------------------------------------------------*/
  1888.     /* Local Variables                                                */
  1889.     /*----------------------------------------------------------------*/
  1890.     /*----------------------------------------------------------------*/
  1891.     /* Code Body                                                      */
  1892.     /*----------------------------------------------------------------*/
  1893.     //gui_cancel_timer(UI_inputbox_blink_cursor);
  1894.     //MTK Elvis
  1895.     StopMyTimer(BLINKING_CURSOR);
  1896.     /* MTK end */
  1897.     UI_cursor_x1 = x1;
  1898.     UI_cursor_y1 = y1;
  1899.     UI_cursor_x2 = x2;
  1900.     UI_cursor_y2 = y2;
  1901.     UI_cursor_color = c;
  1902.     _get_bitmap(x1, y1, x2, y2, &UI_cursor_backup_bitmap);  /* get bitmp of bliknkig cursor */
  1903.     gui_fill_rectangle(x1, y1, x2, y2, c);
  1904.     //gui_start_timer(UI_CURSOR_WAIT_TIME,UI_inputbox_blink_cursor);
  1905.     //MTK Elvis to StartMyTimerInt instead of the gui_start_timer
  1906.     StartMyTimerInt(BLINKING_CURSOR, UI_CURSOR_WAIT_TIME, (oslTimerFuncPtr) UI_inputbox_blink_cursor, 0);
  1907.     /* MTK end */
  1908.     UI_cursor_blink_flag = 0;
  1909. }
  1910. #endif /* (UI_BLINKING_CURSOR_SUPPORT) */ 
  1911. /* GUI: single line input box functions   */
  1912. UI_single_line_input_box_theme *current_single_line_input_box_theme = NULL;
  1913. /*****************************************************************************
  1914.  * FUNCTION
  1915.  *  gui_set_single_line_input_box_current_theme
  1916.  * DESCRIPTION
  1917.  *  Applies the current theme for the single-line inputbox.
  1918.  * PARAMETERS
  1919.  *  b       [IN]        Is the single-line inputbox object
  1920.  * RETURNS
  1921.  *  void
  1922.  *****************************************************************************/
  1923. void gui_set_single_line_input_box_current_theme(single_line_input_box *b)
  1924. {
  1925.     /*----------------------------------------------------------------*/
  1926.     /* Local Variables                                                */
  1927.     /*----------------------------------------------------------------*/
  1928.     /*----------------------------------------------------------------*/
  1929.     /* Code Body                                                      */
  1930.     /*----------------------------------------------------------------*/
  1931.     b->normal_filler = current_single_line_input_box_theme->normal_filler;
  1932.     b->disabled_filler = current_single_line_input_box_theme->disabled_filler;
  1933.     b->selected_filler = current_single_line_input_box_theme->selected_filler;
  1934.     b->normal_text_color = current_single_line_input_box_theme->normal_text_color;
  1935.     b->disabled_text_color = current_single_line_input_box_theme->disabled_text_color;
  1936.     b->selected_text_color = current_single_line_input_box_theme->selected_text_color;
  1937.     b->selection_color = current_single_line_input_box_theme->selection_color;
  1938.     b->selection_text_color = current_single_line_input_box_theme->selection_text_color;
  1939.     b->cursor_color = current_single_line_input_box_theme->cursor_color;
  1940.     b->text_font = current_single_line_input_box_theme->text_font;
  1941.     b->text_gap = current_single_line_input_box_theme->text_gap;
  1942.     b->mask_character = current_single_line_input_box_theme->mask_character;
  1943.     b->flags |= current_single_line_input_box_theme->flags;
  1944. }
  1945. /*****************************************************************************
  1946.  * FUNCTION
  1947.  *  gui_set_single_line_input_box_theme
  1948.  * DESCRIPTION
  1949.  *  Applies the given theme to the single-line inputbox.
  1950.  * PARAMETERS
  1951.  *  b       [IN]        Is the single-line inputbox object
  1952.  *  t       [?]         
  1953.  * RETURNS
  1954.  *  void
  1955.  *****************************************************************************/
  1956. void gui_set_single_line_input_box_theme(single_line_input_box *b, UI_single_line_input_box_theme *t)
  1957. {
  1958.     /*----------------------------------------------------------------*/
  1959.     /* Local Variables                                                */
  1960.     /*----------------------------------------------------------------*/
  1961.     /*----------------------------------------------------------------*/
  1962.     /* Code Body                                                      */
  1963.     /*----------------------------------------------------------------*/
  1964.     b->normal_filler = t->normal_filler;
  1965.     b->disabled_filler = t->disabled_filler;
  1966.     b->selected_filler = t->selected_filler;
  1967.     b->normal_text_color = t->normal_text_color;
  1968.     b->disabled_text_color = t->disabled_text_color;
  1969.     b->selected_text_color = t->selected_text_color;
  1970.     b->selection_color = t->selection_color;
  1971.     b->selection_text_color = t->selection_text_color;
  1972.     b->cursor_color = t->cursor_color;
  1973.     b->text_font = t->text_font;
  1974.     b->text_gap = t->text_gap;
  1975.     b->mask_character = t->mask_character;
  1976.     b->flags |= t->flags;
  1977. }
  1978. /*****************************************************************************
  1979.  * FUNCTION
  1980.  *  gui_single_line_input_box_clear
  1981.  * DESCRIPTION
  1982.  *  clearthe single-line inputbox.
  1983.  * PARAMETERS
  1984.  *  b       [IN]        Is the single-line inputbox object
  1985.  * RETURNS
  1986.  *  void
  1987.  *****************************************************************************/
  1988. void gui_single_line_input_box_clear(single_line_input_box *b)
  1989. {
  1990.     /*----------------------------------------------------------------*/
  1991.     /* Local Variables                                                */
  1992.     /*----------------------------------------------------------------*/
  1993.     /*----------------------------------------------------------------*/
  1994.     /* Code Body                                                      */
  1995.     /*----------------------------------------------------------------*/
  1996.     if (b->text == NULL)
  1997.     {
  1998.         b->text_length = 0;
  1999.         b->allocated_length = 0;
  2000.         b->available_length = 0;
  2001.     }
  2002.     else
  2003.     {
  2004.         b->text[0] = '';
  2005.         b->text[1] = 0;
  2006.         b->text_length = 2;
  2007.     }
  2008.     b->current_text_p = b->text;
  2009.     b->last_position_p = b->text;
  2010.     b->UCS2_count = 0;
  2011.     if (b->flags & UI_SINGLE_LINE_INPUT_BOX_USE_ENCODING_BASED_LENGTH)
  2012.     {
  2013.         b->available_length = b->allocated_length;
  2014.     }
  2015. }
  2016. /*****************************************************************************
  2017.  * FUNCTION
  2018.  *  gui_create_single_line_input_box
  2019.  * DESCRIPTION
  2020.  *  Creates a single line input box
  2021.  *  
  2022.  *  The object should be allocated before calling this function.
  2023.  *  The buffer is automatically allocated by the inputbox.
  2024.  *  The buffer is set to blank on creation of this object.
  2025.  *  See also gui_destroy_single_line_input_box()
  2026.  * PARAMETERS
  2027.  *  b           [IN]        Is the single-line inputbox object (pre-allocated)
  2028.  *  x           [IN]        Is the left-top corner
  2029.  *  y           [IN]        Is the left-top corner
  2030.  *  width       [IN]        Is the width of the inputbox
  2031.  *  height      [IN]        Is the height of the inputbox
  2032.  *  length      [IN]        Is the length of the buffer to use
  2033.  * RETURNS
  2034.  *  void
  2035.  *****************************************************************************/
  2036. void gui_create_single_line_input_box(single_line_input_box *b, S32 x, S32 y, S32 width, S32 height, S32 length)
  2037. {
  2038.     /*----------------------------------------------------------------*/
  2039.     /* Local Variables                                                */
  2040.     /*----------------------------------------------------------------*/
  2041.     /*----------------------------------------------------------------*/
  2042.     /* Code Body                                                      */
  2043.     /*----------------------------------------------------------------*/
  2044.     b->x = x;
  2045.     b->y = y;
  2046.     b->width = width;
  2047.     b->height = height;
  2048.     b->text = (UI_buffer_type) gui_malloc(length * sizeof(UI_character_type));
  2049.     b->allocated_length = length;
  2050.     b->available_length = length;
  2051.     /* initilze the single input box */
  2052.     gui_single_line_input_box_clear(b);
  2053.     b->current_text_p = b->text;
  2054.     b->text_offset_x = 0;
  2055.     b->flags = 0;
  2056.     b->ext_flags = 0;
  2057.     b->grid_width = 0;
  2058.     /* set theme of single input box */
  2059.     gui_set_single_line_input_box_current_theme(b);
  2060.     b->validation_callback = UI_dummy_validation_function;  /* set validation input box func handler to dummy */
  2061.     b->overflow_callback = UI_dummy_function;
  2062.     b->change_callback = UI_dummy_function;
  2063.     b->text_x = 2 + b->text_gap;
  2064.     /* Autocalculate the text position based on font   */
  2065.     if (b->flags & UI_SINGLE_LINE_INPUT_BOX_CENTER_Y)
  2066.     {
  2067.         S32 string_height;
  2068.         gui_set_font(b->text_font);
  2069.         string_height = gui_get_character_height();
  2070.         b->text_y = (height >> 1) - (string_height >> 1);
  2071.     }
  2072.     else
  2073.     {
  2074.         b->text_y = 2;
  2075.     }
  2076.     b->UCS2_count = 0;
  2077. }
  2078. /*****************************************************************************
  2079.  * FUNCTION
  2080.  *  gui_create_single_line_input_box_use_buffer
  2081.  * DESCRIPTION
  2082.  *  Creates a single line input box
  2083.  *  
  2084.  *  The object should be allocated before calling this function.
  2085.  *  Also, the buffer should be allocated and passed to this function.
  2086.  *  The buffer is set to blank on creation of this object.
  2087.  * PARAMETERS
  2088.  *  b           [IN]        Is the single-line inputbox object (pre-allocated)
  2089.  *  x           [IN]        Is the left-top corner
  2090.  *  y           [IN]        Is the left-top corner
  2091.  *  width       [IN]        Is the width of the inputbox
  2092.  *  height      [IN]        Is the height of the inputbox
  2093.  *  buffer      [IN]        Is the buffer the inputbox should use (pre-allocated)
  2094.  *  length      [IN]        Is the length of the buffer
  2095.  * RETURNS
  2096.  *  void
  2097.  *****************************************************************************/
  2098. void gui_create_single_line_input_box_use_buffer(
  2099.         single_line_input_box *b,
  2100.         S32 x,
  2101.         S32 y,
  2102.         S32 width,
  2103.         S32 height,
  2104.         UI_string_type buffer,
  2105.         S32 length)
  2106. {
  2107.     /*----------------------------------------------------------------*/
  2108.     /* Local Variables                                                */
  2109.     /*----------------------------------------------------------------*/
  2110.     /*----------------------------------------------------------------*/
  2111.     /* Code Body                                                      */
  2112.     /*----------------------------------------------------------------*/
  2113.     b->x = x;
  2114.     b->y = y;
  2115.     b->width = width;
  2116.     b->height = height;
  2117.     b->text = (UI_buffer_type) buffer;
  2118.     b->allocated_length = length;
  2119.     b->available_length = length;
  2120.     b->flags = 0;
  2121.     b->ext_flags = 0;
  2122.     b->grid_width = 0;
  2123.     gui_single_line_input_box_clear(b);
  2124.     b->current_text_p = b->text;
  2125.     b->text_offset_x = 0;
  2126.     gui_set_single_line_input_box_current_theme(b);
  2127.     b->overflow_callback = UI_dummy_function;
  2128.     b->change_callback = UI_dummy_function;
  2129.     b->validation_callback = UI_dummy_validation_function;
  2130.     b->text_x = 2 + b->text_gap;
  2131.     /* Autocalculate the text position based on font   */
  2132.     if (b->flags & UI_SINGLE_LINE_INPUT_BOX_CENTER_Y)
  2133.     {
  2134.         S32 string_height;
  2135.         gui_set_font(b->text_font);
  2136.         string_height = gui_get_character_height();
  2137.         b->text_y = (height >> 1) - (string_height >> 1);
  2138.     }
  2139.     else
  2140.     {
  2141.         b->text_y = 2;
  2142.     }
  2143.     b->UCS2_count = 0;
  2144. }
  2145. /*****************************************************************************
  2146.  * FUNCTION
  2147.  *  gui_create_single_line_input_box_set_buffer
  2148.  * DESCRIPTION
  2149.  *  Creates a single line input box
  2150.  *  
  2151.  *  The object should be allocated before calling this function.
  2152.  *  Also, the buffer should be allocated and passed to this function.
  2153.  *  The buffer retains the string passed.
  2154.  * VJ
  2155.  * PARAMETERS
  2156.  *  b                   [IN]        Is the single-line inputbox object (pre-allocated)
  2157.  *  x                   [IN]        Is the left-top corner
  2158.  *  y                   [IN]        Is the left-top corner
  2159.  *  width               [IN]        Is the width of the inputbox
  2160.  *  height              [IN]        Is the height of the inputbox
  2161.  *  buffer              [IN]        Is the buffer the inputbox should use (pre-allocated)
  2162.  *  length              [IN]        Is the length of the buffer
  2163.  *  text_length         [IN]        
  2164.  *  edit_position       [IN]        Is the cursor_position
  2165.  * RETURNS
  2166.  *  void
  2167.  *****************************************************************************/
  2168. void gui_create_single_line_input_box_set_buffer(
  2169.         single_line_input_box *b,
  2170.         S32 x,
  2171.         S32 y,
  2172.         S32 width,
  2173.         S32 height,
  2174.         UI_string_type buffer,
  2175.         S32 length,
  2176.         S32 text_length,
  2177.         S32 edit_position)
  2178. {
  2179.     /*----------------------------------------------------------------*/
  2180.     /* Local Variables                                                */
  2181.     /*----------------------------------------------------------------*/
  2182.     UI_character_type dummy_c = 0;
  2183.     UI_buffer_type text;
  2184.     S32 i;
  2185.     /*----------------------------------------------------------------*/
  2186.     /* Code Body                                                      */
  2187.     /*----------------------------------------------------------------*/
  2188.     b->x = x;                           /* start x position of single lien input box */
  2189.     b->y = y;                           /* stat y position of single line inputr box */
  2190.     b->width = width;                   /* width of single line input box */
  2191.     b->height = height;                 /* heightof ingle lien input box */
  2192.     b->text = (UI_buffer_type) buffer;  /* set text of single lie input box */
  2193.     b->current_text_p = b->text;
  2194.     b->allocated_length = length;
  2195.     b->available_length = length;
  2196.     b->UCS2_count = 0;
  2197.     if (b->text != NULL)
  2198.     {
  2199.         text = b->text;
  2200.         for (i = 0; i < edit_position; i++)
  2201.         {
  2202.             UI_STRING_GET_NEXT_CHARACTER(text, dummy_c);
  2203.             UI_TEST_UCS2_INCREMENT_COUNT(dummy_c, b->UCS2_count);
  2204.             if (UI_STRING_END_OF_STRING_CHARACTER(dummy_c))
  2205.             {
  2206.                 break;
  2207.             }
  2208.         }
  2209.         b->current_text_p = text;
  2210.         for (i = edit_position; !UI_STRING_END_OF_STRING_CHARACTER(dummy_c); i++)
  2211.         {
  2212.             UI_STRING_GET_NEXT_CHARACTER(text, dummy_c);
  2213.             UI_TEST_UCS2_INCREMENT_COUNT(dummy_c, b->UCS2_count);
  2214.         }
  2215.         b->text_length = text_length;
  2216.         b->last_position_p = b->current_text_p;
  2217.     }
  2218.     else
  2219.     {
  2220.         b->text_length = 0;
  2221.     }
  2222.     b->text_offset_x = 0;
  2223.     b->flags = 0;
  2224.     b->ext_flags = 0;
  2225.     b->grid_width = 0;
  2226.     /* set theme of single line input box */
  2227.     gui_set_single_line_input_box_current_theme(b);
  2228.     b->overflow_callback = UI_dummy_function;
  2229.     b->change_callback = UI_dummy_function;
  2230.     b->validation_callback = UI_dummy_validation_function;
  2231.     b->text_x = 2 + b->text_gap;
  2232.     /* Autocalculate the text position based on font   */
  2233.     if (b->flags & UI_SINGLE_LINE_INPUT_BOX_CENTER_Y)
  2234.     {
  2235.         S32 string_height;
  2236.         gui_set_font(b->text_font);
  2237.         string_height = gui_get_character_height();
  2238.         b->text_y = (height >> 1) - (string_height >> 1);
  2239.     }
  2240.     else
  2241.     {
  2242.         b->text_y = 2;
  2243.     }
  2244. }
  2245. /*****************************************************************************
  2246.  * FUNCTION
  2247.  *  gui_create_single_line_input_box_set_buffer_first_position
  2248.  * DESCRIPTION
  2249.  *  set the current text to first position straing of text
  2250.  *  
  2251.  *  The object should be allocated before calling this function.
  2252.  *  Also, the buffer should be allocated and passed to this function.
  2253.  *  The buffer retains the string passed.
  2254.  * VJ
  2255.  * PARAMETERS
  2256.  *  b                   [IN]        Is the single-line inputbox object (pre-allocated)
  2257.  *  x                   [IN]        Is the left-top corner
  2258.  *  y                   [IN]        Is the left-top corner
  2259.  *  width               [IN]        Is the width of the inputbox
  2260.  *  height              [IN]        Is the height of the inputbox
  2261.  *  buffer              [IN]        Is the buffer the inputbox should use (pre-allocated)
  2262.  *  length              [IN]        Is the length of the buffer
  2263.  *  text_length         [IN]        
  2264.  *  edit_position       [IN]        Is the cursor_position
  2265.  * RETURNS
  2266.  *  void
  2267.  *****************************************************************************/
  2268. void gui_create_single_line_input_box_set_buffer_first_position(
  2269.         single_line_input_box *b,
  2270.         S32 x,
  2271.         S32 y,
  2272.         S32 width,
  2273.         S32 height,
  2274.         UI_string_type buffer,
  2275.         S32 length,
  2276.         S32 text_length,
  2277.         S32 edit_position)
  2278. {
  2279.     /*----------------------------------------------------------------*/
  2280.     /* Local Variables                                                */
  2281.     /*----------------------------------------------------------------*/
  2282.     /*----------------------------------------------------------------*/
  2283.     /* Code Body                                                      */
  2284.     /*----------------------------------------------------------------*/
  2285.     b->x = x;
  2286.     b->y = y;
  2287.     b->width = width;
  2288.     b->height = height;
  2289.     b->text = (UI_buffer_type) buffer;
  2290.     b->current_text_p = b->text;
  2291.     b->allocated_length = length;
  2292.     b->available_length = length;
  2293.     b->UCS2_count = 0;
  2294.     b->text_offset_x = 0;
  2295.     b->flags = 0;
  2296.     b->ext_flags = 0;
  2297.     b->grid_width = 0;
  2298.     gui_set_single_line_input_box_current_theme(b);
  2299.     b->overflow_callback = UI_dummy_function;
  2300.     b->change_callback = UI_dummy_function;
  2301.     b->validation_callback = UI_dummy_validation_function;
  2302.     b->text_x = 2 + b->text_gap;
  2303.     /* Autocalculate the text position based on font   */
  2304.     if (b->flags & UI_SINGLE_LINE_INPUT_BOX_CENTER_Y)
  2305.     {
  2306.         S32 string_height;
  2307.         gui_set_font(b->text_font);
  2308.         string_height = gui_get_character_height();
  2309.         b->text_y = (height >> 1) - (string_height >> 1);
  2310.     }
  2311.     else
  2312.     {
  2313.         b->text_y = 2;
  2314.     }
  2315. }
  2316. /*****************************************************************************
  2317.  * FUNCTION
  2318.  *  gui_move_single_line_input_box
  2319.  * DESCRIPTION
  2320.  *  Moves a single line input box
  2321.  * PARAMETERS
  2322.  *  b       [IN]        Is the single-line inputbox object (pre-allocated)
  2323.  *  x       [IN]        Is the left-top corner
  2324.  *  y       [IN]        Is the left-top corner
  2325.  * RETURNS
  2326.  *  void
  2327.  *****************************************************************************/
  2328. void gui_move_single_line_input_box(single_line_input_box *b, S32 x, S32 y)
  2329. {
  2330.     /*----------------------------------------------------------------*/
  2331.     /* Local Variables                                                */
  2332.     /*----------------------------------------------------------------*/
  2333.     /*----------------------------------------------------------------*/
  2334.     /* Code Body                                                      */
  2335.     /*----------------------------------------------------------------*/
  2336.     b->x = x;
  2337.     b->y = y;
  2338. }
  2339. /*****************************************************************************
  2340.  * FUNCTION
  2341.  *  gui_single_line_input_box_show_cursor
  2342.  * DESCRIPTION
  2343.  *  Displays the cursor in a single-line inputbox (internal function)
  2344.  *  
  2345.  *  This function is used internally.
  2346.  * PARAMETERS
  2347.  *  b           [IN]        Is the single-line inputbox object
  2348.  *  x           [IN]        Is the left-top corner of the cursor
  2349.  *  y           [IN]        Is the left-top corner of the cursor
  2350.  *  height      [IN]        Is the height of cursor
  2351.  * RETURNS
  2352.  *  void
  2353.  *****************************************************************************/
  2354. void gui_single_line_input_box_show_cursor(single_line_input_box *b, S32 x, S32 y, S32 height)
  2355. {
  2356.     /*----------------------------------------------------------------*/
  2357.     /* Local Variables                                                */
  2358.     /*----------------------------------------------------------------*/
  2359.     color c = b->cursor_color;
  2360.     /*----------------------------------------------------------------*/
  2361.     /* Code Body                                                      */
  2362.     /*----------------------------------------------------------------*/
  2363. #if(UI_BLINKING_CURSOR_SUPPORT)
  2364.     UI_inputbox_show_cursor(x, y, x + 1, y + height - 1, c);
  2365. #else 
  2366.     gui_fill_rectangle(x, y, x + 1, y + height - 1, c);
  2367. #endif 
  2368. }
  2369. /*****************************************************************************
  2370.  * FUNCTION
  2371.  *  gui_show_single_line_input_box
  2372.  * DESCRIPTION
  2373.  *  Displays a single-line inputbox
  2374.  * PARAMETERS
  2375.  *  b       [IN]        Is the single-line inputbox object
  2376.  * RETURNS
  2377.  *  void
  2378.  *****************************************************************************/
  2379. /* MTK modify for stacked character--Thai */
  2380. void gui_show_single_line_input_box(single_line_input_box *b)
  2381. {
  2382.     /*----------------------------------------------------------------*/
  2383.     /* Local Variables                                                */
  2384.     /*----------------------------------------------------------------*/
  2385.     /*----------------------------------------------------------------*/
  2386.     /* Code Body                                                      */
  2387.     /*----------------------------------------------------------------*/
  2388.     gui_show_single_line_input_box_ext(b, -1, -1);
  2389. }
  2390. /*****************************************************************************
  2391.  * FUNCTION
  2392.  *  gui_show_single_line_input_box_ext
  2393.  * DESCRIPTION
  2394.  *  Displays a single-line inputbox
  2395.  * PARAMETERS
  2396.  *  b               [IN]        Is the single-line inputbox object
  2397.  *  move_to_x       [IN]        
  2398.  *  move_to_y       [IN]        
  2399.  * RETURNS
  2400.  *  void
  2401.  *****************************************************************************/
  2402. /* MTK modify for stacked character--Thai */
  2403. void gui_show_single_line_input_box_ext(single_line_input_box *b, S32 move_to_x, S32 move_to_y)
  2404. {
  2405.     /*----------------------------------------------------------------*/
  2406.     /* Local Variables                                                */
  2407.     /*----------------------------------------------------------------*/
  2408.     S32 x1, y1, x2, y2, cx, cy, ch;
  2409.     S32 sy1, sy2;
  2410.     color text_color;
  2411.     UI_filled_area *f;
  2412.     U8 selection_flag = 0, overwrite_mode_flag = 0, set_cursor_flag = 0;
  2413.     UI_character_type current_character = 0, pre2_character = 0, pre_character = 0;
  2414.     S32 character_width = 0, box_width, current_text_width, text_height;
  2415.     UI_buffer_type previous_text_p = b->text;
  2416.     UI_buffer_type current_text_p = b->text;
  2417.     U32 flags = b->flags;
  2418.     U8 done = 0;
  2419.     S32 text_x, text_y, total_width = 0;
  2420.     U8 cursor_displayed_flag = 0;
  2421.     S32 text_gap = b->text_gap;
  2422.     color b_normal_text_color = b->normal_text_color;
  2423.     color b_selection_text_color = b->selection_text_color;
  2424.     color b_selection_color = b->selection_color;
  2425.     UI_character_type mask_character = b->mask_character;
  2426.     UI_buffer_type b_current_text_p = b->current_text_p;
  2427.     U8 second_word_highlight = 0;
  2428.     U8 word_highlight = 0;
  2429.     U8 border_type = 0;
  2430.     PMT_BIDI_TYPES default_direction = BIDI_L;
  2431. #if defined (__MMI_LANG_ARABIC__) || defined (__MMI_LANG_PERSIAN__)
  2432.     UI_buffer_type temp_p;
  2433.     UI_character_type next_char = 0;
  2434. #endif /* defined (__MMI_LANG_ARABIC__) || defined (__MMI_LANG_PERSIAN__) */ 
  2435.     /* MTK end */
  2436. #ifdef __MMI_HINDI_ALG__
  2437.     U16 single_line_disp_cluster[MAX_EDITOR_DISP_LEN];
  2438.     PU8 single_line_temp_p = b->text;
  2439.     PU8 single_line_prev_p = b->text;
  2440.     PU8 single_line_curr_p = b->text;
  2441.     S32 single_editor_moves = 1;    /* for skipping by cluster */
  2442.     S32 parse_hindi = 1;            /* added farhad 24122004 */
  2443. #endif /* __MMI_HINDI_ALG__ */ 
  2444. #ifdef __MMI_BIDI_ALG__
  2445.     U16 logical_cur_pos;
  2446.     U8 *temp_text_pt;
  2447.     U8 *temp_cursor_p;
  2448.     U16 visual_str_len;
  2449.     U16 visual_cur_pos;
  2450.     U16 logical_hilight_start;
  2451.     U16 logical_hilight_end;
  2452.     U16 visual_hilight_start;
  2453.     U16 visual_hilight_end;
  2454.     UI_buffer_type temp_hilight_start;
  2455.     UI_buffer_type temp_hilight_end;
  2456.     U32 iCount;
  2457.     pBOOL arabic_char_flag = MMI_FALSE;
  2458.     U8 lastest_char_type;
  2459.     UI_buffer_type       ptr_current_text_p;
  2460.     pBOOL BIDI_done_flag = MMI_FALSE;
  2461.     S32 text_len;
  2462.     PU8 ptr_text_buffer;
  2463. #endif /* __MMI_BIDI_ALG__ */ 
  2464. #if defined(__MMI_LANG_VIETNAMESE__)
  2465.     UI_character_type next_character = 0;
  2466.     viet_tone_mark tone_mark = VIET_TONE_NONE;
  2467.     viet_vowel_letter viet_vowel = VIET_VOWEL_NONE;
  2468. #endif /* defined(__MMI_LANG_VIETNAMESE__) */ 
  2469.     /*----------------------------------------------------------------*/
  2470.     /* Code Body                                                      */
  2471.     /*----------------------------------------------------------------*/
  2472. #if defined (__MMI_LANG_ARABIC__) || defined(__MMI_LANG_PERSIAN__)
  2473.     if ((b->text_length != 0) && ((b->text_length / ENCODING_LENGTH) - 1 != 0) && !(flags & UI_SINGLE_LINE_INPUT_BOX_DISABLE_DRAW))
  2474.     {
  2475.         pfnUnicodeStrncpy((S8*) shaping_str, (const S8*)b->text, (b->text_length / ENCODING_LENGTH) - 1);
  2476.         unshaped_text_len = text_len = (b->text_length/2)-1;
  2477.     #ifdef __MMI_ZI__
  2478.     #ifdef __MMI_ZI_V7__
  2479.     #if defined(__MMI_ZI_ARABIC__) && defined(__MMI_ZI_PERSIAN__)
  2480.         ZiStringShapeEx(ZI8_LANG_FA, (U16*) & text_len, (U16*) shaping_str, (U16*) OrgToSha, NULL);  /* 19 is the Arabic id */
  2481.     #elif defined(__MMI_ZI_PERSIAN__)
  2482.         ZiStringShapeEx(ZI8_LANG_FA, (U16*) & text_len, (U16*) shaping_str, (U16*) OrgToSha, NULL);  /* 19 is the Arabic id */
  2483.     #elif defined(__MMI_ZI_ARABIC__)
  2484.         ZiStringShapeEx(ZI8_LANG_AR, (U16*) & text_len, (U16*) shaping_str, (U16*) OrgToSha, NULL);  /* 19 is the Arabic id */
  2485.     #endif 
  2486.     #else /* __MMI_ZI_V7__ */ 
  2487.         ArabicStringShape2((U16*) & text_len, (U16*) shaping_str, (U16*) OrgToSha, NULL);
  2488.     #endif /* __MMI_ZI_V7__ */ 
  2489.     #else /* __MMI_ZI__ */ 
  2490.         ArabicShapeEngine2((U16*) & text_len, (U16*) shaping_str, (U16*) OrgToSha, NULL);
  2491.     #endif /* __MMI_ZI__ */ 
  2492.    }   
  2493. #endif /* defined (__MMI_LANG_ARABIC__) || defined(__MMI_LANG_PERSIAN__) */ 
  2494. #if defined __MMI_HINDI_ALG__
  2495.     overwrite_current_language_for_hindi_rules_based_on_input_method();
  2496. #endif 
  2497.     if (((-1) != move_to_x) || ((-1) != move_to_y))
  2498.     {
  2499.         flags |= UI_SINGLE_LINE_INPUT_BOX_DISABLE_DRAW;
  2500.     }
  2501. #ifdef __MMI_BIDI_ALG__
  2502.     /* MTK Terry for BIDI Issue */
  2503.     if ((((b->text_length >> 1) - 1) != 0) && (b->text_length > 0))
  2504.     {
  2505.         bidi_get_char_type(b->text, (U8*) & default_direction);
  2506.         if (default_direction == BIDI_R || default_direction == AL)
  2507.             default_direction = BIDI_R;
  2508.         else
  2509.             default_direction = BIDI_L;
  2510.         for (iCount = 0; iCount < (U32) ((b->text_length >> 1) - 1); iCount++)
  2511.         {
  2512.             bidi_get_char_type((U8*) (b->text + iCount * ENCODING_LENGTH), (U8*) & lastest_char_type);
  2513.             if ((lastest_char_type == AL) || (lastest_char_type == AN) || (lastest_char_type == BIDI_R))
  2514.             {
  2515.                 arabic_char_flag = MMI_TRUE;
  2516.                 break;
  2517.             }
  2518.         }
  2519.     }
  2520.    if (!(flags & UI_SINGLE_LINE_INPUT_BOX_DISABLE_DRAW) && arabic_char_flag)
  2521.    if((((b->text_length>>1)-1) !=0) && (b->text_length > 0))
  2522.     {
  2523.         bidi_get_char_type(b->text, (U8*) & default_direction);
  2524.         logical_cur_pos = ((b->current_text_p - b->text) + 1) / ENCODING_LENGTH;
  2525.         if (flags & UI_SINGLE_LINE_INPUT_BOX_WORD_HIGHLIGHT)
  2526.         {
  2527.             temp_hilight_start = b->highlight_start_position;
  2528.             temp_hilight_end = b->highlight_end_position;
  2529.             logical_hilight_start = (b->highlight_start_position - b->text) >> 1;
  2530.             logical_hilight_end = (b->highlight_end_position - b->text) >> 1;
  2531.         }
  2532.         else if (flags & UI_SINGLE_LINE_INPUT_BOX_STATE_MULTITAP)
  2533.         {
  2534.             temp_hilight_start = b->highlight_start_position;
  2535.             temp_hilight_end = b->highlight_end_position;
  2536.             flags |= UI_SINGLE_LINE_INPUT_BOX_WORD_HIGHLIGHT;
  2537.             b->highlight_start_position = b->current_text_p - ENCODING_LENGTH;
  2538.             b->highlight_end_position = b->current_text_p;
  2539.             logical_hilight_start = (b->highlight_start_position - b->text) >> 1;
  2540.             logical_hilight_end = (b->highlight_end_position - b->text) >> 1;
  2541.         }
  2542.         else
  2543.         {
  2544.             logical_hilight_start = 0;
  2545.             logical_hilight_end = 0;
  2546.         }
  2547.         if (default_direction == BIDI_R || default_direction == AL)
  2548.         {
  2549.             bidi_main(
  2550.                 b->text,
  2551.                 (U16) UCS2Strlen((const S8*)b->text),
  2552.                 logical_cur_pos,
  2553.                 visual_str,
  2554.                 &visual_str_len,
  2555.                 &visual_cur_pos,
  2556.                 MMI_TRUE,
  2557.                 MMI_bidi_input_type,
  2558.                 logical_hilight_start,
  2559.                 logical_hilight_end,
  2560.                 &visual_hilight_start,
  2561.                 &visual_hilight_end);
  2562.             default_direction = BIDI_R;
  2563.         }
  2564.         else    /* if(default_direction == BIDI_L) */
  2565.         {
  2566.             bidi_main(
  2567.                 b->text,
  2568.                 (U16) UCS2Strlen((const S8*)b->text),
  2569.                 logical_cur_pos,
  2570.                 visual_str,
  2571.                 &visual_str_len,
  2572.                 &visual_cur_pos,
  2573.                 MMI_FALSE,
  2574.                 MMI_bidi_input_type,
  2575.                 logical_hilight_start,
  2576.                 logical_hilight_end,
  2577.                 &visual_hilight_start,
  2578.                 &visual_hilight_end);
  2579.             default_direction = BIDI_L;
  2580.         }
  2581.         BIDI_done_flag = MMI_TRUE;
  2582.         temp_text_pt = b->text;
  2583.         b->text = visual_str;
  2584.         temp_cursor_p = b->current_text_p;
  2585.         b->current_text_p = b->text + visual_cur_pos * ENCODING_LENGTH;
  2586.         previous_text_p = b->text;
  2587.         current_text_p = b->text;
  2588.         b_current_text_p = b->current_text_p;
  2589.         if (flags & UI_SINGLE_LINE_INPUT_BOX_WORD_HIGHLIGHT)
  2590.         {
  2591.             b->highlight_start_position = b->text + (visual_hilight_start * ENCODING_LENGTH);
  2592.             b->highlight_end_position = b->text + (visual_hilight_end * ENCODING_LENGTH);
  2593.         }
  2594.     }
  2595. #endif /* __MMI_BIDI_ALG__ */ 
  2596. #ifdef __MMI_HINDI_ALG__
  2597.     memset(single_line_disp_cluster, 0, sizeof(single_line_disp_cluster));
  2598.     single_line_temp_p = b->text;
  2599.     single_line_prev_p = b->text;
  2600.     single_line_curr_p = b->text;
  2601. #endif /* __MMI_HINDI_ALG__ */ 
  2602.     x1 = b->x;                  /* start x position of single line input box */
  2603.     y1 = b->y;                  /* start y position of single line input box */
  2604.     x2 = x1 + b->width - 1;     /* end x position of single line input box */
  2605.     y2 = y1 + b->height - 1;    /* end y position of single line input box */
  2606.     sy1 = y1;
  2607.     sy2 = y2;
  2608.     /* MTK Leo add 1205 */
  2609.     if (flags & UI_SINGLE_LINE_INPUT_BOX_TRUNCATE_CONTENT)
  2610.     {
  2611.         text_gap = 0;
  2612.     }
  2613.     /* MTK Leo end 1205 */
  2614.     if (flags & UI_SINGLE_LINE_INPUT_BOX_STATE_SELECTED)
  2615.     {
  2616.         f = b->selected_filler;
  2617.         text_color = b->selected_text_color;
  2618.     }
  2619.     else if (flags & UI_SINGLE_LINE_INPUT_BOX_STATE_DISABLED)
  2620.     {
  2621.         f = b->disabled_filler;
  2622.         text_color = b->disabled_text_color;
  2623.     }
  2624.     else
  2625.     {
  2626.         f = b->normal_filler;
  2627.         text_color = b->normal_text_color;
  2628.     }
  2629.     if ((f->flags & UI_FILLED_AREA_DOUBLE_BORDER) == UI_FILLED_AREA_DOUBLE_BORDER)
  2630.     {
  2631.         sy1 += 3;
  2632.         sy2 -= 3;
  2633.         border_type = 2;
  2634.     }
  2635.     else if (f->flags & UI_FILLED_AREA_BORDER)
  2636.     {
  2637.         sy1 += 2;
  2638.         sy2 -= 2;
  2639.         border_type = 1;
  2640.     }
  2641.     /* PMT VIKAS START 20050524 */
  2642. #ifdef __MMI_UI_TRANSPARENT_EFFECT__
  2643.     //PMT VIKAS START 20050630
  2644.     // remove the function call.
  2645.     //gui_single_line_disable_transparent_effect(&f);// to disable transparent effect flag for single line edit
  2646.     //PMT VIKAS END 20050630
  2647. #endif /* __MMI_UI_TRANSPARENT_EFFECT__ */ 
  2648.     /* PMT VIKAS END */
  2649.     gui_push_clip();
  2650.     if (flags & UI_SINGLE_LINE_INPUT_BOX_NO_BORDER)
  2651.     {
  2652.         gui_set_clip(x1 + 1, y1 + 1, x2 - 1, y2 - 1);
  2653.         sy1 += 1;
  2654.         sy2 -= 1;
  2655.         border_type = 1;
  2656.     }
  2657.     else
  2658.     {
  2659.         gui_set_clip(x1, y1, x2 + 2, y2 + 2);
  2660.     }
  2661.     /* Add by Leo */
  2662.     if (flags & UI_SINGLE_LINE_INPUT_BOX_FORCE_BORDER_DISPLAY)
  2663.     {
  2664.         S32 string_width = 0, string_height = 0;
  2665.         gui_measure_string((UI_string_type) MMI_singleline_inputbox.text, &string_width, &string_height);