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

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_categories_MM.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui_Software
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Main Menu related categories.
  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.  * removed!
  68.  * removed!
  69.  * removed!
  70.  *
  71.  * removed!
  72.  * removed!
  73.  * removed!
  74.  *
  75.  * removed!
  76.  * removed!
  77.  * removed!
  78.  *
  79.  * removed!
  80.  * removed!
  81.  * removed!
  82.  *
  83.  * removed!
  84.  * removed!
  85.  * removed!
  86.  *
  87.  * removed!
  88.  * removed!
  89.  * removed!
  90.  *
  91.  * removed!
  92.  * removed!
  93.  * removed!
  94.  *
  95.  * removed!
  96.  * removed!
  97.  * removed!
  98.  *
  99.  * removed!
  100.  * removed!
  101.  * removed!
  102.  *
  103.  * removed!
  104.  * removed!
  105.  * removed!
  106.  *
  107.  * removed!
  108.  * removed!
  109.  * removed!
  110.  *
  111.  * removed!
  112.  * removed!
  113.  * removed!
  114.  *
  115.  * removed!
  116.  * removed!
  117.  * removed!
  118.  *
  119.  * removed!
  120.  * removed!
  121.  * removed!
  122.  *
  123.  * removed!
  124.  * removed!
  125.  * removed!
  126.  *
  127.  * removed!
  128.  * removed!
  129.  * removed!
  130.  *
  131.  * removed!
  132.  * removed!
  133.  * removed!
  134.  *
  135.  * removed!
  136.  * removed!
  137.  * removed!
  138.  *
  139.  * removed!
  140.  * removed!
  141.  * removed!
  142.  *
  143.  * removed!
  144.  * removed!
  145.  * removed!
  146.  *
  147.  * removed!
  148.  * removed!
  149.  * removed!
  150.  *
  151.  * removed!
  152.  * removed!
  153.  * removed!
  154.  *
  155.  * removed!
  156.  * removed!
  157.  * removed!
  158.  *
  159.  * removed!
  160.  * removed!
  161.  * removed!
  162.  *
  163.  * removed!
  164.  * removed!
  165.  * removed!
  166.  *
  167.  *------------------------------------------------------------------------------
  168.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  169.  *============================================================================
  170.  ****************************************************************************/
  171. #include "MMI_features.h"
  172. #include "stdC.h"
  173. #include "L4Dr1.h"
  174. #include "PixtelDataTypes.h"
  175. #include "DebugInitDef.h"
  176. #include "GlobalDefs.h"
  177. #include "gui_data_types.h"
  178. #include "gui_themes.h"
  179. #include "gui.h"
  180. #ifdef __MMI_UI_TECHNO_STATUS_ICON__
  181. #include "Gui_Setting.h"
  182. #endif 
  183. #include "CustDataProts.h"
  184. #include "CustMenuRes.h"
  185. #include "EventsDef.h"
  186. #include "CustThemesRes.h"
  187. #include "MainMenuDef.h"
  188. #include "MainMenuType.h"
  189. #include "gdi_include.h"
  190. #include "lcd_sw_rnd.h"
  191. #include "wgui.h"
  192. #include "wgui_inputs.h"
  193. #include "wgui_categories.h"
  194. #include "wgui_softkeys.h"
  195. #include "wgui_fixed_menus.h"
  196. #include "wgui_categories_defs.h"
  197. #include "wgui_draw_manager.h"
  198. #include "wgui_categories_MM.h"
  199. #ifdef __MMI_WGUI_MINI_TAB_BAR__
  200. #include "wgui_tab_bars.h"
  201. #endif 
  202. #ifdef __MMI_MATRIX_MAIN_MENU_FULL_BACKGROUND__
  203. #include "Wgui_categories_util.h"
  204. #endif 
  205. #ifdef __MMI_TOUCH_SCREEN__
  206. #include "wgui_touch_screen.h"
  207. #endif 
  208. #include "SATGProts.h"
  209. /************ Global Variables *************/
  210. extern S32 wgui_current_pop_up_description_index;
  211. extern color active_title_txt_border_col;
  212. extern BOOL r2lMMIFlag;
  213. #ifdef __MMI_UI_TITLE_TRANSITION__
  214. extern void set_title_transition(wgui_transition_styles style);
  215. extern void reset_title_transition(void);
  216. #endif /* __MMI_UI_TITLE_TRANSITION__ */ 
  217. #ifdef __MMI_UI_MM_HORIZONTAL_PAGE_STYLE__
  218. extern void register_horizontal_fixed_list_keys(void);
  219. #endif 
  220. extern void standard_animated_matrix_highlight_handler_type2(S32 item_index);
  221. extern void mtk_show_animation_frames(S32 x, S32 y, U8 *image, S32 start_frame);
  222. UI_string_type MMI_bg_string;
  223. PU8 MMI_bg_image;
  224. PU8 MMI_bg_animation;
  225. #if (ENABLE_DIRECT_MAIN_MENU_IMPLEMENTATION)
  226. /* Direct main menu implementation                                */
  227. /* Matrix main menu: Fixed number of items with all items being visible */
  228. #ifdef __MMI_MAINLCD_240X320__
  229. //KP Jerry modify for KP-Style 12-Matrix mainmenu on 2007-3-19 start
  230. #ifdef __MMI_KP_STYLE_MAIN_MENU_MATRIX__
  231. #define MAIN_MENU_NORMAL_IMAGE_CLIP_WIDTH    (80)
  232. #define MAIN_MENU_NORMAL_IMAGE_CLIP_HEIGHT   (80)
  233. #define MAIN_MENU_NORMAL_IMAGE_WIDTH         (80)
  234. #define MAIN_MENU_NORMAL_IMAGE_HEIGHT        (80)
  235. #define MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH    (80)
  236. #define MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT   (80)
  237. #else
  238. #define MAIN_MENU_NORMAL_IMAGE_CLIP_WIDTH    (80)
  239. #define MAIN_MENU_NORMAL_IMAGE_CLIP_HEIGHT   (60)
  240. #define MAIN_MENU_NORMAL_IMAGE_WIDTH         (80)
  241. #define MAIN_MENU_NORMAL_IMAGE_HEIGHT        (60)
  242. #define MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH    (80)
  243. #define MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT   (60)
  244. #endif
  245. //KP Jerry modify for KP-Style 12-Matrix mainmenu on 2007-3-19 end
  246. #else
  247. //jerson modify begin 20070625
  248. #ifdef __MMI_KP_STYLE_MAIN_MENU_MATRIX__
  249. #define MAIN_MENU_NORMAL_IMAGE_CLIP_WIDTH    (58)
  250. #define MAIN_MENU_NORMAL_IMAGE_CLIP_HEIGHT      (55)
  251. #define MAIN_MENU_NORMAL_IMAGE_WIDTH         (58)
  252. #define MAIN_MENU_NORMAL_IMAGE_HEIGHT        (55)
  253. #define MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH    (58)
  254. #define MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT      (55)
  255. #else
  256. #define MAIN_MENU_NORMAL_IMAGE_CLIP_WIDTH    (41)
  257. #define MAIN_MENU_NORMAL_IMAGE_CLIP_HEIGHT      (30)
  258. #define MAIN_MENU_NORMAL_IMAGE_WIDTH         (42)
  259. #define MAIN_MENU_NORMAL_IMAGE_HEIGHT        (31)
  260. #define MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH    (51)
  261. #define MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT      (37)
  262. #endif
  263. //jerson modify end 20070625
  264. #endif
  265. #define MAIN_MENU_N_ROWS                     (3)
  266. #define MAIN_MENU_N_COLUMNS                  (3)
  267. #define MAIN_MENU_MAX_ITEMS                  (MAIN_MENU_N_ROWS*MAIN_MENU_N_COLUMNS)
  268. #define MAIN_MENU_HIGHLIGHT_OFFSET_X            ((MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH>>1)-(MAIN_MENU_NORMAL_IMAGE_WIDTH>>1))
  269. #define MAIN_MENU_HIGHLIGHT_OFFSET_Y            ((MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT>>1)-(MAIN_MENU_NORMAL_IMAGE_HEIGHT>>1))
  270. #define MAIN_MENU_HIGHLIGHTED_GRID_COLOR     {  0,0,0,100      }
  271. #define MAIN_MENU_NORMAL_GRID_COLOR          {  160,160,160,100   }
  272. #define MAIN_MENU_X1                      (0)
  273. #define MAIN_MENU_Y1                      (MMI_TITLE_HEIGHT+1)
  274. #define MAIN_MENU_X2                      (127)
  275. #define MAIN_MENU_Y2                      (MMI_TITLE_HEIGHT+100+1)
  276. #define MAIN_MENU_ITEM_HIGHLIGHTED           0x00000001
  277. #define MAIN_MENU_LOOP                       0x00000002
  278. #define MAIN_MENU_DISPLAY_GRID               0x00000004
  279. #define MAIN_MENU_DISPLAY_ITEM_GRID          0x00000008
  280. extern U16 title_bg_id;
  281. extern icontext_button MMI_softkeys[];
  282. extern void _show_bitmap(S32 x1, S32 y1, bitmap *b);
  283. extern void _get_bitmap(S32 x1, S32 y1, S32 x2, S32 y2, bitmap *b);
  284. extern void (*MMI_matrix_highlight_handler) (S32 index);
  285. U8 matrix_main_menu_highlight_bitmap_data[(MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH) * (MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT) *
  286.                                           GDI_MAINLCD_BIT_PER_PIXEL / 8];
  287. /* structure of matrix menu */
  288. /* Store current main menu type..matrix,list,circular */
  289. S32 MMI_main_menu_type = MATRIX_MENU;
  290. U16 gMainMenuAnimation[MAX_MAIN_MENU_ITEMS];
  291. U16 gMainMenuTitleIcon[MAX_MAIN_MENU_ITEMS];
  292. S32 main_menu_index = -1;
  293. PU8 _wgui_main_menu_items[MAIN_MENU_MAX_ITEMS];
  294. matrix_main_menu _wgui_main_menu;
  295. UI_string_type _wgui_main_menu_item_strings[MAIN_MENU_MAX_ITEMS];
  296. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  297. S32 wgui_matrix_main_menu_frame_counter = 0;
  298. extern matrix_main_menu _wgui_main_menu;
  299. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  300. #ifdef __MMI_MATRIX_MAIN_MENU_FULL_BACKGROUND__
  301. BOOL inMatrixNoTitleFlag = FALSE;
  302. #endif 
  303. #ifdef __MMI_BI_DEGREE_MAIN_MENU_STYLE__
  304. void (*Cat414MatrixExitHandler) (S32 index) = NULL;
  305. #endif 
  306. /* 082806 240x320 matrix Start */
  307. #if defined (__MMI_WALLPAPER_ON_BOTTOM__) || defined (__MMI_KP_STYLE_MAIN_MENU_MATRIX__)  //KP Jerry add "__MMI_KP_STYLE_MAIN_MENU_MATRIX__" for KP-Style 12-Matrix mainmenu on 2007-3-19
  308. static MMI_ID_TYPE mm_bg_ID;
  309. #ifndef __MMI_KP_STYLE_MAIN_MENU_MATRIX__     //KP Jerry add for KP-Style 12-Matrix mainmenu on 2007-3-19
  310. static S8 *mm_bg_filename;
  311. static S32 mm_bg_x, mm_bg_y;
  312. #endif     //KP Jerry add for KP-Style 12-Matrix mainmenu on 2007-3-19
  313. static U8 mm_bg_opacity;
  314. static S32 mm_bg_flags;
  315. #endif /* defined (__MMI_WALLPAPER_ON_BOTTOM__) */ 
  316. /* 082806 240x320 matrix End */
  317. /*****************************************************************************
  318.  * FUNCTION
  319.  *  setup_main_menu
  320.  * DESCRIPTION
  321.  *  set main menu values such as number sof itens, size of image
  322.  * PARAMETERS
  323.  *  m                   [IN]        Menu
  324.  *  x                   [IN]        Start of x position
  325.  *  y                   [IN]        Start of y position
  326.  *  n_items             [IN]        Number of items
  327.  *  list_of_items       [IN]        Images of menus
  328.  * RETURNS
  329.  *  void
  330.  *****************************************************************************/
  331. void setup_main_menu(matrix_main_menu *m, S32 x, S32 y, S32 n_items, PU8 *list_of_items)
  332. {
  333.     /*----------------------------------------------------------------*/
  334.     /* Local Variables                                                */
  335.     /*----------------------------------------------------------------*/
  336.     /*----------------------------------------------------------------*/
  337.     /* Code Body                                                      */
  338.     /*----------------------------------------------------------------*/
  339.     m->x = x;
  340.     m->y = y;
  341.     if (n_items < 0)
  342.     {
  343.         n_items = 0;
  344.     }
  345.     if (n_items > MAIN_MENU_MAX_ITEMS)
  346.     {
  347.         n_items = MAIN_MENU_MAX_ITEMS;
  348.     }
  349.     m->flags = 0;
  350.     m->n_items = n_items;
  351.     m->list_of_items = list_of_items;
  352.     m->highlighted_item = -1;
  353.     m->item_highlighted = UI_dummy_function_s32;
  354.     m->item_unhighlighted = UI_dummy_function_s32;
  355.     m->highlight_area.color_depth = 16;
  356.     m->highlight_area.palette = NULL;
  357.     m->highlight_area.data = matrix_main_menu_highlight_bitmap_data;
  358.     m->highlight_area.xsize = MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH;
  359.     m->highlight_area.ysize = MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT;
  360.     m->highlight_area.row_bytes = m->highlight_area.xsize * 2;
  361. }
  362. /*****************************************************************************
  363.  * FUNCTION
  364.  *  show_main_menu
  365.  * DESCRIPTION
  366.  *  show main menu
  367.  * PARAMETERS
  368.  *  m       [IN]        Menu
  369.  * RETURNS
  370.  *  void
  371.  *****************************************************************************/
  372. void show_main_menu(matrix_main_menu *m)
  373. {
  374.     /*----------------------------------------------------------------*/
  375.     /* Local Variables                                                */
  376.     /*----------------------------------------------------------------*/
  377.     S32 i, row, column, x, y;
  378.     /*----------------------------------------------------------------*/
  379.     /* Code Body                                                      */
  380.     /*----------------------------------------------------------------*/
  381.     row = column = 0;
  382.     gui_reset_clip();
  383.     x = m->x;
  384.     y = m->y;
  385.     for (i = 0; i < m->n_items; i++)
  386.     {
  387.         gui_set_clip(x, y, x + MAIN_MENU_NORMAL_IMAGE_CLIP_WIDTH - 1, y + MAIN_MENU_NORMAL_IMAGE_CLIP_HEIGHT - 1);
  388.         gui_show_image(
  389.             x + DIRECT_MAIN_MENU_FIRST_FRAME_SHIFT_X,
  390.             y + DIRECT_MAIN_MENU_FIRST_FRAME_SHIFT_Y,
  391.             m->list_of_items[i]);
  392.         column++;
  393.         x += MAIN_MENU_NORMAL_IMAGE_WIDTH;
  394.         if (column >= MAIN_MENU_N_COLUMNS)
  395.         {
  396.             column = 0;
  397.             x = m->x;
  398.             row++;
  399.             y += MAIN_MENU_NORMAL_IMAGE_HEIGHT;
  400.             if (row >= MAIN_MENU_N_ROWS)
  401.             {
  402.                 break;
  403.             }
  404.         }
  405.     }
  406.     m->flags &= ~MAIN_MENU_ITEM_HIGHLIGHTED;
  407.     if (m->flags & MAIN_MENU_DISPLAY_GRID)
  408.     {
  409.         color c = MAIN_MENU_NORMAL_GRID_COLOR;
  410.         S32 i, x, y, x1, y1, x2, y2;
  411.         gui_reset_clip();
  412.         x = x1 = m->x;
  413.         y = y1 = m->y;
  414.         x2 = x1 + (MAIN_MENU_NORMAL_IMAGE_WIDTH * MAIN_MENU_N_COLUMNS);
  415.         y2 = y1 + (MAIN_MENU_NORMAL_IMAGE_HEIGHT * MAIN_MENU_N_ROWS);
  416.         for (i = 0; i < 4; i++)
  417.         {
  418.             gui_draw_horizontal_line(x1, x2, y, c);
  419.             gui_draw_vertical_line(y1, y2, x, c);
  420.             x += MAIN_MENU_NORMAL_IMAGE_WIDTH;
  421.             y += MAIN_MENU_NORMAL_IMAGE_HEIGHT;
  422.         }
  423.     }
  424. }
  425. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  426. /*****************************************************************************
  427.  * FUNCTION
  428.  *  update_main_menu_highlight
  429.  * DESCRIPTION
  430.  *  Enlarge the image of highlighted main menu item
  431.  * PARAMETERS
  432.  *  m       [IN]        Menu
  433.  * RETURNS
  434.  *  void
  435.  *****************************************************************************/
  436. void update_main_menu_highlight(matrix_main_menu *m)
  437. {
  438.     /*----------------------------------------------------------------*/
  439.     /* Local Variables                                                */
  440.     /*----------------------------------------------------------------*/
  441.     S32 row, column, x, y, tx, ty;
  442.     /*----------------------------------------------------------------*/
  443.     /* Code Body                                                      */
  444.     /*----------------------------------------------------------------*/
  445.     gui_reset_clip();
  446.     /* Display the screen bitmap grabbed earlier                */
  447.     if (m->flags & MAIN_MENU_ITEM_HIGHLIGHTED)
  448.     {
  449.         _show_bitmap(m->save_x, m->save_y, &m->highlight_area);
  450.     }
  451.     if ((m->highlighted_item < 0) || (m->highlighted_item >= m->n_items))
  452.     {
  453.         m->flags &= ~MAIN_MENU_ITEM_HIGHLIGHTED;
  454.         return;
  455.     }
  456.     /* Calculate (x,y) for the highlight                        */
  457.     row = m->highlighted_item / MAIN_MENU_N_COLUMNS;
  458.     column = m->highlighted_item % MAIN_MENU_N_COLUMNS;
  459.     ty = row * MAIN_MENU_NORMAL_IMAGE_HEIGHT;
  460.     tx = column * MAIN_MENU_NORMAL_IMAGE_WIDTH;
  461.     x = tx - MAIN_MENU_HIGHLIGHT_OFFSET_X;
  462.     y = ty - MAIN_MENU_HIGHLIGHT_OFFSET_Y;
  463.     if (m->flags & MAIN_MENU_DISPLAY_ITEM_GRID)
  464.     {
  465.         x -= 1;
  466.         y -= 1;
  467.     }
  468. #if(DIRECT_MAIN_MENU_BOUNDARY_SPACING)
  469.     if (x < 0)
  470.     {
  471.         x = 0;
  472.     }
  473.     if ((x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH) > (MAIN_MENU_N_COLUMNS * MAIN_MENU_NORMAL_IMAGE_WIDTH))
  474.     {
  475.         x = MAIN_MENU_N_COLUMNS * MAIN_MENU_NORMAL_IMAGE_WIDTH - MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH;
  476.     }
  477.     if (y < 0)
  478.     {
  479.         y = 0;
  480.     }
  481.     if ((y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT) > (MAIN_MENU_N_ROWS * MAIN_MENU_NORMAL_IMAGE_HEIGHT - 1))
  482.     {
  483.         y = MAIN_MENU_N_ROWS * MAIN_MENU_NORMAL_IMAGE_HEIGHT - MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT - 1;
  484.     }
  485. #else /* (DIRECT_MAIN_MENU_BOUNDARY_SPACING) */ 
  486.     if (x < -1)
  487.     {
  488.         x = -1;
  489.     }
  490.     if ((x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH) > (MAIN_MENU_N_COLUMNS * MAIN_MENU_NORMAL_IMAGE_WIDTH + 1))
  491.     {
  492.         x = MAIN_MENU_N_COLUMNS * MAIN_MENU_NORMAL_IMAGE_WIDTH - MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH + 1;
  493.     }
  494.     if (y < -1)
  495.     {
  496.         y = -1;
  497.     }
  498.     if ((y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT) > (MAIN_MENU_N_ROWS * MAIN_MENU_NORMAL_IMAGE_HEIGHT))
  499.     {
  500.         y = MAIN_MENU_N_ROWS * MAIN_MENU_NORMAL_IMAGE_HEIGHT - MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT;
  501.     }
  502. #endif /* (DIRECT_MAIN_MENU_BOUNDARY_SPACING) */ 
  503.     x += m->x;
  504.     y += m->y;
  505.     if (m->flags & MAIN_MENU_DISPLAY_ITEM_GRID)
  506.     {   /* Grab a new screen bitmap for the portion that will be affected */
  507.         _get_bitmap(
  508.             x,
  509.             y,
  510.             x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH,
  511.             y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT,
  512.             &m->highlight_area);
  513.         m->save_x = x;
  514.         m->save_y = y;
  515.         /* Display the highlighted item */
  516.         mtk_show_animation_frames(x, y, m->list_of_items[m->highlighted_item], 1);
  517.     }
  518.     else
  519.     {   /* Grab a new screen bitmap for the portion that will be affected */
  520.         _get_bitmap(
  521.             x,
  522.             y,
  523.             x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH - 1,
  524.             y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT - 1,
  525.             &m->highlight_area);
  526.         m->save_x = x;
  527.         m->save_y = y;
  528.         /* Display the highlighted item */
  529.         mtk_show_animation_frames(x, y, m->list_of_items[m->highlighted_item], 1);
  530.     }
  531.     m->flags |= MAIN_MENU_ITEM_HIGHLIGHTED;
  532.     gdi_layer_blt_previous(MAIN_MENU_X1, MAIN_MENU_Y1 - 1, MAIN_MENU_X2, MAIN_MENU_Y2);
  533. }
  534. /*****************************************************************************
  535.  * FUNCTION
  536.  *  wgui_matrix_main_menu_end_frame
  537.  * DESCRIPTION
  538.  *  show the frames of main menu animation image of high lighted item
  539.  * PARAMETERS
  540.  *  void
  541.  *  matrix_main_menu(?)     [IN]        *m  :- menu
  542.  * RETURNS
  543.  *  void
  544.  *****************************************************************************/
  545. void wgui_matrix_main_menu_end_frame(void)
  546. {
  547.     /*----------------------------------------------------------------*/
  548.     /* Local Variables                                                */
  549.     /*----------------------------------------------------------------*/
  550.     /*----------------------------------------------------------------*/
  551.     /* Code Body                                                      */
  552.     /*----------------------------------------------------------------*/
  553.     if (wgui_matrix_main_menu_frame_counter >= 1)
  554.     {
  555.         update_main_menu_highlight(&_wgui_main_menu);
  556.         wgui_matrix_main_menu_frame_counter = 0;
  557.         gui_start_timer(DIRECT_MAIN_MENU_FRAME_SKIP_RATE, wgui_matrix_main_menu_end_frame);
  558.     }
  559. }
  560. /*****************************************************************************
  561.  * FUNCTION
  562.  *  show_main_menu_highlight
  563.  * DESCRIPTION
  564.  *  show main menu highlihgted image
  565.  * PARAMETERS
  566.  *  m       [IN]        Menu
  567.  * RETURNS
  568.  *  void
  569.  *****************************************************************************/
  570. void show_main_menu_highlight(matrix_main_menu *m)
  571. {
  572.     /*----------------------------------------------------------------*/
  573.     /* Local Variables                                                */
  574.     /*----------------------------------------------------------------*/
  575.     /*----------------------------------------------------------------*/
  576.     /* Code Body                                                      */
  577.     /*----------------------------------------------------------------*/
  578.     if (wgui_matrix_main_menu_frame_counter > 0)
  579.     {
  580.         wgui_matrix_main_menu_frame_counter++;
  581.     }
  582.     else
  583.     {
  584.         wgui_matrix_main_menu_frame_counter = 1;
  585.         gui_start_timer(UI_FRAME_START_TIMEOUT, wgui_matrix_main_menu_end_frame);
  586.     }
  587. }
  588. #else /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  589. /*****************************************************************************
  590.  * FUNCTION
  591.  *  show_main_menu_highlight
  592.  * DESCRIPTION
  593.  *  Enlarge the image of highlighted main menu item
  594.  * PARAMETERS
  595.  *  m       [IN]        Menu
  596.  * RETURNS
  597.  *  void
  598.  *****************************************************************************/
  599. void show_main_menu_highlight(matrix_main_menu *m)
  600. {
  601.     /*----------------------------------------------------------------*/
  602.     /* Local Variables                                                */
  603.     /*----------------------------------------------------------------*/
  604.     S32 row, column, x, y, tx, ty;
  605.     /*----------------------------------------------------------------*/
  606.     /* Code Body                                                      */
  607.     /*----------------------------------------------------------------*/
  608.     gui_reset_clip();
  609.     /* Display the screen bitmap grabbed earlier                */
  610.     if (m->flags & MAIN_MENU_ITEM_HIGHLIGHTED)
  611.     {
  612.         _show_bitmap(m->save_x, m->save_y, &m->highlight_area);
  613.     }
  614.     if ((m->highlighted_item < 0) || (m->highlighted_item >= m->n_items))
  615.     {
  616.         m->flags &= ~MAIN_MENU_ITEM_HIGHLIGHTED;
  617.         return;
  618.     }
  619.     /* Calculate (x,y) for the highlight                        */
  620.     row = m->highlighted_item / MAIN_MENU_N_COLUMNS;
  621.     column = m->highlighted_item % MAIN_MENU_N_COLUMNS;
  622.     ty = row * MAIN_MENU_NORMAL_IMAGE_HEIGHT;
  623.     tx = column * MAIN_MENU_NORMAL_IMAGE_WIDTH;
  624.     x = tx - MAIN_MENU_HIGHLIGHT_OFFSET_X;
  625.     y = ty - MAIN_MENU_HIGHLIGHT_OFFSET_Y;
  626.     if (m->flags & MAIN_MENU_DISPLAY_ITEM_GRID)
  627.     {
  628.         x -= 1;
  629.         y -= 1;
  630.     }
  631.     if (x < 0)
  632.     {
  633.         x = 0;
  634.     }
  635.     if (y < 0)
  636.     {
  637.         y = 0;
  638.     }
  639.     if ((x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH) > (MAIN_MENU_N_COLUMNS * MAIN_MENU_NORMAL_IMAGE_WIDTH))
  640.     {
  641.         x = MAIN_MENU_N_COLUMNS * MAIN_MENU_NORMAL_IMAGE_WIDTH - MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH;
  642.     }
  643.     if ((y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT) > (MAIN_MENU_N_ROWS * MAIN_MENU_NORMAL_IMAGE_HEIGHT))
  644.     {
  645.         y = MAIN_MENU_N_ROWS * MAIN_MENU_NORMAL_IMAGE_HEIGHT - MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT;
  646.     }
  647.     x += m->x;
  648.     y += m->y;
  649.     if (m->flags & MAIN_MENU_DISPLAY_ITEM_GRID)
  650.     {   /* Grab a new screen bitmap for the portion that will be affected */
  651.         _get_bitmap(
  652.             x,
  653.             y,
  654.             x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH,
  655.             y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT,
  656.             &m->highlight_area);
  657.         m->save_x = x;
  658.         m->save_y = y;
  659.         /* Display the highlighted item                          */
  660.         mtk_show_animation_frames(x, y, m->list_of_items[m->highlighted_item], 1);
  661.     }
  662.     else
  663.     {   /* Grab a new screen bitmap for the portion that will be affected */
  664.         _get_bitmap(
  665.             x,
  666.             y,
  667.             x + MAIN_MENU_HIGHLIGHTED_IMAGE_WIDTH - 1,
  668.             y + MAIN_MENU_HIGHLIGHTED_IMAGE_HEIGHT - 1,
  669.             &m->highlight_area);
  670.         m->save_x = x;
  671.         m->save_y = y;
  672.         /* Display the highlighted item                          */
  673.         mtk_show_animation_frames(x, y, m->list_of_items[m->highlighted_item], 1);
  674.     }
  675.     m->flags |= MAIN_MENU_ITEM_HIGHLIGHTED;
  676. }
  677. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  678. /*****************************************************************************
  679.  * FUNCTION
  680.  *  main_menu_previous_row
  681.  * DESCRIPTION
  682.  *  move to previous row of main menu item
  683.  * PARAMETERS
  684.  *  m       [IN]        Menu
  685.  * RETURNS
  686.  *  void
  687.  *****************************************************************************/
  688. void main_menu_previous_row(matrix_main_menu *m)
  689. {
  690.     /*----------------------------------------------------------------*/
  691.     /* Local Variables                                                */
  692.     /*----------------------------------------------------------------*/
  693.     S32 row, column;
  694.     S32 old_highlighted_item = m->highlighted_item;
  695.     /*----------------------------------------------------------------*/
  696.     /* Code Body                                                      */
  697.     /*----------------------------------------------------------------*/
  698.     row = old_highlighted_item / MAIN_MENU_N_COLUMNS;
  699.     column = old_highlighted_item % MAIN_MENU_N_COLUMNS;
  700.     if (m->flags & MAIN_MENU_LOOP)
  701.     {
  702.         if (row <= 0)
  703.         {
  704.             row = MAIN_MENU_N_ROWS - 1;
  705.         }
  706.         else
  707.         {
  708.             row--;
  709.         }
  710.     #ifdef __MMI_MAIN_MENU_CYCLE__
  711.         if (row == (MAIN_MENU_N_ROWS - 1))
  712.             if (column > 0)
  713.             {
  714.                 column--;
  715.             }
  716.             else
  717.             {
  718.                 column = MAIN_MENU_N_COLUMNS - 1;
  719.             }
  720.     #endif /* __MMI_MAIN_MENU_CYCLE__ */ 
  721.     }
  722.     else
  723.     {
  724.         if (row > 0)
  725.         {
  726.             row--;
  727.         }
  728.     }
  729.     m->highlighted_item = row * MAIN_MENU_N_COLUMNS + column;
  730.     if (m->highlighted_item > (m->n_items - 1))
  731.     {
  732.         m->highlighted_item = m->n_items - 1;
  733.     }
  734.     if (old_highlighted_item != m->highlighted_item)
  735.     {
  736.         m->item_unhighlighted(old_highlighted_item);
  737.         m->item_highlighted(m->highlighted_item);
  738.         gui_hide_animations();
  739.         show_main_menu_highlight(m);
  740.     }
  741. }
  742. /*****************************************************************************
  743.  * FUNCTION
  744.  *  main_menu_next_row
  745.  * DESCRIPTION
  746.  *  move to next  row of main menu item
  747.  * PARAMETERS
  748.  *  m       [IN]        Menu
  749.  * RETURNS
  750.  *  void
  751.  *****************************************************************************/
  752. void main_menu_next_row(matrix_main_menu *m)
  753. {
  754.     /*----------------------------------------------------------------*/
  755.     /* Local Variables                                                */
  756.     /*----------------------------------------------------------------*/
  757.     S32 row, column;
  758.     S32 old_highlighted_item = m->highlighted_item;
  759.     /*----------------------------------------------------------------*/
  760.     /* Code Body                                                      */
  761.     /*----------------------------------------------------------------*/
  762.     row = old_highlighted_item / MAIN_MENU_N_COLUMNS;
  763.     column = old_highlighted_item % MAIN_MENU_N_COLUMNS;
  764.     if (m->flags & MAIN_MENU_LOOP)
  765.     {
  766.         if (row >= (MAIN_MENU_N_ROWS - 1))
  767.         {
  768.             row = 0;
  769.         }
  770.         else
  771.         {
  772.             row++;
  773.         }
  774.     #ifdef __MMI_MAIN_MENU_CYCLE__
  775.         if (row == 0)
  776.         {
  777.             column = (column + 1) % MAIN_MENU_N_COLUMNS;
  778.         }
  779.     #endif /* __MMI_MAIN_MENU_CYCLE__ */ 
  780.     }
  781.     else
  782.     {
  783.         if (row < (MAIN_MENU_N_ROWS - 1))
  784.         {
  785.             row++;
  786.         }
  787.     }
  788.     m->highlighted_item = row * MAIN_MENU_N_COLUMNS + column;
  789.     if (m->highlighted_item > (m->n_items - 1))
  790.     {
  791.         m->highlighted_item = m->n_items - 1;
  792.     }
  793.     if (old_highlighted_item != m->highlighted_item)
  794.     {
  795.         m->item_unhighlighted(old_highlighted_item);
  796.         m->item_highlighted(m->highlighted_item);
  797.         gui_hide_animations();
  798.         show_main_menu_highlight(m);
  799.     }
  800. }
  801. /*****************************************************************************
  802.  * FUNCTION
  803.  *  main_menu_previous_column
  804.  * DESCRIPTION
  805.  *  move to previous column of main menu item
  806.  * PARAMETERS
  807.  *  m       [IN]        Menu
  808.  * RETURNS
  809.  *  void
  810.  *****************************************************************************/
  811. void main_menu_previous_column(matrix_main_menu *m)
  812. {
  813.     /*----------------------------------------------------------------*/
  814.     /* Local Variables                                                */
  815.     /*----------------------------------------------------------------*/
  816.     S32 row, column;
  817.     S32 old_highlighted_item = m->highlighted_item;
  818.     /*----------------------------------------------------------------*/
  819.     /* Code Body                                                      */
  820.     /*----------------------------------------------------------------*/
  821.     row = old_highlighted_item / MAIN_MENU_N_COLUMNS;
  822.     column = old_highlighted_item % MAIN_MENU_N_COLUMNS;
  823.     if (m->flags & MAIN_MENU_LOOP)
  824.     {
  825.         if (column <= 0)
  826.         {
  827.             column = MAIN_MENU_N_COLUMNS - 1;
  828.             if (row <= 0)
  829.             {
  830.                 row = MAIN_MENU_N_ROWS - 1;
  831.             }
  832.             else
  833.             {
  834.                 row--;
  835.             }
  836.         }
  837.         else
  838.         {
  839.             column--;
  840.         }
  841.     }
  842.     else
  843.     {
  844.         if (column > 0)
  845.         {
  846.             column--;
  847.         }
  848.     }
  849.     m->highlighted_item = row * MAIN_MENU_N_COLUMNS + column;
  850.     if (m->highlighted_item > (m->n_items - 1))
  851.     {
  852.         m->highlighted_item = m->n_items - 1;
  853.     }
  854.     if (old_highlighted_item != m->highlighted_item)
  855.     {
  856.         m->item_unhighlighted(old_highlighted_item);
  857.         m->item_highlighted(m->highlighted_item);
  858.         gui_hide_animations();
  859.         show_main_menu_highlight(m);
  860.     }
  861. }
  862. /*****************************************************************************
  863.  * FUNCTION
  864.  *  main_menu_next_column
  865.  * DESCRIPTION
  866.  *  move to next  column of main menu item
  867.  * PARAMETERS
  868.  *  m       [IN]        Menu
  869.  * RETURNS
  870.  *  void
  871.  *****************************************************************************/
  872. void main_menu_next_column(matrix_main_menu *m)
  873. {
  874.     /*----------------------------------------------------------------*/
  875.     /* Local Variables                                                */
  876.     /*----------------------------------------------------------------*/
  877.     S32 row, column;
  878.     S32 old_highlighted_item = m->highlighted_item;
  879.     /*----------------------------------------------------------------*/
  880.     /* Code Body                                                      */
  881.     /*----------------------------------------------------------------*/
  882.     row = old_highlighted_item / MAIN_MENU_N_COLUMNS;
  883.     column = old_highlighted_item % MAIN_MENU_N_COLUMNS;
  884.     if (m->flags & MAIN_MENU_LOOP)
  885.     {
  886.         if (column >= (MAIN_MENU_N_COLUMNS - 1))
  887.         {
  888.             column = 0;
  889.             if (row >= (MAIN_MENU_N_ROWS - 1))
  890.             {
  891.                 row = 0;
  892.             }
  893.             else
  894.             {
  895.                 row++;
  896.             }
  897.         }
  898.         else
  899.         {
  900.             column++;
  901.         }
  902.     }
  903.     else
  904.     {
  905.         if (column < (MAIN_MENU_N_COLUMNS - 1))
  906.         {
  907.             column++;
  908.         }
  909.     }
  910.     m->highlighted_item = row * MAIN_MENU_N_COLUMNS + column;
  911.     if (m->highlighted_item > (m->n_items - 1))
  912.     {
  913.         m->highlighted_item = m->n_items - 1;
  914.     }
  915.     if (old_highlighted_item != m->highlighted_item)
  916.     {
  917.         m->item_unhighlighted(old_highlighted_item);
  918.         m->item_highlighted(m->highlighted_item);
  919.         gui_hide_animations();
  920.         show_main_menu_highlight(m);
  921.     }
  922. }
  923. /*****************************************************************************
  924.  * FUNCTION
  925.  *  main_menu_highlight_item
  926.  * DESCRIPTION
  927.  *  handle main menu highlighted item
  928.  * PARAMETERS
  929.  *  m           [IN]        Index of highlighted item
  930.  *  index       [IN]        Index of highlighted item
  931.  *  menu(?)     [IN]        Index of highlighted item
  932.  * RETURNS
  933.  *  void
  934.  *****************************************************************************/
  935. void main_menu_highlight_item(matrix_main_menu *m, S32 index)
  936. {
  937.     /*----------------------------------------------------------------*/
  938.     /* Local Variables                                                */
  939.     /*----------------------------------------------------------------*/
  940.     S32 old_highlighted_item;
  941.     /*----------------------------------------------------------------*/
  942.     /* Code Body                                                      */
  943.     /*----------------------------------------------------------------*/
  944.     if ((index < 0) || (index >= m->n_items))
  945.     {
  946.         return;
  947.     }
  948.     if (index == m->highlighted_item)
  949.     {
  950.         return;
  951.     }
  952.     old_highlighted_item = m->highlighted_item;
  953.     m->highlighted_item = index;
  954.     m->item_unhighlighted(old_highlighted_item);
  955.     m->item_highlighted(m->highlighted_item);
  956.     gui_hide_animations();
  957.     show_main_menu_highlight(m);
  958. }
  959. /*****************************************************************************
  960.  * FUNCTION
  961.  *  refresh_main_menu
  962.  * DESCRIPTION
  963.  *  refresh main menu
  964.  * PARAMETERS
  965.  *  m       [IN]        Menu
  966.  * RETURNS
  967.  *  void
  968.  *****************************************************************************/
  969. void refresh_main_menu(matrix_main_menu *m)
  970. {
  971.     /*----------------------------------------------------------------*/
  972.     /* Local Variables                                                */
  973.     /*----------------------------------------------------------------*/
  974.     /*----------------------------------------------------------------*/
  975.     /* Code Body                                                      */
  976.     /*----------------------------------------------------------------*/
  977.     gui_hide_animations();
  978.     show_main_menu(m);
  979.     show_main_menu_highlight(m);
  980. }
  981. /* Main menu wrappers   */
  982. /*****************************************************************************
  983.  * FUNCTION
  984.  *  wgui_main_menu_previous_row
  985.  * DESCRIPTION
  986.  *  move to main enu previous row
  987.  * PARAMETERS
  988.  *  void
  989.  * RETURNS
  990.  *  void
  991.  *****************************************************************************/
  992. void wgui_main_menu_previous_row(void)
  993. {
  994.     /*----------------------------------------------------------------*/
  995.     /* Local Variables                                                */
  996.     /*----------------------------------------------------------------*/
  997.     /*----------------------------------------------------------------*/
  998.     /* Code Body                                                      */
  999.     /*----------------------------------------------------------------*/
  1000.     main_menu_previous_row(&_wgui_main_menu);
  1001. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1002. #else /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1003.     gdi_layer_blt_previous(MAIN_MENU_X1, MAIN_MENU_Y1, MAIN_MENU_X2, MAIN_MENU_Y2);
  1004. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1005. }
  1006. /*****************************************************************************
  1007.  * FUNCTION
  1008.  *  wgui_main_menu_next_row
  1009.  * DESCRIPTION
  1010.  *  move to main menu next row
  1011.  * PARAMETERS
  1012.  *  void
  1013.  * RETURNS
  1014.  *  void
  1015.  *****************************************************************************/
  1016. void wgui_main_menu_next_row(void)
  1017. {
  1018.     /*----------------------------------------------------------------*/
  1019.     /* Local Variables                                                */
  1020.     /*----------------------------------------------------------------*/
  1021.     /*----------------------------------------------------------------*/
  1022.     /* Code Body                                                      */
  1023.     /*----------------------------------------------------------------*/
  1024.     main_menu_next_row(&_wgui_main_menu);
  1025. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1026. #else /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1027.     gdi_layer_blt_previous(MAIN_MENU_X1, MAIN_MENU_Y1, MAIN_MENU_X2, MAIN_MENU_Y2);
  1028. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1029. }
  1030. /*****************************************************************************
  1031.  * FUNCTION
  1032.  *  wgui_main_menu_previous_column
  1033.  * DESCRIPTION
  1034.  *  move to main menu previous column
  1035.  * PARAMETERS
  1036.  *  void
  1037.  * RETURNS
  1038.  *  void
  1039.  *****************************************************************************/
  1040. void wgui_main_menu_previous_column(void)
  1041. {
  1042.     /*----------------------------------------------------------------*/
  1043.     /* Local Variables                                                */
  1044.     /*----------------------------------------------------------------*/
  1045.     /*----------------------------------------------------------------*/
  1046.     /* Code Body                                                      */
  1047.     /*----------------------------------------------------------------*/
  1048.     main_menu_previous_column(&_wgui_main_menu);
  1049. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1050. #else /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1051.     gdi_layer_blt_previous(MAIN_MENU_X1, MAIN_MENU_Y1, MAIN_MENU_X2, MAIN_MENU_Y2);
  1052. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1053. }
  1054. /*****************************************************************************
  1055.  * FUNCTION
  1056.  *  wgui_main_menu_next_column
  1057.  * DESCRIPTION
  1058.  *  move to main menu next column
  1059.  * PARAMETERS
  1060.  *  void
  1061.  * RETURNS
  1062.  *  void
  1063.  *****************************************************************************/
  1064. void wgui_main_menu_next_column(void)
  1065. {
  1066.     /*----------------------------------------------------------------*/
  1067.     /* Local Variables                                                */
  1068.     /*----------------------------------------------------------------*/
  1069.     /*----------------------------------------------------------------*/
  1070.     /* Code Body                                                      */
  1071.     /*----------------------------------------------------------------*/
  1072.     main_menu_next_column(&_wgui_main_menu);
  1073. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1074. #else /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1075.     gdi_layer_blt_previous(MAIN_MENU_X1, MAIN_MENU_Y1, MAIN_MENU_X2, MAIN_MENU_Y2);
  1076. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1077. }
  1078. /*****************************************************************************
  1079.  * FUNCTION
  1080.  *  wgui_main_menu_goto_item
  1081.  * DESCRIPTION
  1082.  *  highlight particular menu item
  1083.  * PARAMETERS
  1084.  *  index       [IN]        
  1085.  * RETURNS
  1086.  *  void
  1087.  *****************************************************************************/
  1088. void wgui_main_menu_goto_item(S32 index)
  1089. {
  1090.     /*----------------------------------------------------------------*/
  1091.     /* Local Variables                                                */
  1092.     /*----------------------------------------------------------------*/
  1093.     /*----------------------------------------------------------------*/
  1094.     /* Code Body                                                      */
  1095.     /*----------------------------------------------------------------*/
  1096.     main_menu_highlight_item(&_wgui_main_menu, index);
  1097. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1098. #else /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1099.     gdi_layer_blt_previous(MAIN_MENU_X1, MAIN_MENU_Y1, MAIN_MENU_X2, MAIN_MENU_Y2);
  1100. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1101. }
  1102. /*****************************************************************************
  1103.  * FUNCTION
  1104.  *  wgui_main_menu_key_handler
  1105.  * DESCRIPTION
  1106.  *  set the key handlers of main menu
  1107.  * PARAMETERS
  1108.  *  vkey_code       [IN]        Key code
  1109.  *  key_state       [IN]        Key state
  1110.  * RETURNS
  1111.  *  void
  1112.  *****************************************************************************/
  1113. void wgui_main_menu_key_handler(S32 vkey_code, S32 key_state)
  1114. {
  1115. #if(MMI_BUILD_TYPE == BUILD_TYPE_X86WIN32)
  1116.     /*----------------------------------------------------------------*/
  1117.     /* Local Variables                                                */
  1118.     /*----------------------------------------------------------------*/
  1119.     /*----------------------------------------------------------------*/
  1120.     /* Code Body                                                      */
  1121.     /*----------------------------------------------------------------*/
  1122.     if (key_state)
  1123.     {
  1124.         switch (vkey_code)
  1125.         {
  1126.             case 37:
  1127.                 wgui_main_menu_previous_column();
  1128.                 break;
  1129.             case 39:
  1130.                 wgui_main_menu_next_column();
  1131.                 break;
  1132.             case 38:
  1133.                 wgui_main_menu_previous_row();
  1134.                 break;
  1135.             case 40:
  1136.                 wgui_main_menu_next_row();
  1137.                 break;
  1138.         }
  1139.     }
  1140. #else /* (MMI_BUILD_TYPE == BUILD_TYPE_X86WIN32) */ 
  1141.     UI_UNUSED_PARAMETER(vkey_code);
  1142.     UI_UNUSED_PARAMETER(key_state);
  1143. #endif /* (MMI_BUILD_TYPE == BUILD_TYPE_X86WIN32) */ 
  1144. }
  1145. /*****************************************************************************
  1146.  * FUNCTION
  1147.  *  wgui_register_main_menu_keys
  1148.  * DESCRIPTION
  1149.  *  register main menu keys handlers
  1150.  * PARAMETERS
  1151.  *  void
  1152.  * RETURNS
  1153.  *  void
  1154.  *****************************************************************************/
  1155. void wgui_register_main_menu_keys(void)
  1156. {
  1157.     /*----------------------------------------------------------------*/
  1158.     /* Local Variables                                                */
  1159.     /*----------------------------------------------------------------*/
  1160.     /*----------------------------------------------------------------*/
  1161.     /* Code Body                                                      */
  1162.     /*----------------------------------------------------------------*/
  1163.     SetKeyHandler(wgui_main_menu_previous_row, KEY_UP_ARROW, KEY_EVENT_DOWN);
  1164.     SetKeyHandler(wgui_main_menu_next_row, KEY_DOWN_ARROW, KEY_EVENT_DOWN);
  1165.     SetKeyHandler(wgui_main_menu_previous_column, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1166.     SetKeyHandler(wgui_main_menu_next_column, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1167.     SetKeyHandler(wgui_main_menu_previous_column, KEY_VOL_UP, KEY_EVENT_DOWN);
  1168.     SetKeyHandler(wgui_main_menu_next_column, KEY_VOL_DOWN, KEY_EVENT_DOWN);
  1169.     register_keyboard_key_handler(wgui_main_menu_key_handler);
  1170. }
  1171. /*****************************************************************************
  1172.  * FUNCTION
  1173.  *  wgui_clear_main_menu_keys
  1174.  * DESCRIPTION
  1175.  *  clear key handlers of main menu
  1176.  * PARAMETERS
  1177.  *  void
  1178.  * RETURNS
  1179.  *  void
  1180.  *****************************************************************************/
  1181. void wgui_clear_main_menu_keys(void)
  1182. {
  1183.     /*----------------------------------------------------------------*/
  1184.     /* Local Variables                                                */
  1185.     /*----------------------------------------------------------------*/
  1186.     /*----------------------------------------------------------------*/
  1187.     /* Code Body                                                      */
  1188.     /*----------------------------------------------------------------*/
  1189.     ClearKeyHandler(KEY_UP_ARROW, KEY_EVENT_DOWN);
  1190.     ClearKeyHandler(KEY_DOWN_ARROW, KEY_EVENT_DOWN);
  1191.     ClearKeyHandler(KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1192.     ClearKeyHandler(KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1193. }
  1194. /*****************************************************************************
  1195.  * FUNCTION
  1196.  *  wgui_main_menu_highlight_handler
  1197.  * DESCRIPTION
  1198.  *  main menu highlight handler
  1199.  * PARAMETERS
  1200.  *  index       [IN]        
  1201.  * RETURNS
  1202.  *  void
  1203.  *****************************************************************************/
  1204. void wgui_main_menu_highlight_handler(S32 index)
  1205. {
  1206.     /*----------------------------------------------------------------*/
  1207.     /* Local Variables                                                */
  1208.     /*----------------------------------------------------------------*/
  1209.     /*----------------------------------------------------------------*/
  1210.     /* Code Body                                                      */
  1211.     /*----------------------------------------------------------------*/
  1212.     MMI_menu_shortcut_number = index + 1;
  1213.     if (index >= 0 && index <= (_wgui_main_menu.n_items))
  1214.     {
  1215.         MMI_highlighted_item_text = _wgui_main_menu_item_strings[index];
  1216.         MMI_title_string = MMI_highlighted_item_text;
  1217.     }
  1218. #if(!DISABLE_MAIN_MENU_HIGHLIGHT_TITLE_UPDATE)
  1219.     draw_title();
  1220. #endif 
  1221.     MMI_matrix_highlight_handler(index);
  1222. }
  1223. /*****************************************************************************
  1224.  * FUNCTION
  1225.  *  wgui_register_main_menu_shortcut_handler
  1226.  * DESCRIPTION
  1227.  *  main menu shorcut  handler
  1228.  * PARAMETERS
  1229.  *  void
  1230.  * RETURNS
  1231.  *  void
  1232.  *****************************************************************************/
  1233. void wgui_register_main_menu_shortcut_handler(void)
  1234. {
  1235.     /*----------------------------------------------------------------*/
  1236.     /* Local Variables                                                */
  1237.     /*----------------------------------------------------------------*/
  1238.     /*----------------------------------------------------------------*/
  1239.     /* Code Body                                                      */
  1240.     /*----------------------------------------------------------------*/
  1241.     register_menu_shortcut_keys();
  1242.     register_menu_shortcut_handler(wgui_main_menu_goto_item);
  1243. }
  1244. /*****************************************************************************
  1245.  * FUNCTION
  1246.  *  wgui_setup_main_menu
  1247.  * DESCRIPTION
  1248.  *  Create main menu
  1249.  * PARAMETERS
  1250.  *  n_items                 [IN]        Number of items
  1251.  *  item_list               [IN]        Item list
  1252.  *  image_list              [IN]        Image list
  1253.  *  highlighted_item        [IN]        Highlighted item
  1254.  * RETURNS
  1255.  *  void
  1256.  *****************************************************************************/
  1257. void wgui_setup_main_menu(S32 n_items, U16 *item_list, U16 *image_list, S32 highlighted_item)
  1258. {
  1259.     /*----------------------------------------------------------------*/
  1260.     /* Local Variables                                                */
  1261.     /*----------------------------------------------------------------*/
  1262.     S32 i;
  1263.     /*----------------------------------------------------------------*/
  1264.     /* Code Body                                                      */
  1265.     /*----------------------------------------------------------------*/
  1266.     for (i = 0; (i < n_items) && (i < MAIN_MENU_MAX_ITEMS); i++)
  1267.     {
  1268.         _wgui_main_menu_items[i] = (PU8) GetImage(image_list[i]);
  1269.         _wgui_main_menu_item_strings[i] = (UI_string_type) GetString(item_list[i]);
  1270.     }
  1271. #ifdef __MMI_MERGE_SAT_TO_MAINMENU__
  1272. #ifndef WAP_SUPPORT
  1273.     if (IsSATPresent())
  1274.     {
  1275.         _wgui_main_menu_item_strings[7] = (UI_string_type) GetSATMainMenuAlphaID();
  1276.     }
  1277. #endif /* WAP_SUPPORT */ 
  1278. #endif /* __MMI_MERGE_SAT_TO_MAINMENU__ */ 
  1279.     setup_main_menu(&_wgui_main_menu, 1, (MMI_title_y + MMI_title_height) + 1, n_items, _wgui_main_menu_items);
  1280.     _wgui_main_menu.flags |= MAIN_MENU_LOOP;
  1281.     _wgui_main_menu.highlighted_item = highlighted_item;
  1282.     _wgui_main_menu.item_highlighted = wgui_main_menu_highlight_handler;
  1283.     wgui_main_menu_highlight_handler(highlighted_item);
  1284. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1285.     wgui_matrix_main_menu_frame_counter = 0;
  1286. #endif 
  1287. }
  1288. /*****************************************************************************
  1289.  * FUNCTION
  1290.  *  wgui_redraw_main_menu
  1291.  * DESCRIPTION
  1292.  *  redraw main menu
  1293.  * PARAMETERS
  1294.  *  void
  1295.  * RETURNS
  1296.  *  void
  1297.  *****************************************************************************/
  1298. void wgui_redraw_main_menu(void)
  1299. {
  1300.     /*----------------------------------------------------------------*/
  1301.     /* Local Variables                                                */
  1302.     /*----------------------------------------------------------------*/
  1303.     /*----------------------------------------------------------------*/
  1304.     /* Code Body                                                      */
  1305.     /*----------------------------------------------------------------*/
  1306.     refresh_main_menu(&_wgui_main_menu);
  1307. }
  1308. /*****************************************************************************
  1309.  * FUNCTION
  1310.  *  set_matrix_main_menu_category_history
  1311.  * DESCRIPTION
  1312.  *  set main menu matirx history
  1313.  * PARAMETERS
  1314.  *  history_ID          [IN]        
  1315.  *  history_buffer      [IN]        
  1316.  * RETURNS
  1317.  *  void
  1318.  *****************************************************************************/
  1319. U8 set_matrix_main_menu_category_history(U16 history_ID, U8 *history_buffer)
  1320. {
  1321.     /*----------------------------------------------------------------*/
  1322.     /* Local Variables                                                */
  1323.     /*----------------------------------------------------------------*/
  1324.     /*----------------------------------------------------------------*/
  1325.     /* Code Body                                                      */
  1326.     /*----------------------------------------------------------------*/
  1327.     if (history_buffer != NULL)
  1328.     {
  1329.         matrix_main_menu_category_history *h = (matrix_main_menu_category_history*) history_buffer;
  1330.         if (history_valid(h->history_ID, history_ID))
  1331.         {
  1332.             _wgui_main_menu.highlighted_item = h->highlighted_item;
  1333.             _wgui_main_menu.flags = h->flags;
  1334.             return (1);
  1335.         }
  1336.     }
  1337.     return (0);
  1338. }
  1339. /*****************************************************************************
  1340.  * FUNCTION
  1341.  *  get_matrix_main_menu_category_history
  1342.  * DESCRIPTION
  1343.  *  get main menu matirx history
  1344.  * PARAMETERS
  1345.  *  history_ID          [IN]        
  1346.  *  history_buffer      [IN]        
  1347.  * RETURNS
  1348.  *  void
  1349.  *****************************************************************************/
  1350. void get_matrix_main_menu_category_history(U16 history_ID, U8 *history_buffer)
  1351. {
  1352.     /*----------------------------------------------------------------*/
  1353.     /* Local Variables                                                */
  1354.     /*----------------------------------------------------------------*/
  1355.     /*----------------------------------------------------------------*/
  1356.     /* Code Body                                                      */
  1357.     /*----------------------------------------------------------------*/
  1358.     if (history_buffer != NULL)
  1359.     {
  1360.         U16 hID = (U16) (history_ID | 0x8000);
  1361.         matrix_main_menu_category_history *h = (matrix_main_menu_category_history*) history_buffer;
  1362.         h->history_ID = hID;
  1363.         h->highlighted_item = (S16) _wgui_main_menu.highlighted_item;
  1364.         h->flags = _wgui_main_menu.flags;
  1365.     }
  1366. }
  1367. /*****************************************************************************
  1368.  * FUNCTION
  1369.  *  wgui_close_main_menu
  1370.  * DESCRIPTION
  1371.  *  close main menu
  1372.  * PARAMETERS
  1373.  *  void
  1374.  * RETURNS
  1375.  *  void
  1376.  *****************************************************************************/
  1377. void wgui_close_main_menu(void)
  1378. {
  1379.     /*----------------------------------------------------------------*/
  1380.     /* Local Variables                                                */
  1381.     /*----------------------------------------------------------------*/
  1382.     /*----------------------------------------------------------------*/
  1383.     /* Code Body                                                      */
  1384.     /*----------------------------------------------------------------*/
  1385.     wgui_clear_main_menu_keys();
  1386. #if((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING))
  1387.     gui_cancel_timer(wgui_matrix_main_menu_end_frame);
  1388.     wgui_matrix_main_menu_frame_counter = 0;
  1389. #endif /* ((UI_ENABLE_FRAME_SKIPPING) && (ENABLE_DIRECT_MAIN_MENU_FRAME_SKIPPING)) */ 
  1390. }
  1391. #endif /* (ENABLE_DIRECT_MAIN_MENU_IMPLEMENTATION) */ 
  1392. /* For 3D circular main menu */
  1393. extern gdi_handle animation_handle;
  1394. #ifdef __MMI_UI_TECHNO_STATUS_ICON__
  1395. extern void arrange_status_icons();
  1396. extern void show_status_icons();
  1397. #endif /* __MMI_UI_TECHNO_STATUS_ICON__ */ 
  1398. #if((ENABLE_CIRCULAR_3D_MENU) || (ENABLE_ROTATE_MENU))
  1399. extern void stop_rotate_circular_menu(void);
  1400. #endif 
  1401. /*****************************************************************************
  1402.  * FUNCTION
  1403.  *  set_circular_menu_category_history
  1404.  * DESCRIPTION
  1405.  *  set main menu matirx history
  1406.  * PARAMETERS
  1407.  *  history_ID          [IN]        
  1408.  *  history_buffer      [IN]        
  1409.  * RETURNS
  1410.  *  void
  1411.  *****************************************************************************/
  1412. U8 set_circular_menu_category_history(U16 history_ID, U8 *history_buffer)
  1413. {
  1414.     /*----------------------------------------------------------------*/
  1415.     /* Local Variables                                                */
  1416.     /*----------------------------------------------------------------*/
  1417.     /*----------------------------------------------------------------*/
  1418.     /* Code Body                                                      */
  1419.     /*----------------------------------------------------------------*/
  1420.     if (history_buffer != NULL)
  1421.     {
  1422.         circular_menu_category_history *h = (circular_menu_category_history*) history_buffer;
  1423.         if (history_valid(h->history_ID, history_ID))
  1424.         {
  1425.             wgui_CM3D_menu.highlighted_item = h->highlighted_item;
  1426.             wgui_CM3D_menu.flags = h->flags;
  1427.             return (1);
  1428.         }
  1429.     }
  1430.     return (0);
  1431. }
  1432. /*****************************************************************************
  1433.  * FUNCTION
  1434.  *  get_circular_menu_category_history
  1435.  * DESCRIPTION
  1436.  *  get main menu matirx history
  1437.  * PARAMETERS
  1438.  *  history_ID          [IN]        
  1439.  *  history_buffer      [IN]        
  1440.  * RETURNS
  1441.  *  void
  1442.  *****************************************************************************/
  1443. void get_circular_menu_category_history(U16 history_ID, U8 *history_buffer)
  1444. {
  1445.     /*----------------------------------------------------------------*/
  1446.     /* Local Variables                                                */
  1447.     /*----------------------------------------------------------------*/
  1448.     /*----------------------------------------------------------------*/
  1449.     /* Code Body                                                      */
  1450.     /*----------------------------------------------------------------*/
  1451.     if (history_buffer != NULL)
  1452.     {
  1453.         U16 hID = (U16) (history_ID | 0x8000);
  1454.         circular_menu_category_history *h = (circular_menu_category_history*) history_buffer;
  1455.         h->history_ID = hID;
  1456.         h->highlighted_item = (S16) wgui_CM3D_menu.highlighted_item;
  1457.         h->flags = wgui_CM3D_menu.flags;
  1458.     }
  1459. }
  1460. /*****************************************************************************
  1461.  * FUNCTION
  1462.  *  draw_bg_animation
  1463.  * DESCRIPTION
  1464.  *  Displays the background image for new mainmenu category
  1465.  * PARAMETERS
  1466.  *  void
  1467.  * RETURNS
  1468.  *  void
  1469.  *****************************************************************************/
  1470. void draw_bg_animation(void)
  1471. {
  1472.     /*----------------------------------------------------------------*/
  1473.     /* Local Variables                                                */
  1474.     /*----------------------------------------------------------------*/
  1475.     S32 iw, ih;
  1476.     /*----------------------------------------------------------------*/
  1477.     /* Code Body                                                      */
  1478.     /*----------------------------------------------------------------*/
  1479.     gui_measure_image(MMI_bg_animation, &iw, &ih);
  1480.     if (animation_handle != GDI_ERROR_HANDLE)
  1481.     {
  1482.         gdi_image_stop_animation(animation_handle);
  1483.     }
  1484.     wgui_set_animation_image(MMI_content_width - iw, UI_device_height - MMI_button_bar_height - ih, MMI_bg_animation);
  1485.     gui_set_clip(
  1486.         MMI_content_width - iw,
  1487.         UI_device_height - MMI_button_bar_height - ih,
  1488.         MMI_content_width - 1,
  1489.         UI_device_height - MMI_button_bar_height);
  1490. #if defined(MMI_ON_HARDWARE_P) && USE_PLUTO_GIF_LIBRARY
  1491.     mtk_show_animation(MMI_content_width - iw, UI_device_height - MMI_button_bar_height - ih, MMI_bg_animation);
  1492. #else /* defined(MMI_ON_HARDWARE_P) && USE_PLUTO_GIF_LIBRARY */ 
  1493.     gdi_image_draw_animation(
  1494.         MMI_content_width - iw,
  1495.         UI_device_height - MMI_button_bar_height - ih,
  1496.         MMI_bg_animation,
  1497.         &animation_handle);
  1498. #endif /* defined(MMI_ON_HARDWARE_P) && USE_PLUTO_GIF_LIBRARY */ 
  1499. }
  1500. /*****************************************************************************
  1501.  * FUNCTION
  1502.  *  draw_bg
  1503.  * DESCRIPTION
  1504.  *  Displays the background image for new mainmenu category
  1505.  * PARAMETERS
  1506.  *  void
  1507.  * RETURNS
  1508.  *  void
  1509.  *****************************************************************************/
  1510. void draw_bg(void)
  1511. {
  1512.     /*----------------------------------------------------------------*/
  1513.     /* Local Variables                                                */
  1514.     /*----------------------------------------------------------------*/
  1515.     S32 iwidth, iheight, character_height, tx, w;
  1516.     /*----------------------------------------------------------------*/
  1517.     /* Code Body                                                      */
  1518.     /*----------------------------------------------------------------*/
  1519.     gdi_layer_lock_frame_buffer();
  1520.     gdi_layer_push_clip();
  1521.     gdi_layer_push_text_clip();
  1522.     gui_set_clip(0, 0, UI_device_width - 1, UI_device_height - 1);
  1523.     gdi_layer_set_text_clip(
  1524.         MMI_title_x,
  1525.         MMI_title_y,
  1526.         MMI_title_x + MMI_title_width - 1,
  1527.         MMI_title_y + MMI_title_height - 1);
  1528.     if (MMI_bg_image != NULL)
  1529.     {
  1530.         gui_measure_image(MMI_bg_image, &iwidth, &iheight);
  1531.         gui_show_image(0, 0, MMI_bg_image);
  1532.     }
  1533.     if (!r2lMMIFlag)
  1534.     {
  1535.         tx = 2;
  1536.     }
  1537.     else
  1538.     {
  1539.         tx = MMI_title_width - 2;
  1540.     }
  1541.     if (MMI_bg_string != NULL)  /* Fix for long titles  */
  1542.     {
  1543.         S32 tw;
  1544.         if (!r2lMMIFlag)
  1545.         {
  1546.             tw = MMI_title_width - tx;
  1547.         }
  1548.         else
  1549.         {
  1550.             tw = tx;
  1551.         }
  1552.         gui_set_font((UI_font_type) (current_MMI_theme->window_title_font));
  1553.         gui_measure_string(MMI_bg_string, &w, &character_height);
  1554.         gui_set_text_color(*current_MMI_theme->title_text_color);
  1555.         gui_set_text_border_color(*current_MMI_theme->title_text_border_color);
  1556.         if (r2lMMIFlag)
  1557.         {
  1558.             gui_move_text_cursor(
  1559.                 MMI_title_x + tx + w,
  1560.                 MMI_title_y + ((MMI_title_height >> 1) - (character_height >> 1)));
  1561.         }
  1562.         else
  1563.         {
  1564.             gui_move_text_cursor(MMI_title_x + tx, MMI_title_y + ((MMI_title_height >> 1) - (character_height >> 1)));
  1565.         }
  1566.         if (!MMI_disable_title_shortcut_display && MMI_menu_shortcut_number >= 0)
  1567.         {
  1568.             tw -= MMI_menu_shortcut_box.width;
  1569.             if (w < tw)
  1570.             {
  1571.                 S32 _tx = tx;
  1572.                 if (!r2lMMIFlag)
  1573.                 {
  1574.                     tx = tx + (tw >> 1) - (w >> 1); /* Centers the title */
  1575.                     if (tx < _tx)
  1576.                     {
  1577.                         tx = _tx;
  1578.                     }
  1579.                 }
  1580.                 else
  1581.                 {
  1582.                     tx = (MMI_title_width >> 1) - (w >> 1);
  1583.                     tx += w;
  1584.                     if (tx > _tx)
  1585.                     {
  1586.                         tx = _tx;
  1587.                     }
  1588.                 }
  1589.             }
  1590.         }
  1591.         else
  1592.         {
  1593.             if (w < tw)
  1594.             {
  1595.                 S32 _tx = tx;
  1596.                 if (!r2lMMIFlag)
  1597.                 {
  1598.                     tx = (MMI_title_width >> 1) - (w >> 1);
  1599.                     if (tx < _tx)
  1600.                     {
  1601.                         tx = _tx;
  1602.                     }
  1603.                 }
  1604.                 else
  1605.                 {
  1606.                     tx = (MMI_title_width >> 1) - (w >> 1);
  1607.                     tx += w;
  1608.                     if (tx > _tx)
  1609.                     {
  1610.                         tx = _tx;
  1611.                     }
  1612.                 }
  1613.             }
  1614.         }
  1615.    
  1616.     }
  1617.     gdi_layer_unlock_frame_buffer();
  1618.     show_menu_shortcut();
  1619.     gdi_layer_blt_previous(
  1620.         MMI_title_x,
  1621.         MMI_title_y,
  1622.         MMI_title_x + MMI_title_width - 1,
  1623.         MMI_title_y + MMI_title_height - 1);
  1624. }
  1625. /*****************************************************************************
  1626.  * FUNCTION
  1627.  *  standard_circular_3d_highlight_handler
  1628.  * DESCRIPTION
  1629.  *  System Highlight handler of 3d circular list
  1630.  *  
  1631.  *  Internal function
  1632.  * PARAMETERS
  1633.  *  item_index      [IN]        Index of current highlighted item
  1634.  * RETURNS
  1635.  *  void
  1636.  *****************************************************************************/
  1637. void standard_circular_3d_highlight_handler(S32 item_index)
  1638. {
  1639.     /*----------------------------------------------------------------*/
  1640.     /* Local Variables                                                */
  1641.     /*----------------------------------------------------------------*/
  1642.     /*----------------------------------------------------------------*/
  1643.     /* Code Body                                                      */
  1644.     /*----------------------------------------------------------------*/
  1645.     MMI_menu_shortcut_number = item_index + 1;
  1646.     MMI_highlighted_item_text = get_item_text(item_index);
  1647.     MMI_circular_3D_highlight_handler(item_index);
  1648. }
  1649. /*****************************************************************************
  1650.  * FUNCTION
  1651.  *  standard_bg_ani_list_highlight_handler
  1652.  * DESCRIPTION
  1653.  *  System Highlight handler of bg_ani_list
  1654.  *  
  1655.  *  Internal function
  1656.  * PARAMETERS
  1657.  *  item_index      [IN]        Index of current highlighted item
  1658.  * RETURNS
  1659.  *  void
  1660.  *****************************************************************************/
  1661. void standard_bg_ani_list_highlight_handler(S32 item_index)
  1662. {
  1663.     /*----------------------------------------------------------------*/
  1664.     /* Local Variables                                                */
  1665.     /*----------------------------------------------------------------*/
  1666.     /*----------------------------------------------------------------*/
  1667.     /* Code Body                                                      */
  1668.     /*----------------------------------------------------------------*/
  1669.     gui_hide_animations();
  1670.     MMI_menu_shortcut_number = item_index + 1;
  1671.     MMI_highlighted_item_text = get_item_text(item_index);
  1672.     MMI_bg_string = MMI_highlighted_item_text;
  1673.     MMI_bg_image = get_image((MMI_ID_TYPE) (MAIN_MENU_BG_IMAGE_BASE + item_index));
  1674.     switch (item_index)
  1675.     {
  1676.         case 0:
  1677.         case 1:
  1678.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_PHONEBOOK_ICON + item_index));
  1679.             break;
  1680.         case 2:
  1681.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_CALL_HISTORY_ICON));
  1682.             break;
  1683.         case 3:
  1684.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_SETTINGS_ICON));
  1685.             break;
  1686.         case 4:
  1687.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_FUNANDGAMES_ICON));
  1688.             break;
  1689.         case 5:
  1690.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_PROFILES_ICON));
  1691.             break;
  1692.         case 6:
  1693.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_ORGANIZER_ICON));
  1694.             break;
  1695.         case 7:
  1696.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_SERVICES_ICON));
  1697.             break;
  1698.         case 8:
  1699.             MMI_bg_animation = get_image((MMI_ID_TYPE) (MAIN_MENU_SHORTCUTS_ICON));
  1700.             break;
  1701.     }
  1702.     ExecuteCurrHiliteHandler(item_index);
  1703. #if(UI_ENABLE_POP_UP_DESCRIPTIONS)
  1704.     gui_pop_up_description_stop_scroll();
  1705.     wgui_current_pop_up_description_index = item_index;
  1706. #endif /* (UI_ENABLE_POP_UP_DESCRIPTIONS) */ 
  1707. }
  1708. /*****************************************************************************
  1709.  * FUNCTION
  1710.  *  hide_main_menu_animation_frame
  1711.  * DESCRIPTION
  1712.  *  Hides the animating icon in a menu
  1713.  * PARAMETERS
  1714.  *  void
  1715.  * RETURNS
  1716.  *  void
  1717.  *****************************************************************************/
  1718. void hide_main_menu_animation_frame(void)