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

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   wgui_tab_bars.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Tab Bar - Category component
  48.  *
  49.  * Author:
  50.  * -------
  51.  * -------
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * removed!
  58.  *
  59.  * removed!
  60.  * removed!
  61.  * removed!
  62.  *
  63.  * removed!
  64.  * removed!
  65.  * removed!
  66.  *
  67.  *------------------------------------------------------------------------------
  68.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  69.  *============================================================================
  70.  ****************************************************************************/
  71. /*  Include: MMI header file */
  72. #include "wgui_tab_bars.h"
  73. #include "gui_setting.h"
  74. #include "DebugInitDef.h"
  75. extern U16 title_bg_id;
  76. /***************************************************************************** 
  77. * Define
  78. *****************************************************************************/
  79. /* To restore the first displayed item after tab bar is scrolled with pen */
  80. #define WGUI_TAB_BAR_RESTORE_DISPLAY_TIME       (3000)
  81. /***************************************************************************** 
  82. * Typedef 
  83. *****************************************************************************/
  84. /***************************************************************************** 
  85. * Local Variable
  86. *****************************************************************************/
  87. #ifdef __MMI_TOUCH_SCREEN__
  88. /* Default value is -1. Used to store the display area of tab bar after pen is up. */
  89. S16 MMI_horizontal_tab_bar_first_displayed_before_pen_down = -1;
  90. /* Default value is -1. Used to set  the display area of tab bar when it enters a new screen. */
  91. S16 MMI_horizontal_tab_bar_first_displayed_on_screen_switched = -1;
  92. /* Used by wgui_horizontal_tab_bar_translate_pen_event() */
  93. void (*MMI_horizontal_tab_bar_select_callback) (int index);
  94. #endif /* __MMI_TOUCH_SCREEN__ */ 
  95. /***************************************************************************** 
  96. * Local Function
  97. *****************************************************************************/
  98. /*****************************************************************************
  99.  * FUNCTION
  100.  *  wgui_horizontal_tab_bar_reset_title_bg_id
  101.  * DESCRIPTION
  102.  *  
  103.  * PARAMETERS
  104.  *  void
  105.  * RETURNS
  106.  *  void
  107.  *****************************************************************************/
  108. void wgui_horizontal_tab_bar_reset_title_bg_id(void)
  109. {
  110.     /*----------------------------------------------------------------*/
  111.     /* Local Variables                                                */
  112.     /*----------------------------------------------------------------*/
  113.     /*----------------------------------------------------------------*/
  114.     /* Code Body                                                      */
  115.     /*----------------------------------------------------------------*/
  116.     title_bg_id = 0;
  117. }
  118. /***************************************************************************** 
  119. * Global Variable
  120. *****************************************************************************/
  121. horizontal_tab_bar MMI_horizontal_tab_bar;
  122. tab_bar_item_type MMI_tab_bar_items[UI_MAX_TAB_BAR_ITEMS];
  123. /***************************************************************************** 
  124. * Global Function
  125. *****************************************************************************/
  126. /*****************************************************************************
  127.  * FUNCTION
  128.  *  wgui_create_horizontal_tab_bar
  129.  * DESCRIPTION
  130.  *  Cerate horizontal tab bar component in category
  131.  * PARAMETERS
  132.  *  contain_hint            [IN]        Whether the tab bar contains hint area
  133.  *  hint                    [IN]        
  134.  *  n_item                  [IN]        
  135.  *  focused_item            [IN]        
  136.  *  keep_pen_context        [IN]        
  137.  * RETURNS
  138.  *  void
  139.  *****************************************************************************/
  140. void wgui_create_horizontal_tab_bar(
  141.         BOOL contain_hint,
  142.         UI_string_type hint,
  143.         S8 n_item,
  144.         S8 focused_item,
  145.         MMI_BOOL keep_pen_context)
  146. {
  147.     /*----------------------------------------------------------------*/
  148.     /* Local Variables                                                */
  149.     /*----------------------------------------------------------------*/
  150.     /*----------------------------------------------------------------*/
  151.     /* Code Body                                                      */
  152.     /*----------------------------------------------------------------*/
  153.     if (n_item > UI_MAX_TAB_BAR_ITEMS)
  154.     {
  155.         n_item = UI_MAX_TAB_BAR_ITEMS;
  156.     }
  157.     gui_create_horizontal_tab_bar(
  158.         &MMI_horizontal_tab_bar,
  159.         MMI_HORIZONTAL_TAB_BAR_X,
  160.         MMI_HORIZONTAL_TAB_BAR_Y,
  161.         MMI_HORIZONTAL_TAB_BAR_WIDTH,
  162.         MMI_HORIZONTAL_TAB_BAR_TAB_AREA_HEIGHT,
  163.         (S16) (contain_hint ? MMI_HORIZONTAL_TAB_BAR_HINT_AREA_HEIGHT : 0),
  164.         MMI_HORIZONTAL_TAB_BAR_TAB_WIDTH,
  165.         MMI_HORIZONTAL_TAB_BAR_FOCUSED_TAB_WIDTH,
  166.         hint,
  167.         n_item,
  168.         focused_item,
  169.         MMI_tab_bar_items);
  170.     MMI_horizontal_tab_bar.flags |= UI_TAB_BAR_LOOP;
  171.     gui_horizontal_tab_bar_set_icon_position(&MMI_horizontal_tab_bar, 13, 5);
  172. #ifdef __MMI_TOUCH_SCREEN__
  173.     if (!keep_pen_context)
  174.     {
  175.         MMI_horizontal_tab_bar_select_callback = NULL;
  176.         MMI_horizontal_tab_bar_first_displayed_before_pen_down = -1;
  177.         if (MMI_horizontal_tab_bar_first_displayed_on_screen_switched >= 0)
  178.         {
  179.             gui_set_horizontal_tab_bar_display_range(
  180.                 &MMI_horizontal_tab_bar,
  181.                 MMI_horizontal_tab_bar_first_displayed_on_screen_switched);
  182.         }
  183.     }
  184. #endif /* __MMI_TOUCH_SCREEN__ */ 
  185. }
  186. /*****************************************************************************
  187.  * FUNCTION
  188.  *  wgui_close_horizontal_tab_bar
  189.  * DESCRIPTION
  190.  *  Close the horizontal tab bar
  191.  * PARAMETERS
  192.  *  void
  193.  * RETURNS
  194.  *  void
  195.  *****************************************************************************/
  196. void wgui_close_horizontal_tab_bar(void)
  197. {
  198.     /*----------------------------------------------------------------*/
  199.     /* Local Variables                                                */
  200.     /*----------------------------------------------------------------*/
  201.     /*----------------------------------------------------------------*/
  202.     /* Code Body                                                      */
  203.     /*----------------------------------------------------------------*/
  204.     gui_horizontal_tab_bar_stop_blinking(&MMI_horizontal_tab_bar);
  205. }
  206. /*****************************************************************************
  207.  * FUNCTION
  208.  *  wgui_show_horizontal_tab_bar
  209.  * DESCRIPTION
  210.  *  Show the horizontal tab bar
  211.  * PARAMETERS
  212.  *  void
  213.  * RETURNS
  214.  *  void
  215.  *****************************************************************************/
  216. void wgui_show_horizontal_tab_bar(void)
  217. {
  218.     /*----------------------------------------------------------------*/
  219.     /* Local Variables                                                */
  220.     /*----------------------------------------------------------------*/
  221.     /*----------------------------------------------------------------*/
  222.     /* Code Body                                                      */
  223.     /*----------------------------------------------------------------*/
  224.     gui_lock_double_buffer();
  225.     gui_show_horizontal_tab_bar(&MMI_horizontal_tab_bar, MMI_FALSE, MMI_FALSE);
  226.     gui_unlock_double_buffer();
  227.     gui_BLT_double_buffer(
  228.         MMI_horizontal_tab_bar.x,
  229.         MMI_horizontal_tab_bar.y,
  230.         MMI_horizontal_tab_bar.x + MMI_horizontal_tab_bar.width - 1,
  231.         MMI_horizontal_tab_bar.y + MMI_horizontal_tab_bar.height - 1);
  232.     if (MMI_horizontal_tab_bar.theme->hint_bg_image && title_bg_id == 0)
  233.     {
  234.         title_bg_id = MMI_horizontal_tab_bar.theme->hint_bg_image;
  235.         gui_add_cleanup_hook(wgui_horizontal_tab_bar_reset_title_bg_id);
  236.     }
  237.     gui_horizontal_tab_bar_start_blinking(&MMI_horizontal_tab_bar);
  238. }
  239. /*****************************************************************************
  240.  * FUNCTION
  241.  *  wgui_show_horizontal_tab_bar_hint_area
  242.  * DESCRIPTION
  243.  *  
  244.  * PARAMETERS
  245.  *  void
  246.  * RETURNS
  247.  *  void
  248.  *****************************************************************************/
  249. void wgui_show_horizontal_tab_bar_hint_area(void)
  250. {
  251.     /*----------------------------------------------------------------*/
  252.     /* Local Variables                                                */
  253.     /*----------------------------------------------------------------*/
  254.     /*----------------------------------------------------------------*/
  255.     /* Code Body                                                      */
  256.     /*----------------------------------------------------------------*/
  257.     gui_lock_double_buffer();
  258.     gui_show_horizontal_tab_bar(&MMI_horizontal_tab_bar, MMI_TRUE, MMI_FALSE);
  259.     gui_unlock_double_buffer();
  260.     gui_BLT_double_buffer(
  261.         MMI_horizontal_tab_bar.x,
  262.         MMI_horizontal_tab_bar.y + MMI_horizontal_tab_bar.tab_area_height,
  263.         MMI_horizontal_tab_bar.x + MMI_horizontal_tab_bar.width - 1,
  264.         MMI_horizontal_tab_bar.y + MMI_horizontal_tab_bar.height - 1);
  265. }
  266. /*****************************************************************************
  267.  * FUNCTION
  268.  *  wgui_show_horizontal_tab_bar_tab_area
  269.  * DESCRIPTION
  270.  *  
  271.  * PARAMETERS
  272.  *  void
  273.  * RETURNS
  274.  *  void
  275.  * REMARKS
  276.  *  Used in category 435 that popup overlaps with hint area, and we do not want to redraw the
  277.  *  whole screen. As a result, we redraw the tab area only.
  278.  *****************************************************************************/
  279. void wgui_show_horizontal_tab_bar_tab_area(void)
  280. {
  281.     /*----------------------------------------------------------------*/
  282.     /* Local Variables                                                */
  283.     /*----------------------------------------------------------------*/
  284.     /*----------------------------------------------------------------*/
  285.     /* Code Body                                                      */
  286.     /*----------------------------------------------------------------*/
  287.     gui_lock_double_buffer();
  288.     gui_show_horizontal_tab_bar(&MMI_horizontal_tab_bar, MMI_FALSE, MMI_TRUE);
  289.     gui_unlock_double_buffer();
  290.     gui_BLT_double_buffer(
  291.         MMI_horizontal_tab_bar.x,
  292.         MMI_horizontal_tab_bar.y,
  293.         MMI_horizontal_tab_bar.x + MMI_horizontal_tab_bar.width - 1,
  294.         MMI_horizontal_tab_bar.y + MMI_horizontal_tab_bar.tab_area_height - 1);
  295.     gui_horizontal_tab_bar_start_blinking(&MMI_horizontal_tab_bar);
  296. }
  297. /*****************************************************************************
  298.  * FUNCTION
  299.  *  wgui_move_horizontal_tab_bar
  300.  * DESCRIPTION
  301.  *  Move the horizontal tab bar
  302.  * PARAMETERS
  303.  *  x       [IN]        
  304.  *  y       [IN]        
  305.  * RETURNS
  306.  *  void
  307.  *****************************************************************************/
  308. void wgui_move_horizontal_tab_bar(S32 x, S32 y)
  309. {
  310.     /*----------------------------------------------------------------*/
  311.     /* Local Variables                                                */
  312.     /*----------------------------------------------------------------*/
  313.     /*----------------------------------------------------------------*/
  314.     /* Code Body                                                      */
  315.     /*----------------------------------------------------------------*/
  316.     gui_move_horizontal_tab_bar(&MMI_horizontal_tab_bar, x, y);
  317. }
  318. /*****************************************************************************
  319.  * FUNCTION
  320.  *  wgui_horizontal_tab_bar_goto_home
  321.  * DESCRIPTION
  322.  *  Focus the first item of horizontal tab bar
  323.  * PARAMETERS
  324.  *  void
  325.  * RETURNS
  326.  *  void
  327.  *****************************************************************************/
  328. void wgui_horizontal_tab_bar_goto_home(void)
  329. {
  330.     /*----------------------------------------------------------------*/
  331.     /* Local Variables                                                */
  332.     /*----------------------------------------------------------------*/
  333.     /*----------------------------------------------------------------*/
  334.     /* Code Body                                                      */
  335.     /*----------------------------------------------------------------*/
  336.     gui_horizontal_tab_bar_focus_first_item(&MMI_horizontal_tab_bar);
  337.     wgui_show_horizontal_tab_bar();
  338. }
  339. /*****************************************************************************
  340.  * FUNCTION
  341.  *  wgui_horizontal_tab_bar_goto_end
  342.  * DESCRIPTION
  343.  *  Focus the last item of horizontal tab bar
  344.  * PARAMETERS
  345.  *  void
  346.  * RETURNS
  347.  *  void
  348.  *****************************************************************************/
  349. void wgui_horizontal_tab_bar_goto_end(void)
  350. {
  351.     /*----------------------------------------------------------------*/
  352.     /* Local Variables                                                */
  353.     /*----------------------------------------------------------------*/
  354.     /*----------------------------------------------------------------*/
  355.     /* Code Body                                                      */
  356.     /*----------------------------------------------------------------*/
  357.     gui_horizontal_tab_bar_focus_last_item(&MMI_horizontal_tab_bar);
  358.     wgui_show_horizontal_tab_bar();
  359. }
  360. /*****************************************************************************
  361.  * FUNCTION
  362.  *  wgui_horizontal_tab_bar_goto_item
  363.  * DESCRIPTION
  364.  *  Focus certain item of horizontal tab bar
  365.  * PARAMETERS
  366.  *  index       [IN]        Item index
  367.  * RETURNS
  368.  *  void
  369.  *****************************************************************************/
  370. void wgui_horizontal_tab_bar_goto_item(int index)
  371. {
  372.     /*----------------------------------------------------------------*/
  373.     /* Local Variables                                                */
  374.     /*----------------------------------------------------------------*/
  375.     /*----------------------------------------------------------------*/
  376.     /* Code Body                                                      */
  377.     /*----------------------------------------------------------------*/
  378.     gui_horizontal_tab_bar_focus_item(&MMI_horizontal_tab_bar, (S8) index);
  379.     wgui_show_horizontal_tab_bar();
  380. }
  381. /*****************************************************************************
  382.  * FUNCTION
  383.  *  wgui_horizontal_tab_bar_goto_next_item
  384.  * DESCRIPTION
  385.  *  Focus the next item of horizontal tab bar
  386.  * PARAMETERS
  387.  *  void
  388.  * RETURNS
  389.  *  void
  390.  *****************************************************************************/
  391. void wgui_horizontal_tab_bar_goto_next_item(void)
  392. {
  393.     /*----------------------------------------------------------------*/
  394.     /* Local Variables                                                */
  395.     /*----------------------------------------------------------------*/
  396.     /*----------------------------------------------------------------*/
  397.     /* Code Body                                                      */
  398.     /*----------------------------------------------------------------*/
  399.     gui_horizontal_tab_bar_focus_next_item(&MMI_horizontal_tab_bar);
  400.     wgui_show_horizontal_tab_bar();
  401. }
  402. /*****************************************************************************
  403.  * FUNCTION
  404.  *  wgui_horizontal_tab_bar_goto_prev_item
  405.  * DESCRIPTION
  406.  *  Focus the previous item of horizontal tab bar
  407.  * PARAMETERS
  408.  *  void
  409.  * RETURNS
  410.  *  void
  411.  *****************************************************************************/
  412. void wgui_horizontal_tab_bar_goto_prev_item(void)
  413. {
  414.     /*----------------------------------------------------------------*/
  415.     /* Local Variables                                                */
  416.     /*----------------------------------------------------------------*/
  417.     /*----------------------------------------------------------------*/
  418.     /* Code Body                                                      */
  419.     /*----------------------------------------------------------------*/
  420.     gui_horizontal_tab_bar_focus_prev_item(&MMI_horizontal_tab_bar);
  421.     wgui_show_horizontal_tab_bar();
  422. }
  423. /*****************************************************************************
  424.  * FUNCTION
  425.  *  wgui_horizontal_tab_bar_start_blinking
  426.  * DESCRIPTION
  427.  *  Start the blinking of certain tab
  428.  * PARAMETERS
  429.  *  index       [IN]        Index of the item
  430.  * RETURNS
  431.  *  void
  432.  *****************************************************************************/
  433. void wgui_horizontal_tab_bar_start_blinking(int index)
  434. {
  435.     /*----------------------------------------------------------------*/
  436.     /* Local Variables                                                */
  437.     /*----------------------------------------------------------------*/
  438.     /*----------------------------------------------------------------*/
  439.     /* Code Body                                                      */
  440.     /*----------------------------------------------------------------*/
  441.     MMI_tab_bar_items[index].flags |= UI_TAB_BAR_ITEM_STATE_BLINKING;
  442. }
  443. /*****************************************************************************
  444.  * FUNCTION
  445.  *  wgui_horizontal_tab_bar_stop_blinking
  446.  * DESCRIPTION
  447.  *  Stop the blinking of certain tab
  448.  * PARAMETERS
  449.  *  index       [IN]        
  450.  * RETURNS
  451.  *  index    IN    index of the item(?)
  452.  *****************************************************************************/
  453. void wgui_horizontal_tab_bar_stop_blinking(int index)
  454. {
  455.     /*----------------------------------------------------------------*/
  456.     /* Local Variables                                                */
  457.     /*----------------------------------------------------------------*/
  458.     U32 old_flags;
  459.     /*----------------------------------------------------------------*/
  460.     /* Code Body                                                      */
  461.     /*----------------------------------------------------------------*/
  462.     old_flags = MMI_tab_bar_items[index].flags;
  463.     MMI_tab_bar_items[index].flags &= ~UI_TAB_BAR_ITEM_STATE_BLINKING;
  464.     /* We need to refresh the tab bar */
  465.     if ((old_flags & UI_TAB_BAR_ITEM_STATE_BLINKING) &&
  466.         gui_horizontal_tab_bar_is_item_displayed(&MMI_horizontal_tab_bar, index))
  467.     {
  468.         wgui_show_horizontal_tab_bar();
  469.     }
  470. }
  471. /*****************************************************************************
  472.  * FUNCTION
  473.  *  wgui_get_horizontal_tab_bar_history
  474.  * DESCRIPTION
  475.  *  Focus the previous item of horizontal tab bar
  476.  * PARAMETERS
  477.  *  history     [?]     
  478.  * RETURNS
  479.  *  void
  480.  *****************************************************************************/
  481. void wgui_get_horizontal_tab_bar_history(wgui_tab_bar_history_struct *history)
  482. {
  483.     /*----------------------------------------------------------------*/
  484.     /* Local Variables                                                */
  485.     /*----------------------------------------------------------------*/
  486.     /*----------------------------------------------------------------*/
  487.     /* Code Body                                                      */
  488.     /*----------------------------------------------------------------*/
  489.     history->flags = MMI_horizontal_tab_bar.flags;
  490.     history->first_displayed_item = MMI_horizontal_tab_bar.first_displayed_item;
  491.     history->last_displayed_item = MMI_horizontal_tab_bar.last_displayed_item;
  492.     history->focused_item = MMI_horizontal_tab_bar.focused_item;
  493. }
  494. /*****************************************************************************
  495.  * FUNCTION
  496.  *  wgui_set_horizontal_tab_bar_history
  497.  * DESCRIPTION
  498.  *  Focus the previous item of horizontal tab bar
  499.  * PARAMETERS
  500.  *  history     [?]     
  501.  * RETURNS
  502.  *  void
  503.  *****************************************************************************/
  504. void wgui_set_horizontal_tab_bar_history(wgui_tab_bar_history_struct *history)
  505. {
  506.     /*----------------------------------------------------------------*/
  507.     /* Local Variables                                                */
  508.     /*----------------------------------------------------------------*/
  509.     /*----------------------------------------------------------------*/
  510.     /* Code Body                                                      */
  511.     /*----------------------------------------------------------------*/
  512.     MMI_horizontal_tab_bar.flags = history->flags;
  513.     MMI_horizontal_tab_bar.first_displayed_item = history->first_displayed_item;
  514.     MMI_horizontal_tab_bar.last_displayed_item = history->last_displayed_item;
  515.     MMI_horizontal_tab_bar.focused_item = history->focused_item;
  516. }
  517. #ifdef __MMI_WGUI_MINI_TAB_BAR__
  518. gui_mini_tab_bar_struct wgui_mini_tab_bar;
  519. /*****************************************************************************
  520.  * FUNCTION
  521.  *  wgui_init_mini_tab_bar
  522.  * DESCRIPTION
  523.  *  Initialize mini tab bar
  524.  * PARAMETERS
  525.  *  void
  526.  * RETURNS
  527.  *  void
  528.  *****************************************************************************/
  529. void wgui_init_mini_tab_bar(void)
  530. {
  531.     /*----------------------------------------------------------------*/
  532.     /* Local Variables                                                */
  533.     /*----------------------------------------------------------------*/
  534.     U8 idx = 0;
  535.     /*----------------------------------------------------------------*/
  536.     /* Code Body                                                      */
  537.     /*----------------------------------------------------------------*/
  538.     wgui_mini_tab_bar.flags = 0;
  539.     wgui_mini_tab_bar.num_of_items = 0;
  540. }
  541. /*****************************************************************************
  542.  * FUNCTION
  543.  *  wgui_setup_mini_tab_bar
  544.  * DESCRIPTION
  545.  *  Setup mini tab bar data
  546.  * PARAMETERS
  547.  *  x                   [IN]        X-coordinate of mini tab bar
  548.  *  y                   [IN]        Y-coordinate of mini tab bar
  549.  *  width               [IN]        Width of mini tab bar
  550.  *  height              [IN]        Height of mini tab bar
  551.  *  bg_color            [IN]        Background color of mini tab bar
  552.  *  selected_color      [IN]        Selected item color
  553.  *  normal_color        [IN]        Normal item color
  554.  *  count               [IN]        Number of items in mini tab bar
  555.  *  menu_item_id        [IN]        Menu id array of each item in mini tab bar
  556.  *  item_entry_func     [IN]        Entry function array of each item in mini tab bar
  557.  * RETURNS
  558.  *  void
  559.  *****************************************************************************/
  560. void wgui_setup_mini_tab_bar(
  561.         S32 x,
  562.         S32 y,
  563.         S32 width,
  564.         S32 height,
  565.         color bg_color,
  566.         color selected_color,
  567.         color normal_color,
  568.         U8 count,
  569.         U16 *menu_item_id,
  570.         FuncPtr *item_entry_func)
  571. {
  572.     /*----------------------------------------------------------------*/
  573.     /* Local Variables                                                */
  574.     /*----------------------------------------------------------------*/
  575.     U8 idx = 0;
  576.     /*----------------------------------------------------------------*/
  577.     /* Code Body                                                      */
  578.     /*----------------------------------------------------------------*/
  579.     wgui_mini_tab_bar.x = x;
  580.     wgui_mini_tab_bar.y = y;
  581.     wgui_mini_tab_bar.width = width;
  582.     wgui_mini_tab_bar.height = height;
  583.     wgui_mini_tab_bar.bg_color = bg_color;
  584.     wgui_mini_tab_bar.selected_item_color = selected_color;
  585.     wgui_mini_tab_bar.normal_item_color = normal_color;
  586.     wgui_mini_tab_bar.flags = 0;
  587.     wgui_mini_tab_bar.num_of_items = count;
  588.     MMI_ASSERT(menu_item_id != NULL);
  589.     for (idx = 0; idx < count; idx++)
  590.     {
  591.         wgui_mini_tab_bar.menu_item_id[idx] = menu_item_id[idx];
  592.         if (item_entry_func != NULL)
  593.         {
  594.             wgui_mini_tab_bar.item_entry_func[idx] = item_entry_func[idx];
  595.         }
  596.     }
  597. }
  598. /*****************************************************************************
  599.  * FUNCTION
  600.  *  wgui_if_mini_tab_bar_enable
  601.  * DESCRIPTION
  602.  *  check if mini tab bar is enabled
  603.  * PARAMETERS
  604.  *  void
  605.  * RETURNS
  606.  *  MMI_BOOL MMI_TRUE for enabled mini tab bar, MMI_FALSE else
  607.  *****************************************************************************/
  608. MMI_BOOL wgui_if_mini_tab_bar_enable(void)
  609. {
  610.     /*----------------------------------------------------------------*/
  611.     /* Local Variables                                                */
  612.     /*----------------------------------------------------------------*/
  613.     /*----------------------------------------------------------------*/
  614.     /* Code Body                                                      */
  615.     /*----------------------------------------------------------------*/
  616.     if (wgui_mini_tab_bar.flags & WGUI_MINI_TAB_BAR_ENABLED)
  617.     {
  618.         return MMI_TRUE;
  619.     }
  620.     return MMI_FALSE;
  621. }
  622. /*****************************************************************************
  623.  * FUNCTION
  624.  *  wgui_if_mini_tab_bar_in_parent
  625.  * DESCRIPTION
  626.  *  check if current screen is the parent of mini tab bar
  627.  * PARAMETERS
  628.  *  void
  629.  * RETURNS
  630.  *  MMI_BOOL MMI_TRUE for yes, MMI_FALSE else
  631.  *****************************************************************************/
  632. MMI_BOOL wgui_if_mini_tab_bar_in_parent(void)
  633. {
  634.     /*----------------------------------------------------------------*/
  635.     /* Local Variables                                                */
  636.     /*----------------------------------------------------------------*/
  637.     /*----------------------------------------------------------------*/
  638.     /* Code Body                                                      */
  639.     /*----------------------------------------------------------------*/
  640.     if (wgui_mini_tab_bar.flags & WGUI_MINI_TAB_BAR_IN_PARENT)
  641.     {
  642.         return MMI_TRUE;
  643.     }
  644.     return MMI_FALSE;
  645. }
  646. /*****************************************************************************
  647.  * FUNCTION
  648.  *  wgui_enable_mini_tab_bar
  649.  * DESCRIPTION
  650.  *  Enable mini tab bar
  651.  * PARAMETERS
  652.  *  item_id     [IN]        Enable the mini tab bar and entry the item with id=item_id
  653.  * RETURNS
  654.  *  void
  655.  *****************************************************************************/
  656. void wgui_enable_mini_tab_bar(U16 item_id)
  657. {
  658.     /*----------------------------------------------------------------*/
  659.     /* Local Variables                                                */
  660.     /*----------------------------------------------------------------*/
  661.     U8 idx = 0;
  662.     /*----------------------------------------------------------------*/
  663.     /* Code Body                                                      */
  664.     /*----------------------------------------------------------------*/
  665.     for (idx = 0; idx < wgui_mini_tab_bar.num_of_items; idx++)
  666.         if (wgui_mini_tab_bar.menu_item_id[idx] == item_id)
  667.         {
  668.             wgui_mini_tab_bar.curr_index = idx;
  669.             wgui_mini_tab_bar.flags |= WGUI_MINI_TAB_BAR_ENABLED;
  670.             return;
  671.         }
  672.     /* the item is not included in any mini_tab_bar */
  673.     /* MMI_ASSERT(0); */
  674. }
  675. /*****************************************************************************
  676.  * FUNCTION
  677.  *  wgui_disable_mini_tab_bar
  678.  * DESCRIPTION
  679.  *  Disable mini tab bar
  680.  * PARAMETERS
  681.  *  void
  682.  * RETURNS
  683.  *  void
  684.  *****************************************************************************/
  685. void wgui_disable_mini_tab_bar(void)
  686. {
  687.     /*----------------------------------------------------------------*/
  688.     /* Local Variables                                                */
  689.     /*----------------------------------------------------------------*/
  690.     /*----------------------------------------------------------------*/
  691.     /* Code Body                                                      */
  692.     /*----------------------------------------------------------------*/
  693.     wgui_mini_tab_bar.flags &= ~WGUI_MINI_TAB_BAR_ENABLED;
  694. }
  695. /*****************************************************************************
  696.  * FUNCTION
  697.  *  wgui_mini_tab_bar_set_flag_on
  698.  * DESCRIPTION
  699.  *  API to turn on flag of mini tab bar
  700.  * PARAMETERS
  701.  *  flag        [IN]        Flag to be on
  702.  * RETURNS
  703.  *  void
  704.  *****************************************************************************/
  705. void wgui_mini_tab_bar_set_flag_on(S32 flag)
  706. {
  707.     /*----------------------------------------------------------------*/
  708.     /* Local Variables                                                */
  709.     /*----------------------------------------------------------------*/
  710.     /*----------------------------------------------------------------*/
  711.     /* Code Body                                                      */
  712.     /*----------------------------------------------------------------*/
  713.     wgui_mini_tab_bar.flags |= flag;
  714. }
  715. /*****************************************************************************
  716.  * FUNCTION
  717.  *  wgui_mini_tab_bar_set_flag_off
  718.  * DESCRIPTION
  719.  *  API to turn off flag of mini tab bar
  720.  * PARAMETERS
  721.  *  flag        [IN]        Flag to be off
  722.  * RETURNS
  723.  *  void
  724.  *****************************************************************************/
  725. void wgui_mini_tab_bar_set_flag_off(S32 flag)
  726. {
  727.     /*----------------------------------------------------------------*/
  728.     /* Local Variables                                                */
  729.     /*----------------------------------------------------------------*/
  730.     /*----------------------------------------------------------------*/
  731.     /* Code Body                                                      */
  732.     /*----------------------------------------------------------------*/
  733.     wgui_mini_tab_bar.flags &= ~flag;
  734. }
  735. /*****************************************************************************
  736.  * FUNCTION
  737.  *  wgui_register_mini_tab_bar_func
  738.  * DESCRIPTION
  739.  *  register items entry function of mini tab bar
  740.  * PARAMETERS
  741.  *  menu_item_id        [IN]        Array of ids of menu items
  742.  *  item_entry_func     [IN]        Array of entry functions of menu items
  743.  * RETURNS
  744.  *  void
  745.  *****************************************************************************/
  746. void wgui_register_mini_tab_bar_func(U16 *menu_item_id, FuncPtr item_entry_func[])
  747. {
  748.     /*----------------------------------------------------------------*/
  749.     /* Local Variables                                                */
  750.     /*----------------------------------------------------------------*/
  751.     U8 idx = 0;
  752.     U8 count = wgui_mini_tab_bar.num_of_items;
  753.     /*----------------------------------------------------------------*/
  754.     /* Code Body                                                      */
  755.     /*----------------------------------------------------------------*/
  756.     MMI_ASSERT(item_entry_func != NULL);
  757.     for (idx = 0; idx < count; idx++)
  758.     {
  759.         if (wgui_mini_tab_bar.menu_item_id[idx] == menu_item_id[idx])
  760.         {
  761.             wgui_mini_tab_bar.item_entry_func[idx] = item_entry_func[idx];
  762.             return;
  763.         }
  764.     }
  765.     MMI_ASSERT(0);
  766. }
  767. /*****************************************************************************
  768.  * FUNCTION
  769.  *  wgui_mini_tab_bar_goto_next
  770.  * DESCRIPTION
  771.  *  Goto next item of mini tab bar
  772.  * PARAMETERS
  773.  *  void
  774.  * RETURNS
  775.  *  void
  776.  *****************************************************************************/
  777. void wgui_mini_tab_bar_goto_next(void)
  778. {
  779.     /*----------------------------------------------------------------*/
  780.     /* Local Variables                                                */
  781.     /*----------------------------------------------------------------*/
  782.     /*----------------------------------------------------------------*/
  783.     /* Code Body                                                      */
  784.     /*----------------------------------------------------------------*/
  785.     /* increase index */
  786.     if (wgui_mini_tab_bar.curr_index == wgui_mini_tab_bar.num_of_items - 1)
  787.     {
  788.         wgui_mini_tab_bar.curr_index = 0;
  789.     }
  790.     else
  791.     {
  792.         wgui_mini_tab_bar.curr_index++;
  793.     }
  794.     /* execute entry function */
  795.     ExecuteItemHiliteHandler(wgui_mini_tab_bar.menu_item_id[wgui_mini_tab_bar.curr_index]);
  796.     execute_left_softkey_function(KEY_EVENT_UP);
  797.     /* delete toppest history */
  798.     DeleteNHistory(1);
  799. }
  800. /*****************************************************************************
  801.  * FUNCTION
  802.  *  wgui_mini_tab_bar_goto_prev
  803.  * DESCRIPTION
  804.  *  Goto previous item of mini tab bar
  805.  * PARAMETERS
  806.  *  void
  807.  * RETURNS
  808.  *  void
  809.  *****************************************************************************/
  810. void wgui_mini_tab_bar_goto_prev(void)
  811. {
  812.     /*----------------------------------------------------------------*/
  813.     /* Local Variables                                                */
  814.     /*----------------------------------------------------------------*/
  815.     /*----------------------------------------------------------------*/
  816.     /* Code Body                                                      */
  817.     /*----------------------------------------------------------------*/
  818.     /* decrease index */
  819.     if (wgui_mini_tab_bar.curr_index == 0)
  820.     {
  821.         wgui_mini_tab_bar.curr_index = wgui_mini_tab_bar.num_of_items - 1;
  822.     }
  823.     else
  824.     {
  825.         wgui_mini_tab_bar.curr_index--;
  826.     }
  827.     /* execute entry function */
  828.     ExecuteItemHiliteHandler(wgui_mini_tab_bar.menu_item_id[wgui_mini_tab_bar.curr_index]);
  829.     execute_left_softkey_function(KEY_EVENT_UP);
  830.     /* delete toppest history */
  831.     DeleteNHistory(1);
  832. }
  833. /*****************************************************************************
  834.  * FUNCTION
  835.  *  wgui_show_mini_tab_bar
  836.  * DESCRIPTION
  837.  *  Display the mini tab bar
  838.  * PARAMETERS
  839.  *  void
  840.  * RETURNS
  841.  *  void
  842.  *****************************************************************************/
  843. void wgui_show_mini_tab_bar(void)
  844. {
  845.     /*----------------------------------------------------------------*/
  846.     /* Local Variables                                                */
  847.     /*----------------------------------------------------------------*/
  848.     U8 idx = 0;
  849.     S32 x1, x2, y1, y2;
  850.     color bg_color, selected_color, normal_color;
  851.     U16 bar_width, bar_height;
  852.     U16 cell_width, cell_pad = 2, cell_count;
  853.     U16 left_pad;
  854.     /*----------------------------------------------------------------*/
  855.     /* Code Body                                                      */
  856.     /*----------------------------------------------------------------*/
  857.     x1 = wgui_mini_tab_bar.x;
  858.     x2 = wgui_mini_tab_bar.x + wgui_mini_tab_bar.width - 1;
  859.     y1 = wgui_mini_tab_bar.y;
  860.     y2 = wgui_mini_tab_bar.y + wgui_mini_tab_bar.height - 1;
  861.     cell_count = wgui_mini_tab_bar.num_of_items;
  862.     bar_width = wgui_mini_tab_bar.width;
  863.     bar_height = wgui_mini_tab_bar.height;
  864.     bg_color = wgui_mini_tab_bar.bg_color;
  865.     selected_color = wgui_mini_tab_bar.selected_item_color;
  866.     normal_color = wgui_mini_tab_bar.normal_item_color;
  867.     cell_width = (bar_width - cell_pad * (cell_count + 1)) / cell_count;
  868.     left_pad = (bar_width - (cell_width * cell_count) - (cell_pad * (cell_count - 1))) >> 1;
  869.     gdi_draw_solid_rect(x1, y1, x2, y2, bg_color);
  870.     for (idx = 0; idx < cell_count; idx++)
  871.     {
  872.         if (idx == wgui_mini_tab_bar.curr_index)    /* selected item */
  873.         {
  874.             gdi_draw_solid_rect(
  875.                 left_pad + (cell_pad + cell_width) * idx,
  876.                 y1 + 1,
  877.                 left_pad + cell_pad * idx + cell_width * (idx + 1),
  878.                 y2 - 1,
  879.                 selected_color);
  880.         }
  881.         else    /* normal item */
  882.         {
  883.             gdi_draw_solid_rect(
  884.                 left_pad + (cell_pad + cell_width) * idx,
  885.                 y1 + 1,
  886.                 left_pad + cell_pad * idx + cell_width * (idx + 1),
  887.                 y2 - 1,
  888.                 normal_color);
  889.         }
  890.     }
  891. }
  892. /*****************************************************************************
  893.  * FUNCTION
  894.  *  wgui_mini_tab_bar_get_index
  895.  * DESCRIPTION
  896.  *  Get the current index of mini tab bar.
  897.  * PARAMETERS
  898.  *  void
  899.  * RETURNS
  900.  *  U8    current item index of mini tab bar
  901.  *****************************************************************************/
  902. U8 wgui_mini_tab_bar_get_index(void)
  903. {
  904.     /*----------------------------------------------------------------*/
  905.     /* Local Variables                                                */
  906.     /*----------------------------------------------------------------*/
  907.     /*----------------------------------------------------------------*/
  908.     /* Code Body                                                      */
  909.     /*----------------------------------------------------------------*/
  910.     return wgui_mini_tab_bar.curr_index;
  911. }
  912. #endif /* __MMI_WGUI_MINI_TAB_BAR__ */ 
  913. /*****************************************************************************
  914.  * FUNCTION
  915.  *  wgui_set_horizontal_tab_bar_select_callback
  916.  * DESCRIPTION
  917.  *  Focus the previous item of horizontal tab bar
  918.  * PARAMETERS
  919.  *  select_callback     [IN]        
  920.  * RETURNS
  921.  *  void
  922.  *****************************************************************************/
  923. void wgui_set_horizontal_tab_bar_select_callback(void (*select_callback) (int index))
  924. {
  925.     /*----------------------------------------------------------------*/
  926.     /* Local Variables                                                */
  927.     /*----------------------------------------------------------------*/
  928.     /*----------------------------------------------------------------*/
  929.     /* Code Body                                                      */
  930.     /*----------------------------------------------------------------*/
  931. #ifdef __MMI_TOUCH_SCREEN__
  932.     MMI_horizontal_tab_bar_select_callback = select_callback;
  933. #endif 
  934. }
  935. #ifdef __MMI_TOUCH_SCREEN__
  936. /*****************************************************************************
  937.  * FUNCTION
  938.  *  wgui_enable_horizontal_tab_bar_pen_events
  939.  * DESCRIPTION
  940.  *  Handle pen events in horizontal tab bar and
  941.  * PARAMETERS
  942.  *  enable      [IN]        
  943.  *  tb(?)
  944.  *  pen_event(?)
  945.  *  x(?)
  946.  *  y(?)
  947.  * RETURNS
  948.  *  void
  949.  *****************************************************************************/
  950. void wgui_enable_horizontal_tab_bar_pen_events(BOOL enable)
  951. {
  952.     /*----------------------------------------------------------------*/
  953.     /* Local Variables                                                */
  954.     /*----------------------------------------------------------------*/
  955.     /*----------------------------------------------------------------*/
  956.     /* Code Body                                                      */
  957.     /*----------------------------------------------------------------*/
  958.     if (enable)
  959.     {
  960.         MMI_horizontal_tab_bar.flags &= ~UI_TAB_BAR_DISABLE_PEN;
  961.     }
  962.     else
  963.     {
  964.         MMI_horizontal_tab_bar.flags |= UI_TAB_BAR_DISABLE_PEN;
  965.     }
  966. }
  967. /*****************************************************************************
  968.  * FUNCTION
  969.  *  wgui_horizontal_tab_bar_restore_offset_timer_hdlr
  970.  * DESCRIPTION
  971.  *  Handle pen events in horizontal tab bar and
  972.  * PARAMETERS
  973.  *  void
  974.  *  tb(?)
  975.  *  pen_event(?)
  976.  *  x(?)
  977.  *  y(?)
  978.  * RETURNS
  979.  *  void
  980.  *****************************************************************************/
  981. /* Timer handler to restore the display range of tab bar */
  982. static void wgui_horizontal_tab_bar_restore_offset_timer_hdlr(void)
  983. {
  984.     /*----------------------------------------------------------------*/
  985.     /* Local Variables                                                */
  986.     /*----------------------------------------------------------------*/
  987.     /*----------------------------------------------------------------*/
  988.     /* Code Body                                                      */
  989.     /*----------------------------------------------------------------*/
  990.     if (MMI_horizontal_tab_bar_first_displayed_before_pen_down >= 0)
  991.     {
  992.         gui_set_horizontal_tab_bar_display_range(
  993.             &MMI_horizontal_tab_bar,
  994.             MMI_horizontal_tab_bar_first_displayed_before_pen_down);
  995.         wgui_show_horizontal_tab_bar_tab_area();
  996.         MMI_horizontal_tab_bar_first_displayed_before_pen_down = -1;
  997.     }
  998. }
  999. /*****************************************************************************
  1000.  * FUNCTION
  1001.  *  wgui_horizontal_tab_bar_abort_restore_offset_timer
  1002.  * DESCRIPTION
  1003.  *  
  1004.  * PARAMETERS
  1005.  *  void
  1006.  * RETURNS
  1007.  *  void
  1008.  *****************************************************************************/
  1009. static void wgui_horizontal_tab_bar_abort_restore_offset_timer(void)
  1010. {
  1011.     /*----------------------------------------------------------------*/
  1012.     /* Local Variables                                                */
  1013.     /*----------------------------------------------------------------*/
  1014.     /*----------------------------------------------------------------*/
  1015.     /* Code Body                                                      */
  1016.     /*----------------------------------------------------------------*/
  1017.     MMI_horizontal_tab_bar_first_displayed_before_pen_down = -1;
  1018. }
  1019. /* Start timer to restore the display range of tab bar */
  1020. /*****************************************************************************
  1021.  * FUNCTION
  1022.  *  wgui_horizontal_tab_bar_start_restore_offset_timer
  1023.  * DESCRIPTION
  1024.  *  
  1025.  * PARAMETERS
  1026.  *  void
  1027.  * RETURNS
  1028.  *  void
  1029.  *****************************************************************************/
  1030. static void wgui_horizontal_tab_bar_start_restore_offset_timer(void)
  1031. {
  1032.     /*----------------------------------------------------------------*/
  1033.     /* Local Variables                                                */
  1034.     /*----------------------------------------------------------------*/
  1035.     /*----------------------------------------------------------------*/
  1036.     /* Code Body                                                      */
  1037.     /*----------------------------------------------------------------*/
  1038.     if (MMI_horizontal_tab_bar_first_displayed_before_pen_down >= 0)
  1039.     {
  1040.         gui_start_timer(WGUI_TAB_BAR_RESTORE_DISPLAY_TIME, wgui_horizontal_tab_bar_restore_offset_timer_hdlr);
  1041.         gui_add_cleanup_hook(wgui_horizontal_tab_bar_abort_restore_offset_timer);
  1042.     }
  1043. }
  1044. /*****************************************************************************
  1045.  * FUNCTION
  1046.  *  wgui_horizontal_tab_bar_translate_pen_event
  1047.  * DESCRIPTION
  1048.  *  
  1049.  * PARAMETERS
  1050.  *  pen_event       [IN]        
  1051.  *  x               [IN]        
  1052.  *  y               [IN]        
  1053.  * RETURNS
  1054.  *  
  1055.  *****************************************************************************/
  1056. BOOL wgui_horizontal_tab_bar_translate_pen_event(mmi_pen_event_type_enum pen_event, S16 x, S16 y)
  1057. {
  1058.     /*----------------------------------------------------------------*/
  1059.     /* Local Variables                                                */
  1060.     /*----------------------------------------------------------------*/
  1061.     BOOL ret;
  1062.     gui_tab_bar_pen_enum tab_event;
  1063.     gui_pen_event_param_struct tab_param;
  1064.     horizontal_tab_bar *tb = &MMI_horizontal_tab_bar;
  1065.     S32 prev_fdisp; /* first displayed item before pen down */
  1066.     S32 prev_focus; /* focused item before pen down */
  1067.     /*----------------------------------------------------------------*/
  1068.     /* Code Body                                                      */
  1069.     /*----------------------------------------------------------------*/
  1070.     prev_fdisp = tb->first_displayed_item;
  1071.     prev_focus = tb->focused_item;
  1072.     ret = gui_horizontal_tab_bar_translate_pen_event(tb, pen_event, x, y, &tab_event, &tab_param);
  1073.     if (ret)
  1074.     {
  1075.         if (pen_event == MMI_PEN_EVENT_DOWN)
  1076.         {
  1077.             gui_cancel_timer(wgui_horizontal_tab_bar_restore_offset_timer_hdlr);
  1078.             if (MMI_horizontal_tab_bar_first_displayed_before_pen_down < 0)
  1079.             {
  1080.                 MMI_horizontal_tab_bar_first_displayed_before_pen_down = prev_fdisp;
  1081.             }
  1082.         }
  1083.         if (tab_event == GUI_TAB_BAR_PEN_NEED_REDRAW)
  1084.         {
  1085.             wgui_show_horizontal_tab_bar_tab_area();
  1086.         }
  1087.         else if (tab_event == GUI_TAB_BAR_PEN_JUMP_TO_I)
  1088.         {
  1089.             if (MMI_horizontal_tab_bar_select_callback)
  1090.             {
  1091.                 MMI_horizontal_tab_bar_first_displayed_on_screen_switched = tb->first_displayed_item;
  1092.                 MMI_horizontal_tab_bar_select_callback(tab_param._u.i);
  1093.                 MMI_horizontal_tab_bar_first_displayed_on_screen_switched = -1;
  1094.             }
  1095.         }
  1096.         if ((pen_event == MMI_PEN_EVENT_ABORT || pen_event == MMI_PEN_EVENT_UP) &&
  1097.             MMI_horizontal_tab_bar.focused_item == prev_focus &&
  1098.             MMI_horizontal_tab_bar.first_displayed_item != MMI_horizontal_tab_bar_first_displayed_before_pen_down)
  1099.         {
  1100.             if (gui_horizontal_tab_bar_is_item_displayed(tb, tb->focused_item))
  1101.             {
  1102.                 MMI_horizontal_tab_bar_first_displayed_before_pen_down = -1;
  1103.             }
  1104.             else
  1105.             {
  1106.                 wgui_horizontal_tab_bar_start_restore_offset_timer();
  1107.             }
  1108.         }
  1109.         return MMI_TRUE;
  1110.     }
  1111.     else
  1112.     {
  1113.         return MMI_FALSE;
  1114.     }
  1115. }
  1116. #endif /* __MMI_TOUCH_SCREEN__ */