Summery about show input info bar of MTK 分享

2.以保存在PHONE爲例(30個ASCII碼, or 14個漢字) Show57Screen()

       mmi_phb_entry_op_add_entry ( )開始裝載57Screen。

  姓名菜單:

(1)SetInlineItemActivation(&wgui_inline_items[0], KEY_LSK, KEY_EVENT_UP);---相應

(2)mmi_phb_op_fill_inline_item(MMI_PHB_FIELD_NAME,item_index++,MAX_PB_ENTRIES,TitleStrings, DetailPbNameImageList);         ---裝載詳細信息

         (2-1)調用SetInlineItemFullScreenEdit()設置全屏輸入時的參數:接受地址pbName,長度31,輸入類型

                   (2-1-1) SetInlineItemFullScreenEdit_ext()

                            令:wgui_inline_items[0] .item = &wgui_inline_text_edit_items[0](0表示第一個全屏編輯菜 單,wgui_inline_text_edit_items是個數組,如果有多個全屏編輯菜單,那麼就用變量 n_inline_text_edit_items來計數)

然後設置wgui_inline_text_edit_items[0]的buffer(pbName), buffer_size(31),title, max_lines,以及一些處理函數。

item->handler = handle_inline_full_screen_edit;

注意:wgui_inline_items[0].texg_p也指向:wgui_inline_text_edit_items[0].buffer。

  (3)高亮姓名菜單,按下做軟件

  (3-1) wgui_inline_item_key_handler()

  wgui_inline_items[wgui_inline_item_highlighted_index].handler(), 即上面的handle_inline_full_screen_edit.

     current_wgui_inline_text_edit_item = i;                         指向item

    current_wgui_inline_text_edit_text_p = text_p;                指向pbName

     wgui_setup_inputbox()

     wgui_setup_inputbox_ext()

        create_multiline_inputbox_set_buffer() 創建編輯框

               move_multiline_inputbox()         設置輸入框實際位置(去掉信息欄位置wgui_inputbox_information_bar_height)

               wgui_setup_input_information()           設置輸入法信息欄

                                                          wgui_inputbox_information_bar_x = 0;

                                                        wgui_inputbox_information_bar_y = 54;

                                                        wgui_inputbox_information_bar_width = 240;

                                                        wgui_inputbox_information_bar_height = 22;

                註冊輸入法函數,按鍵相應函數

                設置右軟件:

set_right_softkey_function(wgui_handle_inputbox_right_softkey_down, KEY_EVENT_DOWN);

              set_right_softkey_function(wgui_handle_inputbox_right_softkey_long_press, KEY_LONG_PRESS);

                     wgui_redraw_remaining_characters_display()即wgui_redraw_remaining_characters_display_internal。

wgui_redraw_remaining_characters_display_internal()

   n = (MMI_multiline_inputbox.text_length >> 1) - 1;                             已經輸入字符數    

   max_n = (MMI_multiline_inputbox.available_length >> 1) - 1;     最大字符數

   wgui_input_information_background(x1, y1, x2, y2);                            畫背景

    gui_sprintf(str, "%d/%d", n, max_n);

   gui_move_text_cursor(x2 - 2 - w, y1 + 2);                                  設置字符數提示信息的位置

   gui_print_text(str);                                                                 顯示

 

SetKeyHandler(wgui_handle_inputbox_change_input_mode, KEY_POUND, KEY_EVENT_DOWN);

 

 

1. 在全屏編輯界面,按下數字鍵5,進入:

MMI_key_5_down()

MMI_key_input_handler()

multitap_input_key_down()

change_multitap_state()   multitap input

multiline_inputbox_input_callback(), 即:wgui_inline_edit_handle_multiline_inputbox_input()

  gui_multi_line_input_box_insert_multitap_character(&MMI_multiline_inputbox, c);      加入字符

       if (text_length > b->available_length)

        {

            UI_editor_play_tone_cannot_insert();

            return;

        }

            UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE2()

                     此函數沒有改變MMI_multiline_inputbox.available_length

            gui_show_multi_line_input_box()

  wgui_inline_edit_handle_multiline_inputbox_input()

  wgui_handle_inputbox_input()    改變有軟件標籤爲清除,並設置響應函數

         wgui_redraw_remaining_characters_display();   重繪字符數提示信息

         wgui_redraw_remaining_characters_display_internal()

                     n = (MMI_multiline_inputbox.text_length >> 1) - 1;

                  max_n = (MMI_multiline_inputbox.available_length >> 1) - 1;

                              此時MMI_multiline_inputbox.available_length=62,因此:max_n=31

 

2.輸入第一個字符後,按下6輸入第二個字符   只列出關鍵函數

gui_multi_line_input_box_insert_multitap_character()

wgui_redraw_remaining_characters_display_internal()

 

 

 

3.在沒有輸入字符時,按下#,設置輸入法爲中文

INCInputKeyPoundPressHandler()

   INCInputSetLeftSoftKey() ;

   INCInputRegisterProcess(pInput->iType,pInput->iInputMode)       註冊按鍵相應函數

   wgui_handle_inputbox_change_input_mode()

   wgui_redraw_input_information_bar()

然後按下2:

INCInputKey2PressHandler()

   INCInputEditKeyHandler()

      INCInputDraw() ;                         繪畫多選擇輸入

       INCInputResetRightSoftKey() ;

      INCInputSetLeftSoftKey()         設置左軟件:INCInputKeyEnterHandler()

 

按下左軟件,選擇一個漢字、

INCInputKeyEnterHandler()

   INCInputSetLeftSoftKey()

 

   INCInputSelectTheHZ()

      multiline_inputbox_direct_input()

         gui_multi_line_input_box_insert_character(&MMI_multiline_inputbox, c);

             gui_multi_line_input_box_insert_character_internal()

                  UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE2( )

                                  此函數改變了MMI_multiline_inputbox.available_length

      wgui_inline_edit_handle_multiline_inputbox_input()

      multiline_inputbox_input_callback()即:

wgui_inline_edit_handle_multiline_inputbox_input()

         wgui_handle_inputbox_input()   調整右軟件標籤和響應

            wgui_redraw_remaining_characters_display()

                wgui_redraw_remaining_characters_display_internal()

                    n = (MMI_multiline_inputbox.text_length >> 1) - 1;                           

                    max_n = (MMI_multiline_inputbox.available_length >> 1) - 1;

                                        此時MMI_multiline_inputbox.available_length=30,因此:max_n=14

 

二、刪除字符

1. 當已經輸入2個漢字時,提示信息:2/14。此時按右軟件刪除1個漢字,提示信息變成:1/14

INCInputRightSoftkeyPressHandler()

   bEmpty = gui_multi_line_input_box_get_text_length(&MMI_multiline_inputbox)==0 ;判斷此時是否爲空

   if(bEmpty)

 

   else         進入這裏,不爲空

      INCInputKeyClearHandler()

         multiline_inputbox_delete_character()

                     gui_multi_line_input_box_delete_character(&MMI_multiline_inputbox); 刪除一個漢字

                                     UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH( )。 重新設置最大字符數。此時第二個參數:b->UCS2_count爲2(2個漢 字),MMI_multiline_inputbox.available_length不會改變。

         multiline_inputbox_input_callback()即:wgui_inline_edit_handle_multiline_inputbox_input()

            wgui_handle_inputbox_input()設置右軟件標籤和響應

               wgui_redraw_remaining_characters_display()重繪提示字符信息

 

 

2.再次按下右軟件,刪除全部漢字,還進入else分支:再次進入UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH()時,

第二個參數:b->UCS2_count爲1(1個漢字),MMI_multiline_inputbox.available_length被改變,因此改變重繪提示字符信息。

 

3.輸入爲空時,再按下右軟件,進入上面的if分支。返回history screen。

 

4.如果已經輸入的不是漢字,而是ASCII碼如:ab,按下右軟件時:

wgui_handle_inputbox_right_softkey_down()

    multiline_inputbox_delete_character()

        gui_multi_line_input_box_delete_character(&MMI_multiline_inputbox);

            同樣調用UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH(),第二個參數:b->UCS2_count爲0(0 個漢字),MMI_multiline_inputbox.available_length不改變

       multiline_inputbox_input_callback()即:wgui_inline_edit_handle_multiline_inputbox_input()

           wgui_handle_inputbox_input()

                       wgui_redraw_remaining_characters_display() 重繪提示符信息

 

總結:

1.無論在哪種輸入法下,當輸入字符時,都進入:gui_multi_line_input_box_insert_character_internal()。在此函數中調用:

UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE2()設置可輸入的最大字符數,關鍵是根據第一個參數的編碼來判斷。

2.當刪除字符時,都進入:multiline_inputbox_delete_character(),調用 gui_multi_line_input_box_delete_character(),然後調用:、 UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH()設置設置可輸入的最大字符數。

發佈了23 篇原創文章 · 獲贊 3 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章