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

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_status_icons.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   This file is intends for status icon bars control.
  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.  * removed!
  168.  * removed!
  169.  * removed!
  170.  *
  171.  * removed!
  172.  * removed!
  173.  * removed!
  174.  *
  175.  * removed!
  176.  * removed!
  177.  * removed!
  178.  *
  179.  * removed!
  180.  * removed!
  181.  * removed!
  182.  *
  183.  * removed!
  184.  * removed!
  185.  * removed!
  186.  *
  187.  * removed!
  188.  * removed!
  189.  * removed!
  190.  *
  191.  * removed!
  192.  * removed!
  193.  * removed!
  194.  *
  195.  * removed!
  196.  * removed!
  197.  * removed!
  198.  *
  199.  * removed!
  200.  * removed!
  201.  * removed!
  202.  *
  203.  * removed!
  204.  * removed!
  205.  * removed!
  206.  *
  207.  * removed!
  208.  * removed!
  209.  * removed!
  210.  *
  211.  * removed!
  212.  * removed!
  213.  * removed!
  214.  *
  215.  * removed!
  216.  * removed!
  217.  * removed!
  218.  *
  219.  * removed!
  220.  * removed!
  221.  * removed!
  222.  *
  223.  * removed!
  224.  * removed!
  225.  * removed!
  226.  *
  227.  * removed!
  228.  * removed!
  229.  * removed!
  230.  *
  231.  * removed!
  232.  * removed!
  233.  * removed!
  234.  *
  235.  * removed!
  236.  * removed!
  237.  * removed!
  238.  *
  239.  * removed!
  240.  * removed!
  241.  * removed!
  242.  *
  243.  * removed!
  244.  * removed!
  245.  * removed!
  246.  *
  247.  * removed!
  248.  * removed!
  249.  * removed!
  250.  *
  251.  * removed!
  252.  * removed!
  253.  * removed!
  254.  *
  255.  * removed!
  256.  * removed!
  257.  * removed!
  258.  *
  259.  * removed!
  260.  * removed!
  261.  * removed!
  262.  *
  263.  * removed!
  264.  * removed!
  265.  * removed!
  266.  *
  267.  * removed!
  268.  * removed!
  269.  * removed!
  270.  *
  271.  * removed!
  272.  * removed!
  273.  * removed!
  274.  *
  275.  * removed!
  276.  * removed!
  277.  * removed!
  278.  *
  279.  * removed!
  280.  * removed!
  281.  * removed!
  282.  *
  283.  * removed!
  284.  * removed!
  285.  * removed!
  286.  *
  287.  * removed!
  288.  * removed!
  289.  * removed!
  290.  *
  291.  *------------------------------------------------------------------------------
  292.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  293.  *============================================================================
  294.  ****************************************************************************/
  295. /**
  296.  * Copyright Notice
  297.  * (c) 2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
  298.  * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
  299.  *  (It is illegal to remove this copyright notice from this software or any
  300.  *  portion of it)
  301.  */
  302. /**********************************************************************************
  303.    Filename:      wgui_status_icons.c
  304.    Author:        manju
  305.    Date Created:  August-07-2002
  306.    Contains:      PixTel UI wrapper routines
  307.                Status Icon wrappers
  308. **********************************************************************************/
  309. #include "wgui_status_icons.h"
  310. #include "gdi_include.h"
  311. /* To be removed later..and put in boot up init file..Right now needed for 
  312.    initializing status icon data */
  313. #include "CustDataRes.h"
  314. #include "StatusIconRes.h"
  315. #include "MMI_features.h"
  316. #include "SimDetectionGexdcl.h"
  317. #include "SimDetectionGprot.h"
  318. #include "IdleAppDef.h"
  319. #include "IdleAppProt.h"//110606 compile warning
  320. #ifdef __MMI_TOUCH_SCREEN__
  321. #include "wgui_touch_screen.h"
  322. #include "TouchScreenGprot.h"
  323. #endif /* __MMI_TOUCH_SCREEN__ */ 
  324. #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  325. #include "MainMenuDef.h"
  326. #endif 
  327. #if defined(__MMI_UI_STATUS_BAR_AT_BOTTOM__)
  328. #include "wgui_categories_idlescreen.h"
  329. #endif 
  330. #ifdef __MMI_DOWNLOADABLE_THEMES_SUPPORT__
  331. #include "ThemeManager.h"
  332. #endif
  333. //KP Jerry add for KP-Style 12-Matrix mainmenu on 2007-3-19 start
  334. #ifdef __MMI_KP_STYLE_MAIN_MENU_MATRIX__
  335. #include "MainMenuDef.h"
  336. #endif
  337. //KP Jerry add for KP-Style 12-Matrix mainmenu on 2007-3-19 end
  338. #ifdef __MMI_WLAN_FEATURES__
  339. #include "DataAccount.h"
  340. extern U8 mmi_netset_get_active_preferred_mode(void);
  341. #endif /* __MMI_WLAN_FEATURES__ */
  342. /* Externals for graphics context switching  */
  343. extern bitmap main_LCD_device_bitmap;
  344. extern bitmap sub_LCD_device_bitmap;
  345. #if defined(__MMI_MAINLCD_176X220__) || defined (__MMI_MAINLCD_240X320__)       /* 041205 Calvin modieid */
  346. extern MMI_BOOL if_full_screen_hide_status_icons(void);
  347. #endif 
  348. extern MMI_BOOL PhnsetFlightModeHideButSaveStatusIcon(S16 icon_ID, U32 icon_flag);
  349. #ifdef __FLIGHT_MODE_SUPPORT__
  350. extern pBOOL gPowerOnWithFlightMode;
  351. #endif 
  352. void UI_set_main_LCD_graphics_context(void);
  353. void UI_set_sub_LCD_graphics_context(void);
  354. extern bitmap *current_LCD_device_bitmap;
  355. extern BOOL IsClamClose(void);
  356. static U8 IsReArrangeNeeded = 0;
  357. /* Moved from down HIMANSHU modified */
  358. extern S32 MAIN_LCD_device_width;
  359. extern S32 MAIN_LCD_device_height;
  360. /* Setting this value to 1 will cause icons to be drawn from bottom baseline  */
  361. /* Setting to 0 will cause icons to be drawn from center baseline          */
  362. /* MTK added by JL for Joyce's request */
  363. #define STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE     1
  364. /* This is the customizable list of status icons                        */
  365. /* Use (x,y)=(0,0) for automatic positioning. Automatic positioning is        */
  366. /* only valid with Icon bars having STATUS_ICON_BAR_ARRANGE_XXXXXXXX       */
  367. /* Set width=0, height=0 for all icons. These values are autocalculated    */
  368. /* If there is no icon, use IMAGE_ID_NULL for the MMI_ID_TYPE value           */
  369. /* FLAGS:   Set status icon specific flags here. Usually this value is 0      */
  370. /* STATE:   Set the default state of a multi-state status icon here           */
  371. /* GROUP:   Set the group number for grouped icons here.                */
  372. /*       0 = Icon is not grouped                                  */
  373. /* PRIORITY:   Set the status icon priority here. If there are more status    */
  374. /*          icons than what can be displayed in the status icon bar        */
  375. /*          area, priority is used to determine which icons are            */
  376. /*          displayed and which are not.                          */
  377. /*          0 = Icon is always displayed                          */
  378. /* IMAGE:   Pointer to Icons image data. Autocalculated. Always set to NULL      */
  379. /* NFRAMES: Number of frames in the image. Autocalculated. Always set to 0    */
  380. /* !!NOTE:  Currently the priority field is dummy, the icons need to be       */
  381. /* manually arranged according to the desired priority                     */
  382. /* Also, grouped icons need to be arranged consecutively in the list       */
  383. MMI_status_icon MMI_status_icons[MAX_STATUS_ICONS] = 
  384. {
  385.     /* ICON_NUMBER    X     Y     WIDTH    HEIGHT      MMI_ID_TYPE                      FLAGS STATE GROUP PRIORITY IMAGE NFRAMES  */
  386.     /* 0  */ {1, 2, 0, 0, IMG_SI_SIGNAL_STRENGTH, 0, 0, 0, 0, NULL, 0,},
  387.     /* 1  */ {111, 4, 0, 0, IMG_SI_BATTERY_STRENGTH, 0, 0, 0, 0, NULL, 0,},
  388. #ifdef __MMI_WLAN_FEATURES__
  389.     /* 54 */ {0, 0, 0, 0, IMG_ID_DTCNT_WLAN_STATUS_DISCONNECT, 0, 0, 0, 0, NULL, 0,},
  390. #endif 
  391. #ifndef __MMI_STATUS_ICON_SIGNAL_WITH_LINE_SWITCH__     /* 022505 Calvin added */
  392.     /* 2  */ {0, 0, 0, 0, IMG_SI_LINE_L1, 0, 0, 1, 0, NULL, 0,},
  393.     /* 3  */ {0, 0, 0, 0, IMG_SI_LINE_L2, 0, 0, 1, 0, NULL, 0,},
  394. #endif /* __MMI_STATUS_ICON_SIGNAL_WITH_LINE_SWITCH__ */ 
  395. #if defined(__GSM_RAT__) && defined(__WCDMA_RAT__) /* 112805 3G icon Calvin */
  396.     /* 4  */ {0, 0, 0, 0, IMG_SI_3G, 0, 0, 0, 0, NULL, 0,},
  397.     /* 5  */ {0, 0, 0, 0, IMG_SI_2G, 0, 0, 0, 0, NULL, 0,},
  398. #endif /* defined(__GSM_RAT__) && defined(__WCDMA_RAT__) */ 
  399. #ifdef __MMI_VOIP__
  400.     /* 5  */ {0, 0, 0, 0, IMG_SI_VOIP, 0, 0, 0, 0, NULL, 0,},//091806 voip icon
  401. #endif
  402.     /* 6  */ {0, 0, 0, 0, IMG_SI_ROAMING_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  403.     /* 7  */ {0, 0, 0, 0, IMG_SI_CALL_DIVERT_L1L2, 0, 0, 2, 0, NULL, 0,},
  404.     /* 8  */ {0, 0, 0, 0, IMG_SI_CALL_DIVERT_L1, 0, 0, 2, 0, NULL, 0,},
  405.     /* 9  */ {0, 0, 0, 0, IMG_SI_CALL_DIVERT_L2, 0, 0, 2, 0, NULL, 0,},
  406.     /* 10 */ {0, 0, 0, 0, IMG_SI_MUTE, 0, 0, 0, 0, NULL, 0,},
  407.     /* 11 */ {0, 0, 0, 0, IMG_SI_SMS_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  408.     /* 12 */ {0, 0, 0, 0, IMG_SI_MMS_UNREAD_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  409.     /* 13 */ {0, 0, 0, 0, IMG_SI_MMS_BUSY_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  410.     /* 14 */ {0, 0, 0, 0, IMG_SI_VIBRATE, 0, 0, 3, 0, NULL, 0,},
  411.     /* 15 */ {0, 0, 0, 0, IMG_SI_SILENT, 0, 0, 3, 0, NULL, 0,},
  412.     /* 16 */ {0, 0, 0, 0, IMG_SI_RING, 0, 0, 3, 0, NULL, 0,},
  413.     /* 17 */ {0, 0, 0, 0, IMG_SI_VIBRATE_AND_RING, 0, 0, 3, 0, NULL, 0,},
  414.     /* 18 */ {0, 0, 0, 0, IMG_SI_VIBRATE_THEN_RING, 0, 0, 3, 0, NULL, 0,},
  415.     /* 19 */ {0, 0, 0, 0, IMG_SI_GPRS_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  416.                                                                                         /* 20 */ {0, 0, 0, 0, IMG_SI_GPRS_ATT_NO_PDP_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  417.                                                                                         /* 010406 G icon Calvin */
  418.     /* 21 */ {0, 0, 0, 0, IMG_SI_EARPHONE_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  419.     /* 22 */ {0, 0, 0, 0, IMG_SI_ALARM_ACTIVATED, 0, 0, 0, 0, NULL, 0,},
  420.     /* 23 */ {0, 0, 0, 0, IMG_SI_VOICE_RECORD, 0, 0, 0, 0, NULL, 0,},
  421.     /* 24 */ {0, 0, 0, 0, IMG_SI_KEYPAD_LOCK, 0, 0, 0, 0, NULL, 0,},
  422.     /* 25 */ {0, 0, 0, 0, IMG_SI_MISSED_CALL_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  423.     /* 26 */ {0, 0, 0, 0, IMG_SI_UNREAD_VOICE_L1L2, 0, 0, 4, 0, NULL, 0,},
  424.     /* 27 */ {0, 0, 0, 0, IMG_SI_UNREAD_VOICE_L1, 0, 0, 4, 0, NULL, 0,},
  425.     /* 28 */ {0, 0, 0, 0, IMG_SI_UNREAD_VOICE_L2, 0, 0, 4, 0, NULL, 0,},
  426.     /* 29 */ {0, 0, 0, 0, IMG_SI_UNREAD_FAX_L1L2, 0, 0, 5, 0, NULL, 0,},
  427.     /* 30 */ {0, 0, 0, 0, IMG_SI_UNREAD_FAX_L1, 0, 0, 5, 0, NULL, 0,},
  428.     /* 31 */ {0, 0, 0, 0, IMG_SI_UNREAD_FAX_L2, 0, 0, 5, 0, NULL, 0,},
  429.     /* 32 */ {0, 0, 0, 0, IMG_SI_UNREAD_EMAIL_L1L2, 0, 0, 6, 0, NULL, 0,},
  430.     /* 33 */ {0, 0, 0, 0, IMG_SI_UNREAD_EMAIL_L1, 0, 0, 6, 0, NULL, 0,},
  431.     /* 34 */ {0, 0, 0, 0, IMG_SI_UNREAD_EMAIL_L2, 0, 0, 6, 0, NULL, 0,},
  432.     /* 35 */ {0, 0, 0, 0, IMG_SI_IMPS_MSG, 0, 0, 8, 0, NULL, 0,},
  433.     /* 36 */ {0, 0, 0, 0, IMG_SI_IMPS_LOGIN, 0, 0, 8, 0, NULL, 0,},
  434.     /* 37 */ {0, 0, 0, 0, IMG_SI_WAP, 0, 0, 0, 0, NULL, 0,},
  435.                                                                 /* 38 */ {0, 0, 0, 0, IMG_SI_POC, 0, 0, 0, 0, NULL, 0,},
  436.                                                                 /* 030705 Calvin added */
  437.     /* 39 */ {0, 0, 0, 0, IMG_SI_BT, 0, 0, 0, 0, NULL, 0,},
  438.     /* 40 */ {0, 0, 0, 0, IMG_SI_BT_CON, 0, 0, 0, 0, NULL, 0,},
  439.     /* 41 */ {0, 0, 0, 0, IMG_SI_BT_ND, 0, 0, 0, 0, NULL, 0,},
  440.     /* 42 */ {0, 0, 0, 0, IMG_SI_IR_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  441.     /* 43 */ {0, 0, 0, 0, IMG_SI_STOPWATCH, 0, 0, 0, 0, NULL, 0,},
  442.                                                                                 /* 44 */ {0, 0, 0, 0, IMG_BLINKINGICON_CHAT_ROOM1, 0, 0, 0, 0, NULL, 0,},
  443.                                                                                 /* SMS Chat Status Icon - Gurinder 20/4/2004 */
  444.                                                                                 /* 45 */ {0, 0, 0, 0, IMG_BLINKINGICON_CHAT_ROOM2, 0, 0, 0, 0, NULL, 0,},
  445.                                                                                 /*  */
  446.                                                                                 /* 46 */ {0, 0, 0, 0, IMG_SI_NETWORK_CIPHER_GSM, 0, 0, 0, 0, NULL, 0,},
  447.                                                                                 /* 021505 Calvin added */
  448.                                                                                 /* 47 */ {0, 0, 0, 0, IMG_SI_NETWORK_CIPHER_GPRS, 0, 0, 0, 0, NULL, 0,},
  449.                                                                                 /* 021505 Calvin added */
  450.                                                                         /* 48 */ {0, 0, 0, 0, IMG_SI_JAVA_PAUSE, 0, 0, 0, 0, NULL, 0,},
  451.                                                                         /* 031005 Calvin added */
  452.     /* 101205 new icon Calvin Start */
  453. #ifdef __MMI_BG_SOUND_EFFECT__
  454.     /* 49 */ {0, 0, 0, 0, IMG_SI_BGSND, 0, 0, 0, 0, NULL, 0,},
  455. #endif 
  456. #ifdef __MMI_AUDIO_3D_EFFECT__
  457.     /* 50 */ {0, 0, 0, 0, IMG_SI_3DSND, 0, 0, 0, 0, NULL, 0,},
  458. #endif 
  459. #ifdef __MMI_HOMEZONE_STATUS_ICON__
  460.     /* 51 */ {0, 0, 0, 0, IMG_SI_HZONE, 0, 0, 0, 0, NULL, 0,},
  461.     /* 52 */ {0, 0, 0, 0, IMG_SI_CZONE, 0, 0, 0, 0, NULL, 0,},
  462. #endif /* __MMI_HOMEZONE_STATUS_ICON__ */ 
  463. #ifdef __CTM_SUPPORT__
  464.     /* 53 */ {0, 0, 0, 0, IMG_SI_TTY_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  465. #endif 
  466.     /* 101205 new icon Calvin End */
  467.     /* Sublcd Start */
  468.     /* 54 */ {0, 0, 0, 0, IMG_SLSI_SIGNAL_STRENGTH, 0, 0, 0, 0, NULL, 0,},
  469.     /* 55 */ {36, 0, 0, 0, IMG_SLSI_BATTERY_STRENGTH, 0, 0, 0, 0, NULL, 0,},
  470.     /* 56 */ {11, 2, 0, 0, IMG_SLSI_SMS_INDICATOR, 0, 0, 0, 0, NULL, 0,},
  471.     /* 57 */ {24, 1, 0, 0, IMG_SLSI_RING, 0, 0, 7, 0, NULL, 0,},
  472.     /* 58 */ {24, 1, 0, 0, IMG_SLSI_VIBRATE, 0, 0, 7, 0, NULL, 0,},
  473.     /* 59 */ {24, 1, 0, 0, IMG_SLSI_VIBRATE_AND_RING, 0, 0, 7, 0, NULL, 0,},
  474.     /* 60 */ {24, 1, 0, 0, IMG_SLSI_VIBRATE_THEN_RING, 0, 0, 7, 0, NULL, 0,},
  475.     /* 61 */ {24, 1, 0, 0, IMG_SLSI_SILENT, 0, 0, 7, 0, NULL, 0,},
  476.     /* 62 */ {24, 1, 0, 0, IMG_SLSI_ALARM, 0, 0, 0, 2, NULL, 0,},
  477.     /* 63 */ {24, 1, 0, 0, IMG_SLSI_MISSED_CALL, 0, 0, 0, 2, NULL, 0,},
  478. };
  479. /* Pool of status icons used for the horizontal and vertical   */
  480. /* status icon bars                                */
  481. /* MTK added by JL 040228 optimize code size */
  482. #define MMI_N_STATUS_ICONS_POOL1 ( sizeof(MMI_status_icons_pool1)/sizeof(MMI_status_icons_pool1[0]) )   /* 32 */
  483. /* store id of main lcd icon */
  484. const S16 MMI_status_icons_pool1[] = 
  485. {
  486.     STATUS_ICON_SIGNAL_STRENGTH,
  487.     STATUS_ICON_BATTERY_STRENGTH,
  488. #ifdef __MMI_WLAN_FEATURES__
  489.     STATUS_ICON_WLAN_SIGNAL,
  490. #endif /* __MMI_WLAN_FEATURES__ */
  491. #ifndef __MMI_STATUS_ICON_SIGNAL_WITH_LINE_SWITCH__
  492.     STATUS_ICON_ALTERNATE_LINE_L1,
  493.     STATUS_ICON_ALTERNATE_LINE_L2,
  494. #endif /* __MMI_STATUS_ICON_SIGNAL_WITH_LINE_SWITCH__ */ 
  495. #if defined(__GSM_RAT__) && defined(__WCDMA_RAT__) /* 112805 3G icon Calvin */
  496.     STATUS_ICON_3G,
  497.     STATUS_ICON_2G,
  498. #endif /* defined(__GSM_RAT__) && defined(__WCDMA_RAT__) */ 
  499. #ifdef __MMI_VOIP__//091806 voip icon
  500.     STATUS_ICON_VOIP,
  501. #endif
  502.     STATUS_ICON_ROAMING,
  503.     STATUS_ICON_CALL_DIVERT_L1L2,
  504.     STATUS_ICON_CALL_DIVERT_L1,
  505.     STATUS_ICON_CALL_DIVERT_L2,
  506.     STATUS_ICON_MUTE,
  507.     STATUS_ICON_INCOMING_SMS,
  508.     STATUS_ICON_MMS_UNREAD,
  509.     STATUS_ICON_MMS_BUSY,
  510.     STATUS_ICON_VIBRATION,
  511.     STATUS_ICON_SILENT,
  512.     STATUS_ICON_RING,
  513.     STATUS_ICON_VIBRATE_AND_RING,
  514.     STATUS_ICON_VIBRATE_THEN_RING,
  515.     STATUS_ICON_GPRS_SERVICE,
  516.     STATUS_ICON_GPRS_ATT_NO_PDP_INDICATOR,  /* 010406 G icon Calvin */
  517.     STATUS_ICON_EARPHONE_INDICATOR,
  518.     STATUS_ICON_ALARM,
  519.     STATUS_ICON_VOICE_RECORD,
  520.     STATUS_ICON_KEYPAD_LOCK,
  521.     STATUS_ICON_MISSED_CALL,
  522.     STATUS_ICON_UNREAD_VOICE_L1L2,
  523.     STATUS_ICON_UNREAD_VOICE_L1,
  524.     STATUS_ICON_UNREAD_VOICE_L2,
  525.     STATUS_ICON_UNREAD_FAX_L1L2,
  526.     STATUS_ICON_UNREAD_FAX_L1,
  527.     STATUS_ICON_UNREAD_FAX_L2,
  528.     STATUS_ICON_UNREAD_EMAIL_L1L2,
  529.     STATUS_ICON_UNREAD_EMAIL_L1,
  530.     STATUS_ICON_UNREAD_EMAIL_L2,
  531.     STATUS_ICON_IMPS_MSG,
  532.     STATUS_ICON_IMPS_LOGIN,
  533.     STATUS_ICON_WAP,
  534.     STATUS_ICON_POC,                        /* 030705 Calvin added */
  535.     STATUS_ICON_BT,
  536.     STATUS_ICON_BT_CON,
  537.     STATUS_ICON_BT_ND,
  538.     STATUS_ICON_IR,
  539.     STATUS_ICON_STOP_WATCH,
  540.     STATUS_ICON_CHAT_INDICATION_ROOM1,
  541.     STATUS_ICON_CHAT_INDICATION_ROOM2,
  542.     STATUS_ICON_NETWORK_CIPHER_GSM,
  543.     STATUS_ICON_NETWORK_CIPHER_GPRS,
  544.     STATUS_ICON_JAVA_PAUSE
  545.         /* 101205 new icon Calvin Start */
  546. #ifdef __MMI_BG_SOUND_EFFECT__
  547.         ,
  548.     STATUS_ICON_BG_SOUND
  549. #endif /* __MMI_BG_SOUND_EFFECT__ */ 
  550. #ifdef __MMI_AUDIO_3D_EFFECT__
  551.         ,
  552.     STATUS_ICON_3D_SOUND
  553. #endif /* __MMI_AUDIO_3D_EFFECT__ */ 
  554. #ifdef __MMI_HOMEZONE_STATUS_ICON__
  555.         ,
  556.     STATUS_ICON_HOMEZONE,
  557.     STATUS_ICON_CITYZONE
  558. #endif /* __MMI_HOMEZONE_STATUS_ICON__ */ 
  559. #ifdef __CTM_SUPPORT__
  560.         ,
  561.     STATUS_ICON_TTY_INDICATOR
  562. #endif /* __CTM_SUPPORT__ */ 
  563.         /* 101205 new icon Calvin End */
  564. };
  565. /* MTK added by JL 040228 optimize code size */
  566. #define MMI_N_STATUS_ICONS_POOL2 ( sizeof(MMI_status_icons_pool2)/sizeof(MMI_status_icons_pool2[0]) )   /* 8 */
  567. const S16 MMI_status_icons_pool2[] = 
  568. {
  569.     STATUS_ICON_SUBLCD_SIGNAL_STRENGTH,
  570.     STATUS_ICON_SUBLCD_BATTERY_STRENGTH,
  571.     STATUS_ICON_SUBLCD_SMS,
  572.     STATUS_ICON_SUBLCD_RING,
  573.     STATUS_ICON_SUBLCD_VIBRATE,
  574.     STATUS_ICON_SUBLCD_VIBRATE_AND_RING,
  575.     STATUS_ICON_SUBLCD_VIBRATE_THEN_RING,
  576.     STATUS_ICON_SUBLCD_SILENT,
  577.     STATUS_ICON_SUBLCD_ALARM,
  578.     STATUS_ICON_SUBLCD_MISSED_CALL
  579. };
  580. #ifdef __MMI_LCD_PARTIAL_ON__
  581. #define MMI_N_STATUS_ICONS_POOL_PARTIAL_DISPLAY ( sizeof(MMI_status_icons_pool_partial_display)/sizeof(MMI_status_icons_pool_partial_display[0]) )
  582. /* For incoming events */
  583. const S16 MMI_status_icons_pool_partial_display[] = 
  584. {
  585.     STATUS_ICON_INCOMING_SMS,
  586.     STATUS_ICON_MMS_UNREAD,
  587.     STATUS_ICON_MISSED_CALL,
  588.     STATUS_ICON_UNREAD_VOICE_L1L2,
  589.     STATUS_ICON_UNREAD_VOICE_L1,
  590.     STATUS_ICON_UNREAD_VOICE_L2,
  591.     STATUS_ICON_UNREAD_EMAIL_L1L2,
  592.     STATUS_ICON_UNREAD_EMAIL_L1,
  593.     STATUS_ICON_UNREAD_EMAIL_L2,
  594.     STATUS_ICON_IMPS_MSG,
  595.     STATUS_ICON_WAP
  596. };
  597. #endif /* __MMI_LCD_PARTIAL_ON__ */ 
  598. S16 MMI_status_icons_list1[MMI_N_STATUS_ICONS_LIST1];
  599. /* store icons id of vertical  status bar of main lcd */
  600. S16 MMI_status_icons_list2[MMI_N_STATUS_ICONS_LIST2];
  601. /* store icons id of horizontal status bar of sub lcd  */
  602. S16 MMI_status_icons_list3[MMI_N_STATUS_ICONS_LIST3];
  603. #ifdef __MMI_LCD_PARTIAL_ON__
  604. S16 MMI_status_icons_list_partial_display[MMI_N_STATUS_ICONS_PARTIAL_DISPLAY];
  605. S16 MMI_status_icons_partial_display_n_icons;
  606. #endif /* __MMI_LCD_PARTIAL_ON__ */ 
  607. /* This is the customizable list of status icon bars        */
  608. MMI_status_icon_bar MMI_status_icon_bars[MAX_STATUS_ICON_BARS];
  609. static S32 status_icon_display_area = DEFAULT_BOTH;
  610. /* Globals  */
  611. /* Hide functions need to take x1,y1,x2,y2 as parameters */
  612. void (*MMI_hide_status_icon_bars[MAX_STATUS_ICON_BARS]) (void);
  613. U8 status_icon_display_ON = 0;
  614. U8 status_icon_blink_animate_ON = 0;
  615. U8 MMI_status_icons_blink_animate_ON_state = 0;
  616. //S32 status_icon_display_locked=0; 030705 Calvin removed
  617. //PMT VIKAS START 20050707
  618. #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  619. /* UI_status_bar_theme *current_status_bar_theme = NULL; */
  620. U8 is_status_bar_shuffled = 0;
  621. static S32 background_fill = 1;
  622. #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  623. /* PMT VIKAS END 20050707 */
  624. #define SUBLCD_ALPHA_VALUE 30
  625. #ifdef __MMI_TOUCH_SCREEN__
  626. FuncPtr MMI_status_icon_pen_event_hdlr[MAX_STATUS_ICONS][WGUI_STATUS_ICON_BAR_PEN_EVENT_MAX];
  627. S16 pen_down_status_icon_id = -1;
  628. #endif /* __MMI_TOUCH_SCREEN__ */ 
  629. /* START VIJAY PMT 20060105 */
  630. #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  631. pBOOL g_status_bar_at_bottom = FALSE;
  632. /*****************************************************************************
  633.  * FUNCTION
  634.  *  whether_status_bar_at_bottom
  635.  * DESCRIPTION
  636.  *  
  637.  * PARAMETERS
  638.  *  void
  639.  * RETURNS
  640.  *  
  641.  *****************************************************************************/
  642. pBOOL whether_status_bar_at_bottom(void)
  643. {
  644.     /*----------------------------------------------------------------*/
  645.     /* Local Variables                                                */
  646.     /*----------------------------------------------------------------*/
  647.     /*----------------------------------------------------------------*/
  648.     /* Code Body                                                      */
  649.     /*----------------------------------------------------------------*/
  650.     return g_status_bar_at_bottom;
  651. }
  652. /*****************************************************************************
  653.  * FUNCTION
  654.  *  set_status_bar_at_bottom
  655.  * DESCRIPTION
  656.  *  
  657.  * PARAMETERS
  658.  *  void
  659.  * RETURNS
  660.  *  void
  661.  *****************************************************************************/
  662. void set_status_bar_at_bottom(void)
  663. {
  664.     /*----------------------------------------------------------------*/
  665.     /* Local Variables                                                */
  666.     /*----------------------------------------------------------------*/
  667.     /*----------------------------------------------------------------*/
  668.     /* Code Body                                                      */
  669.     /*----------------------------------------------------------------*/
  670.     g_status_bar_at_bottom = TRUE;
  671. }
  672. /*****************************************************************************
  673.  * FUNCTION
  674.  *  reset_status_bar_at_bottom
  675.  * DESCRIPTION
  676.  *  
  677.  * PARAMETERS
  678.  *  void
  679.  * RETURNS
  680.  *  void
  681.  *****************************************************************************/
  682. void reset_status_bar_at_bottom(void)
  683. {
  684.     /*----------------------------------------------------------------*/
  685.     /* Local Variables                                                */
  686.     /*----------------------------------------------------------------*/
  687.     /*----------------------------------------------------------------*/
  688.     /* Code Body                                                      */
  689.     /*----------------------------------------------------------------*/
  690.     g_status_bar_at_bottom = FALSE;
  691. }
  692. #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  693. /* END VIJAY PMT 20060105 */
  694. /*****************************************************************************
  695.  * FUNCTION
  696.  *  register_hide_status_icon_bar
  697.  * DESCRIPTION
  698.  *  register hide function of status bar
  699.  * PARAMETERS
  700.  *  status_bar_ID       [IN]        Bar id
  701.  *  f                   [IN]        )(void)      :- function pointer
  702.  *  horizontal(?)       [IN]        Bar :- sublcd
  703.  *  vertical(?)         [IN]        Bar main lcd
  704.  * RETURNS
  705.  *  void
  706.  *****************************************************************************/
  707. void register_hide_status_icon_bar(U8 status_bar_ID, void (*f) (void))
  708. {
  709.     /*----------------------------------------------------------------*/
  710.     /* Local Variables                                                */
  711.     /*----------------------------------------------------------------*/
  712.     /*----------------------------------------------------------------*/
  713.     /* Code Body                                                      */
  714.     /*----------------------------------------------------------------*/
  715.     /* register the hide function of status bar */
  716.     MMI_hide_status_icon_bars[status_bar_ID] = f;
  717. }
  718. /*****************************************************************************
  719.  * FUNCTION
  720.  *  clear_hide_status_icon_bars
  721.  * DESCRIPTION
  722.  *  clear hide function of status bar
  723.  * PARAMETERS
  724.  *  void
  725.  * RETURNS
  726.  *  void
  727.  *****************************************************************************/
  728. void clear_hide_status_icon_bars(void)
  729. {
  730.     /*----------------------------------------------------------------*/
  731.     /* Local Variables                                                */
  732.     /*----------------------------------------------------------------*/
  733.     S32 i;
  734.     /*----------------------------------------------------------------*/
  735.     /* Code Body                                                      */
  736.     /*----------------------------------------------------------------*/
  737.     /* set the hide function  to dummy function */
  738.     for (i = 0; i < MAX_STATUS_ICON_BARS; i++)
  739.     {
  740.         if (MMI_status_icon_bars[i].graphics_context == current_LCD_device_bitmap)
  741.         {
  742.             MMI_hide_status_icon_bars[i] = UI_dummy_function;
  743.         }
  744.     }
  745. }
  746. #define TEST_STATUS_ICON_DISPLAY_ON(flags)   (flags & (STATUS_ICON_ANIMATE|STATUS_ICON_REVERSE_ANIMATE|STATUS_ICON_FORWARD_ANIMATE|STATUS_ICON_BLINK|STATUS_ICON_DISABLED|STATUS_ICON_DISPLAY))
  747. /* PMT HIMANSHU START 20050625 */
  748. #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  749. extern void set_vertical_signal_status_icons(void);
  750. extern void set_horizontal_signal_status_icons(void);
  751. #endif /* defined(__MMI_UI_TECHNO_STATUS_ICON__) */ 
  752. /* PMT HIMANSHU END */
  753. /*****************************************************************************
  754.  * FUNCTION
  755.  *  arrange_status_icons
  756.  * DESCRIPTION
  757.  *  calulate the position of status icon of both main lcd (horizontal/vertical)
  758.  *  and sub lcd
  759.  * PARAMETERS
  760.  *  void
  761.  * RETURNS
  762.  *  void
  763.  *****************************************************************************/
  764. void arrange_status_icons(void)
  765. {
  766. #if(0)  /* Original implementation: Temporarily disabled for worse performance */
  767.     /*----------------------------------------------------------------*/
  768.     /* Local Variables                                                */
  769.     /*----------------------------------------------------------------*/
  770. s32 i,j,x,y,width,height;
  771. UI_image_type img;
  772. byte d=0;
  773. byte group_flag;
  774. for(j=0;j<MAX_STATUS_ICON_BARS;j++)
  775. { if(MMI_status_icon_bars[j].group_ID>0) group_flag=1;
  776. else group_flag=0;
  777. if(MMI_status_icon_bars[j].flags & STATUS_ICON_BAR_ARRANGE_DESCENDING) d=1;
  778. x=y=0;
  779. if(MMI_status_icon_bars[j].flags & STATUS_ICON_BAR_ARRANGE_HORIZONTAL)
  780. { if(d)   /* Descending direction */
  781. { for(i=0;i<MMI_status_icon_bars[j].n_icons;i++)
  782. { if(MMI_status_icons[i].flags & (STATUS_ICON_DISPLAY|STATUS_ICON_BLINK|STATUS_ICON_ANIMATE))
  783. { img=MMI_status_icons[i].icon_data;
  784. pixtel_UI_measure_image(img,&width,&height);
  785. x-=(width+STATUS_ICON_X_GAP);
  786. MMI_status_icons[i].x=x;
  787. MMI_status_icons[i].y=y;
  788. }
  789. }
  790. }
  791. else /* Ascending direction */
  792. { for(i=0;i<MMI_status_icon_bars[j].n_icons;i++)
  793. { if(MMI_status_icons[i].flags & (STATUS_ICON_DISPLAY|STATUS_ICON_BLINK|STATUS_ICON_ANIMATE))
  794. { img=MMI_status_icons[i].icon_data;
  795. pixtel_UI_measure_image(img,&width,&height);
  796. MMI_status_icons[i].x=x;
  797. MMI_status_icons[i].y=y;
  798. x+=(width+STATUS_ICON_X_GAP);
  799. }
  800. }
  801. }
  802. }
  803. else if(MMI_status_icon_bars[j].flags & STATUS_ICON_BAR_ARRANGE_VERTICAL)
  804. { if(d)   /* Descending direction */
  805. { for(i=0;i<MMI_status_icon_bars[j].n_icons;i++)
  806. { if(MMI_status_icons[i].flags & (STATUS_ICON_DISPLAY|STATUS_ICON_BLINK|STATUS_ICON_ANIMATE))
  807. { img=MMI_status_icons[i].icon_data;
  808. pixtel_UI_measure_image(img,&width,&height);
  809. y-=(height+STATUS_ICON_Y_GAP);
  810. MMI_status_icons[i].x=x;
  811. MMI_status_icons[i].y=y;
  812. }
  813. }
  814. }
  815. else /* Ascending direction */
  816. { for(i=0;i<MMI_status_icon_bars[j].n_icons;i++)
  817. { if(MMI_status_icons[i].flags & (STATUS_ICON_DISPLAY|STATUS_ICON_BLINK|STATUS_ICON_ANIMATE))
  818. { img=MMI_status_icons[i].icon_data;
  819. pixtel_UI_measure_image(img,&width,&height);
  820. MMI_status_icons[i].x=x;
  821. MMI_status_icons[i].y=y;
  822. y+=(height+STATUS_ICON_Y_GAP);
  823. }
  824. }
  825. }
  826. }
  827. }
  828. #else /* (0) */ /* Hardcoded implementation for better performance */
  829.     S32 x1, y1, x2, y2, x, y, cx, cy;
  830.     S32 i, j, k = 0, group_ID;
  831.     U8 done = 0, inner_done, display_flag;
  832.     S32 old_i;  /* 122004 Calvin added */
  833.     /*----------------------------------------------------------------*/
  834.     /* Code Body                                                      */
  835.     /*----------------------------------------------------------------*/
  836.     /* Status bar 1: Horizontal bar  */
  837.     /* PMT HIMANSHU START 20050625 */
  838. #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  839.     /* PMT VIKAS START 20051202 */
  840.     if ((is_on_idlescreen() == 1) || (GetActiveScreenId() == MAIN_MENU_SCREENID))
  841.         /* PMT VIKAS END 20051202 */
  842.     {
  843.         set_vertical_signal_status_icons();
  844.         ChangeStatusIconImageWithoutReArrange(STATUS_ICON_BATTERY_STRENGTH, IMG_SI_BATTERY_STRENGTH_IDLE);
  845.         MMI_status_icon_bars[0].n_icons = 0;
  846.     }
  847.     else
  848.     {
  849.         set_horizontal_signal_status_icons();
  850.         ChangeStatusIconImageWithoutReArrange(STATUS_ICON_BATTERY_STRENGTH, IMG_SI_BATTERY_STRENGTH);
  851.         MMI_status_icons_list1[0] = STATUS_ICON_SIGNAL_STRENGTH;
  852.         MMI_status_icons_list1[1] = STATUS_ICON_BATTERY_STRENGTH;
  853.         MMI_status_icon_bars[0].n_icons = 2;
  854.     }
  855.     /* PMT VIKAS START 20050707 */
  856. #elif defined(__MMI_UI_DALMATIAN_STATUSBAR__)
  857.     /* PMT VIKAS START 20051202 */
  858.     if (is_on_idlescreen() == 1)
  859.         /* PMT VIKAS END 20051202 */
  860.     {
  861.         MMI_status_icon_bars[0].n_icons = 0;    /* signal icon is now placed on title bar on idle screen. */
  862.     }
  863.     else
  864.     {
  865.         MMI_status_icons_list1[0] = STATUS_ICON_SIGNAL_STRENGTH;
  866.         MMI_status_icon_bars[0].n_icons = 1;
  867.     }
  868.     /* PMT VIKAS END 20050707 */
  869. #else 
  870.     MMI_status_icons_list1[0] = STATUS_ICON_SIGNAL_STRENGTH;
  871.     MMI_status_icons_list1[1] = STATUS_ICON_BATTERY_STRENGTH;
  872.     MMI_status_icon_bars[0].n_icons = 2;
  873. #endif 
  874.     /* PMT HIMANSHU END */
  875.     x1 = MMI_status_icon_bars[0].x1;    /* start x position of horizontal status bar main lcd */
  876.     y1 = MMI_status_icon_bars[0].y1;    /* start y position of horizontal status bar main lcd */
  877.     x2 = MMI_status_icon_bars[0].x2;    /* end x position of horizontal status bar main lcd */
  878.     y2 = MMI_status_icon_bars[0].y2;    /* end y position of horizontal status bar main lcd */
  879.     /* PMT HIMANSHU START 20050625 */
  880. #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  881.     /* PMT VIKAS START 20051202 */
  882.     if (is_on_idlescreen() == 0 && (!(GetActiveScreenId() == MAIN_MENU_SCREENID)))
  883.         /* PMT VIKAS END 20051202 */
  884.     {
  885.         /* Shift x1,x2 assuming signal strength and battery strength icons are at either ends  */
  886.         x1 += MMI_status_icons[MMI_status_icons_list1[0]].width - 1 + STATUS_ICON_X_GAP;
  887.         x2 = MMI_status_icons[MMI_status_icons_list1[1]].x - STATUS_ICON_X_GAP;
  888.     }
  889.     /* PMT VIKAS START 20050707 */
  890. #elif defined(__MMI_UI_DALMATIAN_STATUSBAR__)
  891.     /* PMT VIKAS START 20051202 */
  892.     if (is_on_idlescreen() == 0)
  893.         /* PMT VIKAS END 20051202 */
  894.     {
  895.         x1 += MMI_status_icons[MMI_status_icons_list1[0]].width - 1 + STATUS_ICON_X_GAP;
  896.     }
  897.     if (is_status_bar_shuffled == 0)
  898.     {
  899.         x2 = UI_device_width - MMI_STATUS_BAR_WIDTH;
  900.     }
  901.     else
  902.     {
  903.         x2 -= 6;
  904.     }
  905.     /* PMT VIKAS END 20050707 */
  906. #else 
  907.     /* Shift x1,x2 assuming signal strength and battery strength icons are at either ends  */
  908.     x1 += MMI_status_icons[MMI_status_icons_list1[0]].width - 1 + STATUS_ICON_X_GAP;
  909.     x2 = MMI_status_icons[MMI_status_icons_list1[1]].x - STATUS_ICON_X_GAP;
  910. #endif 
  911.     /* PMT HIMANSHU END */
  912. #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  913.     cy = y2 - y1 + 1;
  914. #else 
  915.     cy = (y2 - y1 + 1) >> 1;
  916. #endif 
  917.     /* PMT HIMANSHU START 20050625 */
  918. #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  919.     /* PMT VIKAS START 20051202 */
  920.     if (is_on_idlescreen() == 1)
  921.         /* PMT VIKAS END 20051202 */
  922.     {
  923.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].x = 1;
  924.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = MMI_status_bar_height
  925.             + MMI_IDLESCREEN_BAR_HEIGHT - 2 - MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height;
  926.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x = MAIN_LCD_device_width
  927.             - 1 - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].width;
  928.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].y = MMI_status_bar_height
  929.             + MMI_IDLESCREEN_BAR_HEIGHT - 2 - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].height;
  930.     }
  931.     else if (GetActiveScreenId() == MAIN_MENU_SCREENID)
  932.     {
  933.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].x = 1;
  934.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = MMI_status_bar_height
  935.             + MMI_title_height - MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height - 1;
  936.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x = MAIN_LCD_device_width
  937.             - 1 - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].width;
  938.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].y = MMI_status_bar_height
  939.             + MMI_title_height - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].height - 1;
  940.     }
  941.     else
  942.     {
  943.     #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  944.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].x = 1;
  945.         MMI_status_icons[0].y = cy - MMI_status_icons[0].height;
  946.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x = MAIN_LCD_device_width
  947.             - 1 - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].width;
  948.         MMI_status_icons[1].y = cy + 1 - MMI_status_icons[1].height;
  949.         x2 = MMI_status_icons[MMI_status_icons_list1[1]].x - STATUS_ICON_X_GAP;
  950.     #else /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  951.         MMI_status_icons[0].y = cy - (MMI_status_icons[0].height >> 1);
  952.         MMI_status_icons[1].y = cy - (MMI_status_icons[1].height >> 1);
  953.     #endif /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  954.     }
  955.     /* PMT VIKAS START 20050707 */
  956. #elif defined(__MMI_UI_DALMATIAN_STATUSBAR__)
  957. #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  958.     // set the position of signal strength icon.
  959.     //PMT VIKAS START 20051202
  960.     if (is_on_idlescreen() == 1)
  961.         /* PMT VIKAS END 20051202 */
  962.     {
  963.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y =
  964.             (MMI_title_height >> 1) - (MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height >> 1);
  965.     }
  966.     else
  967.     {
  968.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = cy - MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height;
  969.     }
  970. #else /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  971.     /* PMT VIKAS START 20051202 */
  972.     if (is_on_idlescreen() == 1)
  973.         /* PMT VIKAS END 20051202 */
  974.     {
  975.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y =
  976.             (MMI_title_height >> 1) - (MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height >> 1);
  977.     }
  978.     else
  979.     {
  980.         MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = cy - (MMI_status_icons[0].height >> 1);
  981.     }
  982. #endif /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  983.     /* PMT VIKAS END 20050707 */
  984. #else 
  985. #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  986.     /* PMT VIKAS START 20051010 */
  987. #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  988.     /* START VIJAY PMT 20060105 */
  989.     if (whether_status_bar_at_bottom())
  990.         /* END VIJAY PMT 20060105 */
  991.     {
  992.         MMI_status_icons[0].y =
  993.             UI_device_height - MMI_button_bar_height - 1 - (MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height + 2);
  994.         MMI_status_icons[1].y =
  995.             UI_device_height - MMI_button_bar_height - 1 - (MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].height + 2);
  996.     }
  997.     else
  998. #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  999.     {
  1000.         MMI_status_icons[0].y = cy - MMI_status_icons[0].height - 1;//080206 status icon
  1001.         MMI_status_icons[1].y = cy - MMI_status_icons[1].height - 1;
  1002.     }
  1003.     /* PMT VIKAS END 20051010 */
  1004. #else /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  1005.     /* PMT VIKAS START 20051010 */
  1006. #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  1007.     /* START VIJAY PMT 20060105 */
  1008.     if (whether_status_bar_at_bottom())
  1009.         /* END VIJAY PMT 20060105 */
  1010.     {
  1011.         MMI_status_icons[0].y =
  1012.             UI_device_height - MMI_button_bar_height - 1 - MMI_status_bar_height - 2 +
  1013.             ((MMI_status_bar_height - MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height) >> 1);
  1014.         MMI_status_icons[1].y =
  1015.             UI_device_height - MMI_button_bar_height - 1 - MMI_status_bar_height - 2 +
  1016.             ((MMI_status_bar_height - MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height) >> 1);
  1017.     }
  1018.     else
  1019. #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1020.     {
  1021.         MMI_status_icons[0].y = cy - (MMI_status_icons[0].height >> 1);
  1022.         MMI_status_icons[1].y = cy - (MMI_status_icons[1].height >> 1);
  1023.     }
  1024.     /* PMT VIKAS END 20051010 */
  1025. #endif /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  1026. #endif 
  1027.     /* PMT HIMANSHU END */
  1028.     i = 2;
  1029.     /* PMT HIMANSHU START 20050625 */
  1030. #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  1031.     /* PMT VIKAS START 20051202 */
  1032.     if ((is_on_idlescreen() == 1) || (GetActiveScreenId() == MAIN_MENU_SCREENID))
  1033.         /* PMT VIKAS END 20051202 */
  1034.     {
  1035.         x = (MAIN_LCD_device_width >> 1) - ((NumberOfDisplayedIcons()
  1036.                                              * (MMI_status_icons[2].width + STATUS_ICON_X_GAP)) >> 1)
  1037.                /*- STATUS_ICON_X_GAP */ ;
  1038.         if (x < (x1 + 2))
  1039.         {
  1040.             x = x1 + 2;
  1041.         }
  1042.     }
  1043.     else
  1044. #endif /* defined(__MMI_UI_TECHNO_STATUS_ICON__) */ 
  1045.         /* PMT HIMANSHU END */
  1046.         x = x1 + STATUS_ICON_X_GAP;
  1047.     while (!done)
  1048.     {
  1049.         display_flag = 0;
  1050.         j = MMI_status_icons_pool1[i];
  1051.         old_i = i;  /* 122004 Calvin added */
  1052.         i++;
  1053.         if (i > MMI_N_STATUS_ICONS_POOL1)
  1054.         {
  1055.             break;
  1056.         }
  1057.         if (TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))
  1058.         {
  1059.             k = j;
  1060.             display_flag = 1;
  1061.         }
  1062.         if ((MMI_status_icons[j].group_ID > 0))
  1063.         {
  1064.             group_ID = MMI_status_icons[j].group_ID;
  1065.             j++;
  1066.             inner_done = 0;
  1067.             while (!inner_done)
  1068.             {
  1069.                 if (group_ID != MMI_status_icons[j].group_ID)
  1070.                 {
  1071.                     break;
  1072.                 }
  1073.                 if ((!display_flag) && TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))
  1074.                 {
  1075.                     display_flag = 1;
  1076.                     k = j;
  1077.                 }
  1078.                 else
  1079.                 {
  1080.                     i++;
  1081.                     j++;
  1082.                 }
  1083.             }
  1084.         }
  1085.         if (display_flag)   /* if flagis set to display */
  1086.         {
  1087.             /* if((x+MMI_status_icons[k].width+STATUS_ICON_X_GAP)>x2) */
  1088.             if ((x + MMI_status_icons[k].width) > x2)   /* 022205 Calvin modfied */
  1089.             {                                           /* i--; */
  1090.                 i = old_i;                              /* 122004 Calvin changed */
  1091.                 break;
  1092.             }
  1093.         #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  1094.             /* PMT VIKAS START 20050707 */
  1095.         #if defined(__MMI_UI_DALMATIAN_STATUSBAR__) && defined(__MMI_MAINLCD_176X220__)
  1096.             y = cy - MMI_status_icons[k].height - 1;
  1097.         #else /* defined(__MMI_UI_DALMATIAN_STATUSBAR__) && defined(__MMI_MAINLCD_176X220__) */ 
  1098.             /* PMT VIKAS START 20051010 */
  1099.         #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  1100.             /* START VIJAY PMT 20060105 */
  1101.             if (whether_status_bar_at_bottom())
  1102.                 /* END VIJAY PMT 20060105 */
  1103.             {
  1104.                 y = UI_device_height - MMI_button_bar_height - 1 - MMI_status_icons[k].height - 2;
  1105.             }
  1106.             else
  1107.         #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1108.                 /* PMT VIKAS END 20051010 */
  1109.                 y = cy - MMI_status_icons[k].height - 1;//080206 status icon
  1110.         #endif /* defined(__MMI_UI_DALMATIAN_STATUSBAR__) && defined(__MMI_MAINLCD_176X220__) */ 
  1111.             /* PMT VIKAS END 20050707 */
  1112.         #else /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  1113.             /* PMT VIKAS START 20051010 */
  1114.         #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  1115.             /* START VIJAY PMT 20060105 */
  1116.             if (whether_status_bar_at_bottom())
  1117.                 /* END VIJAY PMT 20060105 */
  1118.             {
  1119.                 y = UI_device_height - MMI_button_bar_height - 1 - MMI_status_bar_height +
  1120.                     ((MMI_status_bar_height - MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].height) >> 1);
  1121.             }
  1122.             else
  1123.         #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1124.                 /* PMT VIKAS END 20051010 */
  1125.                 y = cy - (MMI_status_icons[k].height >> 1);
  1126.         #endif /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  1127.             MMI_status_icons[k].x = x;
  1128.             MMI_status_icons[k].y = y;
  1129.             x += MMI_status_icons[k].width + STATUS_ICON_X_GAP;
  1130.             MMI_status_icons_list1[MMI_status_icon_bars[0].n_icons] = (S16) k;
  1131.             MMI_status_icon_bars[0].n_icons++;
  1132.             if (MMI_status_icon_bars[0].n_icons >= MMI_N_STATUS_ICONS_LIST1)
  1133.             {
  1134.                 done = 1;
  1135.             }
  1136.         }
  1137.     }
  1138.     /* Status bar 2: Vertical bar */
  1139.     /* PMT VIKAS START 20050707 */
  1140. #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1141.     /* PMT VIKAS START 20051202 */
  1142.     if (is_on_idlescreen() == 1)
  1143.         /* PMT VIKAS END 20051202 */
  1144.     {
  1145.         MMI_status_icon_bars[1].n_icons = 0;    /* battery icon is now placed on title bar on idle screen. */
  1146.     }
  1147.     else
  1148.     {
  1149.         MMI_status_icons_list2[0] = STATUS_ICON_BATTERY_STRENGTH;
  1150.         MMI_status_icon_bars[1].n_icons = 1;
  1151.     }
  1152. #else /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1153.     MMI_status_icon_bars[1].n_icons = 0;
  1154. #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1155.     /* PMT VIKAS END 20050707 */
  1156.     x1 = MMI_status_icon_bars[1].x1;    /* start x position of vertical  status bar main lcd */
  1157.     y1 = MMI_status_icon_bars[1].y1;    /* start y position of vertical status bar main lcd */
  1158.     x2 = MMI_status_icon_bars[1].x2;    /* end x position of vertical status bar main lcd */
  1159.     y2 = MMI_status_icon_bars[1].y2;    /* end y position of horizontal status bar main lcd */
  1160.     /* PMT VIKAS START 20050707 */
  1161. #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1162.     /* to handle shuffling of status bar on idle screen. */
  1163.     if (is_status_bar_shuffled == 0)
  1164.     {
  1165.         x = 6;
  1166.     }
  1167.     else
  1168.     {
  1169.         x = 2 * MMI_STATUS_BAR_WIDTH - UI_device_width + STATUS_ICON_X_GAP;
  1170.     }
  1171.     /* PMT VIKAS START 20051202 */
  1172.     if (is_on_idlescreen() == 0)
  1173.         /* PMT VIKAS END 20051202 */
  1174.     {
  1175.         x2 = MMI_STATUS_BAR_WIDTH - MMI_status_icons[MMI_status_icons_list2[0]].width;
  1176.     }
  1177.     else
  1178.     {
  1179.         x2 = MMI_STATUS_BAR_WIDTH - 1;
  1180.     }
  1181. #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  1182.     /* PMT VIKAS START 20051202 */
  1183.     if (is_on_idlescreen() == 1)
  1184.         /* PMT VIKAS END 20051202 */
  1185.     {
  1186.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x =
  1187.             UI_device_width - 1 - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].width;
  1188.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].y =
  1189.             (MMI_title_height >> 1) - (MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].height >> 1);
  1190.     }
  1191.     else
  1192.     {
  1193.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x = (UI_device_width - 1)
  1194.             - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].width - MMI_status_icon_bars[1].x;
  1195.         MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].y = cy - MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].height;
  1196.     }
  1197. #else /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  1198.     /* PMT VIKAS START 20051202 */
  1199.     if (is_on_idlescreen() == 1)
  1200.         /* PMT VIKAS END 20051202 */
  1201.     {
  1202.         MMI_status_icons[1].y = MMI_title_height >> 1;
  1203.     }
  1204.     else
  1205.     {
  1206.         MMI_status_icons[1].y = cy - (MMI_status_icons[1].height >> 1);
  1207.     }
  1208. #endif /* (STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE) */ 
  1209. #else /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1210.     /* x2 = UI_device_width - MMI_status_icons[MMI_status_icons_list2[0]].width;//090605 StatusIcon Calvin moved */
  1211.     cx = (x2 - x1 + 1) >> 1;
  1212.     /* PMT VIKAS START 20051010 */
  1213. #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  1214.     /* START VIJAY PMT 20060105 */
  1215.     if (whether_status_bar_at_bottom())
  1216.         /* END VIJAY PMT 20060105 */
  1217.     {
  1218.         /* START VIJAY PMT 20060105 */
  1219.     #ifdef __MMI_MAINLCD_128X160__
  1220.         y = UI_device_height - MMI_button_bar_height - MMI_status_bar_height -
  1221.             ((MMI_status_icons[1].height + (STATUS_ICON_Y_GAP) << 1) + STATUS_ICON_Y_GAP + 2) - 1;
  1222.     #else /* __MMI_MAINLCD_128X160__ */ 
  1223.         y = UI_device_height - MMI_button_bar_height - MMI_status_bar_height -
  1224.             ((MMI_status_icons[1].height + (STATUS_ICON_Y_GAP) << 1) + STATUS_ICON_Y_GAP) - 1;
  1225.     #endif /* __MMI_MAINLCD_128X160__ */ 
  1226.         /* END VIJAY PMT 20060105 */
  1227.     }
  1228.     else
  1229. #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1230.     {
  1231.         y = STATUS_ICON_Y_GAP;
  1232.     }
  1233.     /* PMT VIKAS END 20051010 */
  1234. #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1235.     /* PMT VIKAS END 20050707 */
  1236.     done = 0;
  1237.     while (!done)
  1238.     {
  1239.         display_flag = 0;
  1240.         j = MMI_status_icons_pool1[i];
  1241.         old_i = i;
  1242.         i++;
  1243.         if (i > MMI_N_STATUS_ICONS_POOL1)
  1244.         {
  1245.             break;
  1246.         }
  1247.         if (TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))     /* check if the flag is on /off */
  1248.         {
  1249.             k = j;
  1250.             display_flag = 1;
  1251.         }
  1252.         if ((MMI_status_icons[j].group_ID > 0))
  1253.         {
  1254.             group_ID = MMI_status_icons[j].group_ID;
  1255.             j++;
  1256.             inner_done = 0;
  1257.             while (!inner_done)
  1258.             {
  1259.                 if (group_ID != MMI_status_icons[j].group_ID)
  1260.                 {
  1261.                     break;
  1262.                 }
  1263.                 if ((!display_flag) && TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))
  1264.                 {
  1265.                     display_flag = 1;
  1266.                     k = j;
  1267.                 }
  1268.                 else
  1269.                 {
  1270.                     i++;
  1271.                     j++;
  1272.                 }
  1273.             }
  1274.         }
  1275.         if (display_flag)
  1276.         {
  1277.             /* PMT VIKAS START 20050707 */
  1278.         #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1279.             /* to handle horizontal alignment of status bar. */
  1280.             if ((x + MMI_status_icons[k].width + STATUS_ICON_X_GAP) > x2)
  1281.         #else /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1282.             /* PMT VIKAS START 20051217 */
  1283.         #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  1284.             if ((y - MMI_status_icons[k].height) < y1)
  1285.         #else /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1286.             /* if((y1+y+MMI_status_icons[k].height+STATUS_ICON_Y_GAP)>y2) */
  1287.             if ((y1 + y + MMI_status_icons[k].height) > y2) /* 022205 Calvin modified */
  1288.         #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1289.                 /* PMT VIKAS END 20051217 */
  1290.         #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1291.                 /* PMT VIKAS END 20050707 */
  1292.             {                                               /* i--; */
  1293.                 i = old_i;
  1294.                 break;
  1295.             }
  1296.             /* PMT VIKAS START 20050707 */
  1297.         #ifndef __MMI_UI_DALMATIAN_STATUSBAR__
  1298.             x = cx - (MMI_status_icons[k].width >> 1);
  1299.         #endif 
  1300.             /* PMT VIKAS END 20050707 */
  1301.             MMI_status_icons[k].x = x;  /* set the x and y position of icon */
  1302.             MMI_status_icons[k].y = y;
  1303.             /* PMT VIKAS START 20050707 */
  1304.         #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1305.             x += MMI_status_icons[k].width + STATUS_ICON_X_GAP;
  1306.         #else /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1307.             /* PMT VIKAS START 20051010 */
  1308.         #ifdef __MMI_UI_STATUS_BAR_AT_BOTTOM__
  1309.             /* START VIJAY PMT 20060105 */
  1310.             if (whether_status_bar_at_bottom())
  1311.                 /* END VIJAY PMT 20060105 */
  1312.             {
  1313.                 y = MMI_status_icons[k].y - (MMI_status_icons[k].height + STATUS_ICON_Y_GAP);
  1314.             }
  1315.         #else /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1316.             y += MMI_status_icons[k].height + STATUS_ICON_Y_GAP;
  1317.         #endif /* __MMI_UI_STATUS_BAR_AT_BOTTOM__ */ 
  1318.             /* PMT VIKAS END 20051010 */
  1319.         #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1320.             /* PMT VIKAS END 20050707 */
  1321.             MMI_status_icons_list2[MMI_status_icon_bars[1].n_icons] = (S16) k;
  1322.             MMI_status_icon_bars[1].n_icons++;
  1323.             if (MMI_status_icon_bars[1].n_icons >= MMI_N_STATUS_ICONS_LIST2)
  1324.             {
  1325.                 done = 1;
  1326.             }
  1327.         }
  1328.     }
  1329.     /* Status bar 3: Sub LCD status bar */
  1330.     /* MTK Leo add 20040415, arrange status icons in sublcd by priority */
  1331.     MMI_status_icons_list3[0] = STATUS_ICON_SUBLCD_SIGNAL_STRENGTH;
  1332.     MMI_status_icons_list3[1] = STATUS_ICON_SUBLCD_BATTERY_STRENGTH;
  1333.     MMI_status_icon_bars[2].n_icons = 2;
  1334.     x1 = MMI_status_icon_bars[2].x1;    /* start x position of status bar sub lcd */
  1335.     y1 = MMI_status_icon_bars[2].y1;    /* start y position of status bar sub lcd */
  1336.     x2 = MMI_status_icon_bars[2].x2;    /* end x position of status bar sub lcd */
  1337.     y2 = MMI_status_icon_bars[2].y2;    /* end y position of status bar sub lcd */
  1338.     /* Shift x1,x2 assuming signal strength and battery strength icons are at either ends  */
  1339.     x1 += MMI_status_icons[MMI_status_icons_list3[0]].width - 1 + SUBLCD_STATUS_ICON_X_GAP;
  1340.     x2 = MMI_status_icons[MMI_status_icons_list3[1]].x - SUBLCD_STATUS_ICON_X_GAP;
  1341.     /* MTK Leo end */
  1342. #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  1343.     cy = y2 - y1 - 1;
  1344. #else 
  1345.     cy = (y2 - y1 + 1) >> 1;
  1346. #endif 
  1347.     x = x1 + SUBLCD_STATUS_ICON_X_GAP;
  1348. #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  1349.     cy = MMI_status_icon_bars[2].y2 - MMI_status_icon_bars[2].y1 - 1;
  1350. #endif 
  1351.     done = 0;
  1352.     i = 2;
  1353.     while (!done)
  1354.     {
  1355.         display_flag = 0;
  1356.         j = MMI_status_icons_pool2[i];
  1357.         i++;
  1358.         if (i > MMI_N_STATUS_ICONS_POOL2)
  1359.         {
  1360.             break;
  1361.         }
  1362.         if (TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))
  1363.         {
  1364.             k = j;
  1365.             display_flag = 1;
  1366.         }
  1367.         if ((MMI_status_icons[j].group_ID > 0))
  1368.         {
  1369.             group_ID = MMI_status_icons[j].group_ID;
  1370.             j++;
  1371.             inner_done = 0;
  1372.             while (!inner_done)
  1373.             {
  1374.                 if (group_ID != MMI_status_icons[j].group_ID)
  1375.                 {
  1376.                     break;
  1377.                 }
  1378.                 if ((!display_flag) && TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))
  1379.                 {
  1380.                     display_flag = 1;
  1381.                     k = j;
  1382.                 }
  1383.                 else
  1384.                 {
  1385.                     i++;
  1386.                     j++;
  1387.                 }
  1388.             }
  1389.         }
  1390.         if (display_flag)
  1391.         {
  1392.             //MTK Leo add 20040415, arrange status icons in sublcd by priority
  1393.             //if ( x + MMI_status_icons[k].width+SUBLCD_STATUS_ICON_X_GAP > x2 )
  1394.             if (x + MMI_status_icons[k].width > x2) /* 022205 Calvin modified */
  1395.             {
  1396.                 break;
  1397.             }
  1398.             MMI_status_icons_list3[MMI_status_icon_bars[2].n_icons] = (S16) k;
  1399.             MMI_status_icon_bars[2].n_icons++;
  1400.         #if(STATUS_ICONS_DRAW_FROM_BOTTOM_BASELINE)
  1401.             y = cy - MMI_status_icons[k].height;
  1402.         #else 
  1403.             y = cy - (MMI_status_icons[k].height >> 1);
  1404.         #endif 
  1405.             MMI_status_icons[k].x = x;
  1406.             MMI_status_icons[k].y = y;
  1407.             x += MMI_status_icons[k].width + SUBLCD_STATUS_ICON_X_GAP;
  1408.             /* MTK Leo end */
  1409.         }
  1410.     }
  1411. #ifdef __MMI_LCD_PARTIAL_ON__
  1412.     /* Extra status bar: Used in LCD partial display */
  1413.     MMI_status_icons_partial_display_n_icons = 0;
  1414.     done = 0;
  1415.     i = 0;
  1416.     while (!done)
  1417.     {
  1418.         display_flag = 0;
  1419.         j = MMI_status_icons_pool_partial_display[i];
  1420.         i++;
  1421.         if (i > MMI_N_STATUS_ICONS_POOL_PARTIAL_DISPLAY)
  1422.         {
  1423.             break;
  1424.         }
  1425.         if (TEST_STATUS_ICON_DISPLAY_ON(MMI_status_icons[j].flags))
  1426.         {
  1427.             k = j;
  1428.             display_flag = 1;
  1429.         }
  1430.         if (display_flag)
  1431.         {
  1432.             MMI_status_icons_list_partial_display[MMI_status_icons_partial_display_n_icons] = (S16) k;
  1433.             MMI_status_icons_partial_display_n_icons++;
  1434.             if (MMI_status_icons_partial_display_n_icons >= MMI_N_STATUS_ICONS_PARTIAL_DISPLAY)
  1435.             {
  1436.                 done = 1;
  1437.             }
  1438.         }
  1439.     }
  1440. #endif /* __MMI_LCD_PARTIAL_ON__ */ 
  1441. #endif /* (0) */ 
  1442. }
  1443. /*****************************************************************************
  1444.  * FUNCTION
  1445.  *  hide_status_icon_bars
  1446.  * DESCRIPTION
  1447.  *  call hide function of status bar (horizontal/vertical status bar of main
  1448.  *  lcd and horizontal status bar of sub lcd
  1449.  * PARAMETERS
  1450.  *  void
  1451.  * RETURNS
  1452.  *  void
  1453.  *****************************************************************************/
  1454. void hide_status_icon_bars(void)
  1455. {
  1456.     /*----------------------------------------------------------------*/
  1457.     /* Local Variables                                                */
  1458.     /*----------------------------------------------------------------*/
  1459.     S32 i;
  1460.     /*----------------------------------------------------------------*/
  1461.     /* Code Body                                                      */
  1462.     /*----------------------------------------------------------------*/
  1463.     for (i = 0; i < MAX_STATUS_ICON_BARS; i++)
  1464.     {
  1465.         /* if ( MMI_status_icon_bars[i].flags & STATUS_ICON_BAR_DISPLAY  && MMI_status_icon_bars[i].n_icons>0 ) */
  1466.         if (MMI_status_icon_bars[i].flags & STATUS_ICON_BAR_DISPLAY)    /* 101805 stopwatch icon Calvin changed because re-arragne earlier */
  1467.         {
  1468.             if (MMI_status_icon_bars[i].graphics_context == &main_LCD_device_bitmap)
  1469.             {
  1470.                 if (status_icon_display_area != SUBLCD_ONLY)
  1471.                 {
  1472.                     MMI_hide_status_icon_bars[i] ();    /* execute the hide function of status bar */
  1473.                 }
  1474.             }
  1475.             else if (MMI_status_icon_bars[i].graphics_context == &sub_LCD_device_bitmap)
  1476.             {
  1477.                 if (status_icon_display_area != MAINLCD_ONLY)
  1478.                 {
  1479.                     MMI_hide_status_icon_bars[i] ();    /* execute the hide function of status bar */
  1480.                 }
  1481.             }
  1482.         }
  1483.     }
  1484. }
  1485. /*****************************************************************************
  1486.  * FUNCTION
  1487.  *  refresh_fixed_status_icon
  1488.  * DESCRIPTION
  1489.  *  refrsh particulr icon of status bar
  1490.  * PARAMETERS
  1491.  *  icon_id     [IN]        
  1492.  *  bar_id      [IN]        
  1493.  * RETURNS
  1494.  *  void
  1495.  *****************************************************************************/
  1496. #ifdef __MMI_IDLE_FULL_SCREEN__
  1497. extern U16 on_idle_screen;
  1498. #endif 
  1499. extern void draw_wallpaper(void);
  1500. extern U16 GetActiveScreenId(void);
  1501. /* extern color wgui_transparent_color;//112205 transparent color Calvin */
  1502. #ifdef __MMI_SUB_WALLPAPER__
  1503. /* extern color wgui_transparent_color;//112205 transparent color Calvin */
  1504. extern int is_sub_idle_screen;
  1505. extern void cat312_hide_status_icon_bar(void);
  1506. #endif /* __MMI_SUB_WALLPAPER__ */ 
  1507. GDI_HANDLE wgui_status_icon_display_layer = GDI_LAYER_EMPTY_HANDLE;
  1508. void refresh_fixed_status_icon(S16 icon_id, S16 bar_id)
  1509. {
  1510.     /*----------------------------------------------------------------*/
  1511.     /* Local Variables                                                */
  1512.     /*----------------------------------------------------------------*/
  1513.     /*----------------------------------------------------------------*/
  1514.     /* Code Body                                                      */
  1515.     /*----------------------------------------------------------------*/
  1516.     /* PMT VIKAS START 20050707 */
  1517. #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1518.     // for refreshing the signal and battery icon on idle screen.
  1519.     //PMT VIKAS START 20051202
  1520.     if ((is_on_idlescreen()) ||
  1521.         ((status_icon_display_ON) && (MMI_status_icon_bars[bar_id].flags & STATUS_ICON_BAR_DISPLAY)))
  1522.         /* PMT VIKAS END 20051202 */
  1523. #else /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1524.     if ((status_icon_display_ON) && (MMI_status_icon_bars[bar_id].flags & STATUS_ICON_BAR_DISPLAY))
  1525. #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1526.         /* PMT VIKAS END 20050707 */
  1527.     {
  1528.         S32 x1, x2, y1, y2;
  1529.         /* backup active lcd */
  1530.         bitmap *saved_graphics_context = current_LCD_device_bitmap;
  1531.         color c;
  1532.         /* PMT VIKAS START 20050707 */
  1533.     #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1534.         /* filler is not required for sub-LCD. */
  1535.         if (bar_id != 2)
  1536.             /* c = MMI_status_icon_bars[bar_id].normal_bar_filler->c; */
  1537.         {
  1538.             c = current_MMI_theme->LSK_up_filler->c;
  1539.         }
  1540.         /* PMT VIKAS START 20051202 */
  1541.         if (is_on_idlescreen() == 1)
  1542.             /* PMT VIKAS END 20051202 */
  1543.         {
  1544.             x1 = MMI_status_icons[icon_id].x;
  1545.             y1 = MMI_status_icons[icon_id].y;
  1546.         }
  1547.         else
  1548.         {
  1549.             x1 = MMI_status_icon_bars[bar_id].x + MMI_status_icons[icon_id].x;  /* x start position of icon */
  1550.             y1 = MMI_status_icon_bars[bar_id].y + MMI_status_icons[icon_id].y;  /* y start poition of icon */
  1551.         }
  1552.     #else /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1553.         if (current_MMI_theme != NULL)
  1554.         {
  1555.             c = *current_MMI_theme->statusbar0_background_color;        /*  Color is currently hardcoded: must be calling hide function instead  */
  1556.         }
  1557.         else
  1558.         {
  1559.             c = gui_color(216, 212, 212);
  1560.         }
  1561.         /* set drawing region */
  1562.         x1 = MMI_status_icons[icon_id].x;   /* x start position of icon */
  1563.         y1 = MMI_status_icons[icon_id].y;   /* y start poition of icon */
  1564.     #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1565.         /* PMT VIKAS END 20050707 */
  1566.         x2 = x1 + MMI_status_icons[icon_id].width - 1;  /* x end position of icon */
  1567.         y2 = y1 + MMI_status_icons[icon_id].height - 1; /* y end position of icon */
  1568.         /* set active lcd */
  1569.         if (bar_id == 2)
  1570.         {
  1571.             UI_set_sub_LCD_graphics_context();  /* if barid is equal to 2 then switch the graphic context to sub lcd. */
  1572.         }
  1573.         else
  1574.         {
  1575.             UI_set_main_LCD_graphics_context(); /* switch graphic context to main lcd if bar id is eqaul to 0 or 1 */
  1576.         }
  1577.         if (wgui_status_icon_display_layer != GDI_LAYER_EMPTY_HANDLE)
  1578.         {
  1579.             gdi_layer_push_and_set_active(wgui_status_icon_display_layer);
  1580.         }
  1581.         /* lock frame buffer */
  1582.         gdi_layer_lock_frame_buffer();
  1583.         
  1584.         /* 061506 double buffer Start */
  1585.         if(get_status_icon_bar_layer((U8)bar_id)!=GDI_ERROR_HANDLE)
  1586.         {
  1587.             gdi_layer_push_and_set_active(get_status_icon_bar_layer((U8)bar_id));
  1588.         }
  1589.         /* 061506 double buffer End */
  1590.         /* set clip region */
  1591.         gui_push_clip();
  1592.         gui_set_clip(x1, y1, x2, y2);
  1593.         if (bar_id == 2)    /* SUBLCD status icons */
  1594.         {
  1595.         #ifdef __MMI_SUB_WALLPAPER__
  1596.             if (is_sub_idle_screen)
  1597.                 /* Leo start 20050811 */
  1598.             {
  1599.                 gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_TRANSPARENT);
  1600.             }
  1601.             /* Leo end 20050811 */
  1602.             else
  1603.             {
  1604.                 show_sublcd_status_background(x1, y1, x2, y2, MMI_TRUE);
  1605.             }
  1606.         #else /* __MMI_SUB_WALLPAPER__ */ 
  1607.             show_sublcd_status_background(x1, y1, x2, y2, MMI_TRUE);
  1608.         #endif /* __MMI_SUB_WALLPAPER__ */ 
  1609.         }
  1610.         else
  1611.         {
  1612.         #ifdef __MMI_IDLE_FULL_SCREEN__
  1613.             if (on_idle_screen == 0)
  1614.             {
  1615.                 /* PMT HIMANSHU START 20050625 */
  1616.             #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  1617.                 if (GetActiveScreenId() == MAIN_MENU_SCREENID)
  1618.                     /* PMT VIKAS START 20050718 */
  1619.                 {
  1620.                     gui_fill_rectangle(x1, y1, x2, y2, current_UI_theme->window_title_theme->active_filler->c);
  1621.                 }
  1622.                 //PMT VIKAS END 20050718
  1623.                 //PMT VIKAS START 20050707
  1624.             #elif defined(__MMI_UI_DALMATIAN_STATUSBAR__)
  1625.                 show_status_icons();
  1626.                 /* PMT VIKAS END 20050707 */
  1627.             #else 
  1628.                 /* 082305 Calvin Start */
  1629.                 if (wgui_is_wallpaper_on_bottom() == MMI_TRUE)
  1630.                 {
  1631.                     gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_TRANSPARENT);
  1632.                 }
  1633.                 else
  1634.                 {
  1635.                     gui_fill_rectangle(x1, y1, x2, y2, c);  /* fill the icon position with grey color */
  1636.                 }
  1637.                 /* 082305 Calvin End */
  1638.                 //if(g_idle_context.IsOnIdleScreen == 1 && mmi_bootup_is_idle_screen_reached() == MMI_TRUE)//011906 signal Calvin removed
  1639.                 //  draw_wallpaper();
  1640.             #endif 
  1641.                 /* PMT HIMANSHU END */
  1642.             }
  1643.             else
  1644.             {
  1645.             #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  1646. //KP Jerry modify on 2007-1-5 start
  1647. #ifndef __MMI_UI_TECHNO_IDLESCREEN_BAR_HALF_TRANSPARENT_DISPLAY__
  1648.                 gui_show_image(0, MMI_status_bar_height, get_image(idlescreen_bar_id));//070306 Alpha layer
  1649. #else
  1650. gui_reset_clip();
  1651. gui_lock_double_buffer();
  1652. gdi_draw_solid_rect(0,MMI_status_bar_height,UI_device_width-1,MMI_status_bar_height+MMI_IDLESCREEN_BAR_HEIGHT-1,GDI_COLOR_HALF_TRANSPARENT);
  1653. gui_unlock_double_buffer();
  1654. gui_BLT_double_buffer(0,MMI_status_bar_height,UI_device_width-1,MMI_status_bar_height+MMI_IDLESCREEN_BAR_HEIGHT-1);
  1655. #endif
  1656. //KP Jerry modify on 2007-1-5 end
  1657.             #elif defined(__MMI_UI_DALMATIAN_STATUSBAR__)
  1658.                 gui_draw_filled_area(
  1659.                     MMI_title_x,
  1660.                     MMI_title_y,
  1661.                     MMI_title_x + MMI_title_width - 1,
  1662.                     MMI_title_y + MMI_title_height - 1,
  1663.                     current_UI_theme->window_title_theme->active_filler);
  1664.                 /* PMT VIKAS START 20050720 */
  1665.             #ifdef __MMI_UI_ANIMATED_TITLE_EFFECT__
  1666.                 if (is_enable_animated_title_effect())
  1667.                 {
  1668.                     wgui_draw_animate_title_image_frame_0(
  1669.                         MMI_title_x,
  1670.                         MMI_title_y,
  1671.                         MMI_title_x + MMI_title_width - 1,
  1672.                         MMI_title_y + MMI_title_height - 1);
  1673.                 }
  1674.             #endif /* __MMI_UI_ANIMATED_TITLE_EFFECT__ */ 
  1675.                 /* PMT VIKAS END 20050720 */
  1676.             #else 
  1677.             #ifdef __GDI_MEMORY_PROFILE_2__
  1678.                 /* gui_fill_rectangle(x1,y1,x2,y2,wgui_transparent_color); */
  1679.                 gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_TRANSPARENT);     /* 112205 transparent color Calvin */
  1680.             #else /* __GDI_MEMORY_PROFILE_2__ */ 
  1681.                 draw_wallpaper();
  1682.             #endif /* __GDI_MEMORY_PROFILE_2__ */ 
  1683.             #endif 
  1684.             }
  1685.         #else /* __MMI_IDLE_FULL_SCREEN__ */ 
  1686.             gui_fill_rectangle(x1, y1, x2, y2, c);  /* fill the icon position with grey color */
  1687.         #endif /* __MMI_IDLE_FULL_SCREEN__ */ 
  1688.         }
  1689.         /* show the icon */
  1690.     #ifdef __MMI_DOWNLOADABLE_THEMES_SUPPORT__
  1691.         if (mmi_tm_does_theme_have_alt_image())
  1692.         {
  1693.             if (mmi_tm_is_theme_dirty_bit_set(GetImageIndex(MMI_status_icons[icon_id].icon_ID)))
  1694.             {
  1695.                 MMI_status_icons[icon_id].icon_data = get_image(MMI_status_icons[icon_id].icon_ID);
  1696.                 /* No need to calculate Image width, height and frames as they will not change */
  1697.             }
  1698.         }
  1699.     #endif /* __MMI_DOWNLOADABLE_THEMES_SUPPORT__ */ 
  1700.         /* PMT HIMANSHU START 20050625 */
  1701.     #if defined(__MMI_UI_TECHNO_STATUS_ICON__)
  1702.         /* for showing the animated battery icon when charger is connected. */
  1703.         if (MMI_status_icons[icon_id].flags & STATUS_ICON_ANIMATE)
  1704.         {
  1705.             gui_show_transparent_animated_image_frame(
  1706.                 x1,
  1707.                 y1,
  1708.                 MMI_status_icons[icon_id].icon_data,
  1709.                 0,
  1710.                 MMI_status_icons[icon_id].current_frame);
  1711.             /* 091505 bettery Calvin removed to status_icon_timer_callback */
  1712.         #if 0
  1713. /* under construction !*/
  1714. /* under construction !*/
  1715. /* under construction !*/
  1716.         #endif /* 0 */ 
  1717.             /* 091505 bettery Calvin end */
  1718.         }
  1719.         else
  1720.     #endif /* defined(__MMI_UI_TECHNO_STATUS_ICON__) */ 
  1721.             //PMT HIMANSHU END
  1722.             //PMT VIKAS START 20050707
  1723.     #ifdef __MMI_UI_DALMATIAN_STATUSBAR__
  1724.             /* for showing the animated battery icon when charger is connected. */
  1725.         if (MMI_status_icons[icon_id].flags & STATUS_ICON_ANIMATE)
  1726.         {
  1727.             gui_show_transparent_animated_image_frame(
  1728.                 x1,
  1729.                 y1,
  1730.                 MMI_status_icons[icon_id].icon_data,
  1731.                 0,
  1732.                 MMI_status_icons[icon_id].current_frame);
  1733.             /* 091505 bettery Calvin removed to status_icon_timer_callback */
  1734.         #if 0
  1735. /* under construction !*/
  1736. /* under construction !*/
  1737. /* under construction !*/
  1738.         #endif /* 0 */ 
  1739.             /* 091505 bettery Calvin end */
  1740.         }
  1741.         else
  1742.     #endif /* __MMI_UI_DALMATIAN_STATUSBAR__ */ 
  1743.             /* PMT VIKAS END 20050707 */
  1744.             gdi_image_draw_animation_single_frame(
  1745.                 x1,
  1746.                 y1,
  1747.                 MMI_status_icons[icon_id].icon_data,
  1748.                 MMI_status_icons[icon_id].state);
  1749.         /* restoer clip region */
  1750.         gui_pop_clip();
  1751.         
  1752.         /* 061506 double buffer Start */
  1753.         if(get_status_icon_bar_layer((U8)bar_id)!=GDI_ERROR_HANDLE)
  1754.         {
  1755.             gdi_layer_pop_and_restore_active();
  1756.         }
  1757.         /* 061506 double buffer End */
  1758.         /* unlock and blt frame buffer */
  1759.         gdi_layer_unlock_frame_buffer();
  1760.         gui_BLT_double_buffer(x1, y1, x2, y2);
  1761.         /* 061506 double buffer Start */
  1762.         if(get_status_icon_bar_type((U8)bar_id)&STATUS_ICON_BAR_ENABLE_DOUBLE_BUFFER)
  1763.         {
  1764.             gdi_layer_push_and_set_active(get_status_icon_bar_layer((U8)bar_id));
  1765.             gdi_layer_toggle_double();
  1766.             gdi_layer_copy_double();//070306 copy double
  1767.             gdi_layer_pop_and_restore_active();
  1768.         }
  1769.         /* 061506 double buffer Start */
  1770.         if (wgui_status_icon_display_layer != GDI_LAYER_EMPTY_HANDLE)
  1771.         {
  1772.             gdi_layer_pop_and_restore_active();
  1773.         }
  1774.         /* restore active lcd according to backuped lcd */
  1775.         if (saved_graphics_context == &main_LCD_device_bitmap)
  1776.         {
  1777.             UI_set_main_LCD_graphics_context();
  1778.         }
  1779.         else if (saved_graphics_context == &sub_LCD_device_bitmap)
  1780.         {
  1781.             UI_set_sub_LCD_graphics_context();
  1782.         }
  1783.     }
  1784. }
  1785. /*****************************************************************************
  1786.  * FUNCTION
  1787.  *  refresh_status_icon_display
  1788.  * DESCRIPTION
  1789.  *  refrsh all status bar icons
  1790.  * PARAMETERS
  1791.  *  void
  1792.  *  S16(?)      [IN]        Bar_id
  1793.  * RETURNS
  1794.  *  void
  1795.  *****************************************************************************/
  1796. void refresh_status_icon_display(void)
  1797. {
  1798.     /*----------------------------------------------------------------*/
  1799.     /* Local Variables                                                */
  1800.     /*----------------------------------------------------------------*/
  1801.     S32 idx = 0;//061506 double buffer
  1802.     S32 is_status_layer_pushed = 0;
  1803.     
  1804.     /*----------------------------------------------------------------*/
  1805.     /* Code Body                                                      */
  1806.     /*----------------------------------------------------------------*/
  1807.     if (status_icon_display_ON)
  1808.     {
  1809.         /* backup active lcd */
  1810.         bitmap *saved_graphics_context = current_LCD_device_bitmap;
  1811.         S32 i;
  1812.         if (wgui_status_icon_display_layer != GDI_LAYER_EMPTY_HANDLE)
  1813.         {
  1814.             gdi_layer_push_and_set_active(wgui_status_icon_display_layer);
  1815.             is_status_layer_pushed = 1;
  1816.         }
  1817.         /* lock frame buffer */
  1818.         gui_lock_double_buffer();
  1819.         /* hide all status bars */
  1820.         hide_status_icon_bars();
  1821.         /* show all status bar icons */
  1822.         show_status_icons();
  1823.         /* unlock frame buffer */
  1824.         gui_unlock_double_buffer();
  1825.         for (i = 0; i < MAX_STATUS_ICON_BARS; i++)
  1826.         {
  1827.             if (MMI_status_icon_bars[i].flags & STATUS_ICON_BAR_DISPLAY)
  1828.             {
  1829.                 if (MMI_status_icon_bars[i].graphics_context == &main_LCD_device_bitmap)
  1830.                 {
  1831.                     if (status_icon_display_area != SUBLCD_ONLY)
  1832.                     {
  1833.                         UI_set_main_LCD_graphics_context(); /* switch to main lcd graphic context */
  1834.                         gui_BLT_double_buffer(
  1835.                             MMI_status_icon_bars[i].x1,
  1836.                             MMI_status_icon_bars[i].y1,
  1837.                             MMI_status_icon_bars[i].x2,
  1838.                             MMI_status_icon_bars[i].y2);
  1839.                     }
  1840.                 }
  1841.                 else if (MMI_status_icon_bars[i].graphics_context == &sub_LCD_device_bitmap)
  1842.                 {
  1843.                     if (status_icon_display_area != MAINLCD_ONLY)
  1844.                     {
  1845.                         UI_set_sub_LCD_graphics_context();  /* switch to sub lcd graphic context */
  1846.                         gui_BLT_double_buffer(
  1847.                             MMI_status_icon_bars[i].x1,
  1848.                             MMI_status_icon_bars[i].y1,
  1849.                             MMI_status_icon_bars[i].x2,
  1850.                             MMI_status_icon_bars[i].y2);
  1851.                     }
  1852.                 }
  1853.             }
  1854.         }
  1855.         /* 061506 double buffer Start */
  1856.         for (idx=0; idx<MAX_STATUS_ICON_BARS; idx++)
  1857.         {
  1858.             if(get_status_icon_bar_type((U8)idx)&STATUS_ICON_BAR_ENABLE_DOUBLE_BUFFER)
  1859.             {
  1860.                 gdi_layer_push_and_set_active(get_status_icon_bar_layer((U8)idx));
  1861.                 gdi_layer_toggle_double();
  1862.                 gdi_layer_copy_double();//070306 copy double
  1863.                 gdi_layer_pop_and_restore_active();
  1864.             }
  1865.         }
  1866.         /* 061506 double buffer Start */
  1867.     
  1868.         /* restore active lcd according to backuped lcd */
  1869.         if (saved_graphics_context == &main_LCD_device_bitmap)
  1870.         {
  1871.             UI_set_main_LCD_graphics_context();
  1872.         }
  1873.         else if (saved_graphics_context == &sub_LCD_device_bitmap)
  1874.         {
  1875.             UI_set_sub_LCD_graphics_context();
  1876.         }
  1877.         if (/*(wgui_status_icon_display_layer != GDI_LAYER_EMPTY_HANDLE) && */(is_status_layer_pushed == 1))
  1878.         {
  1879.             gdi_layer_pop_and_restore_active();
  1880.         }
  1881.     }
  1882. }
  1883. /*****************************************************************************
  1884.  * FUNCTION
  1885.  *  animate_status_icon
  1886.  * DESCRIPTION
  1887.  *  animate teh status icon
  1888.  * PARAMETERS
  1889.  *  icon_ID         [IN]        
  1890.  *  icon_id(?)      [IN]        
  1891.  * RETURNS
  1892.  *  void
  1893.  *****************************************************************************/
  1894. void animate_status_icon(S16 icon_ID)
  1895. {
  1896.     /*----------------------------------------------------------------*/
  1897.     /* Local Variables                                                */
  1898.     /*----------------------------------------------------------------*/
  1899.     /*----------------------------------------------------------------*/
  1900.     /* Code Body                                                      */
  1901.     /*----------------------------------------------------------------*/
  1902.     if ((icon_ID < 0) || (icon_ID >= MAX_STATUS_ICONS))
  1903.     {
  1904.         return;
  1905.     }
  1906.     /* set the flaf of icon animated */
  1907.     MMI_status_icons[icon_ID].flags |= STATUS_ICON_ANIMATE; /* set the flag of icon to animate */
  1908.     /* set teh currenty frame to zero */
  1909.     MMI_status_icons[icon_ID].current_frame = 0;
  1910.     setup_status_icon_blink_animate();
  1911. }
  1912. /*****************************************************************************
  1913.  * FUNCTION
  1914.  *  forward_animate_status_icon
  1915.  * DESCRIPTION
  1916.  *  show the animation of icon such that it is moving forward direction
  1917.  * PARAMETERS
  1918.  *  icon_ID         [IN]        
  1919.  *  icon_id(?)      [IN]        
  1920.  * RETURNS
  1921.  *  void
  1922.  *****************************************************************************/
  1923. void forward_animate_status_icon(S16 icon_ID)
  1924. {
  1925.     /*----------------------------------------------------------------*/
  1926.     /* Local Variables                                                */
  1927.     /*----------------------------------------------------------------*/
  1928.     /*----------------------------------------------------------------*/
  1929.     /* Code Body                                                      */
  1930.     /*----------------------------------------------------------------*/
  1931.     if ((icon_ID < 0) || (icon_ID >= MAX_STATUS_ICONS))
  1932.     {
  1933.         return;
  1934.     }
  1935.     /* set teh flag of icon to forward animate */
  1936.     MMI_status_icons[icon_ID].flags |= STATUS_ICON_FORWARD_ANIMATE;
  1937.     setup_status_icon_blink_animate();
  1938. }
  1939. /*****************************************************************************
  1940.  * FUNCTION
  1941.  *  reverse_animate_status_icon
  1942.  * DESCRIPTION
  1943.  *  show the animation of icon such that it is moving in reverse ditrection
  1944.  * PARAMETERS
  1945.  *  icon_ID         [IN]        
  1946.  *  icon_id(?)      [IN]        
  1947.  * RETURNS
  1948.  *  void
  1949.  *****************************************************************************/
  1950. void reverse_animate_status_icon(S16 icon_ID)
  1951. {
  1952.     /*----------------------------------------------------------------*/
  1953.     /* Local Variables                                                */
  1954.     /*----------------------------------------------------------------*/
  1955.     /*----------------------------------------------------------------*/
  1956.     /* Code Body                                                      */
  1957.     /*----------------------------------------------------------------*/
  1958.     if ((icon_ID < 0) || (icon_ID >= MAX_STATUS_ICONS))
  1959.     {
  1960.         return;
  1961.     }
  1962.     /* set the flag of icon to reverse animate */
  1963.     MMI_status_icons[icon_ID].flags |= STATUS_ICON_REVERSE_ANIMATE;
  1964.     setup_status_icon_blink_animate();
  1965. }
  1966. /*****************************************************************************
  1967.  * FUNCTION
  1968.  *  blink_status_icon
  1969.  * DESCRIPTION
  1970.  *  set teh flag of icon as blink and shw the blinking icon
  1971.  * PARAMETERS
  1972.  *  icon_ID         [IN]        
  1973.  *  icon_id(?)      [IN]        
  1974.  * RETURNS
  1975.  *  void
  1976.  *****************************************************************************/
  1977. void blink_status_icon(S16 icon_ID)
  1978. {
  1979.     /*----------------------------------------------------------------*/
  1980.     /* Local Variables                                                */
  1981.     /*----------------------------------------------------------------*/
  1982.     /*----------------------------------------------------------------*/
  1983.     /* Code Body                                                      */
  1984.     /*----------------------------------------------------------------*/
  1985.     if ((icon_ID < 0) || (icon_ID >= MAX_STATUS_ICONS))
  1986.     {
  1987.         return;
  1988.     }
  1989.     /* 2005/10/20 Hide status icon in flight mode */
  1990. #ifdef __FLIGHT_MODE_SUPPORT__
  1991. #ifdef __MMI_WLAN_FEATURES__
  1992.     if (mmi_bootup_get_active_flight_mode() == 1 || mmi_netset_get_active_preferred_mode() == 1 || mmi_bootup_is_sim_valid() == MMI_FALSE)
  1993. #else
  1994.     if (mmi_bootup_get_active_flight_mode() == 1 || mmi_bootup_is_sim_valid() == MMI_FALSE)
  1995. #endif
  1996.     {
  1997.         pBOOL rtn = PhnsetFlightModeHideButSaveStatusIcon(icon_ID, MMI_status_icons[icon_ID].flags | STATUS_ICON_BLINK);
  1998.         if (rtn == MMI_TRUE && (gPowerOnWithFlightMode == MMI_TRUE || mmi_bootup_is_sim_valid() == MMI_FALSE))
  1999.         {
  2000.             return;
  2001.         }
  2002.     }
  2003. #else /* __FLIGHT_MODE_SUPPORT__ */ 
  2004.     if (mmi_bootup_is_sim_valid() == MMI_FALSE)
  2005.     {
  2006.         if (PhnsetFlightModeHideButSaveStatusIcon(icon_ID, MMI_status_icons[icon_ID].flags | STATUS_ICON_BLINK) ==
  2007.             MMI_TRUE)
  2008.         {
  2009.             return;
  2010.         }
  2011.     }
  2012. #endif /* __FLIGHT_MODE_SUPPORT__ */ 
  2013.     /* set teh flag of icon to blink */
  2014.     MMI_status_icons[icon_ID].flags |= STATUS_ICON_BLINK;
  2015.     setup_status_icon_blink_animate();
  2016. }
  2017. /*****************************************************************************
  2018.  * FUNCTION
  2019.  *  disable_status_icon
  2020.  * DESCRIPTION
  2021.  *  set teh flag of icon as disable
  2022.  * PARAMETERS
  2023.  *  icon_ID         [IN]        
  2024.  *  icon_id(?)      [IN]        
  2025.  * RETURNS
  2026.  *  void
  2027.  *****************************************************************************/
  2028. void disable_status_icon(S16 icon_ID)
  2029. {
  2030.     /*----------------------------------------------------------------*/
  2031.     /* Local Variables                                                */
  2032.     /*----------------------------------------------------------------*/
  2033.     /*----------------------------------------------------------------*/
  2034.     /* Code Body                                                      */
  2035.     /*----------------------------------------------------------------*/
  2036.     if ((icon_ID < 0) || (icon_ID >= MAX_STATUS_ICONS))
  2037.     {
  2038.         return;
  2039.     }
  2040.     /* set the flag of icon to disable */
  2041.     MMI_status_icons[icon_ID].flags |= STATUS_ICON_DISABLED;
  2042. }
  2043. /*****************************************************************************
  2044.  * FUNCTION
  2045.  *  enable_status_icon
  2046.  * DESCRIPTION
  2047.  *  set teh flag of icon as enable
  2048.  * PARAMETERS
  2049.  *  icon_ID         [IN]        
  2050.  *  icon_id(?)      [IN]        
  2051.  * RETURNS
  2052.  *  void
  2053.  *****************************************************************************/
  2054. void enable_status_icon(S16 icon_ID)
  2055. {
  2056.     /*----------------------------------------------------------------*/
  2057.     /* Local Variables                                                */
  2058.     /*----------------------------------------------------------------*/
  2059.     /*----------------------------------------------------------------*/
  2060.     /* Code Body                                                      */
  2061.     /*----------------------------------------------------------------*/
  2062.     if ((icon_ID < 0) || (icon_ID >= MAX_STATUS_ICONS))
  2063.     {
  2064.         return;
  2065.     }
  2066.     /* set teh flag of icn to enbale */
  2067.     MMI_status_icons[icon_ID].flags &= ~STATUS_ICON_DISABLED;
  2068. }
  2069. /*****************************************************************************
  2070.  * FUNCTION
  2071.  *  set_status_icon_state
  2072.  * DESCRIPTION
  2073.  *  set the state of icon equal to valeu pass as parameter
  2074.  * PARAMETERS
  2075.  *  icon_ID         [IN]        
  2076.  *  state           [IN]        
  2077.  *  icon_id(?)      [IN]        
  2078.  * RETURNS
  2079.  *  void
  2080.  *****************************************************************************/
  2081. void set_status_icon_state(S16 icon_ID, U8 state)
  2082. {
  2083.     /*----------------------------------------------------------------*/
  2084.     /* Local Variables                                                */
  2085.     /*----------------------------------------------------------------*/
  2086.     /*----------------------------------------------------------------*/
  2087.     /* Code Body                                                      */
  2088.     /*----------------------------------------------------------------*/
  2089.     /* set teh flag of icon equal to valeu pass as paraeter */
  2090.     MMI_status_icons[icon_ID].state = state;
  2091. }
  2092. /*****************************************************************************
  2093.  * FUNCTION
  2094.  *  reset_status_icon_state
  2095.  * DESCRIPTION
  2096.  *  set the state of icon equal to zero default value
  2097.  * PARAMETERS
  2098.  *  icon_ID         [IN]        
  2099.  *  icon_id(?)      [IN]        
  2100.  * RETURNS
  2101.  *  void
  2102.  *****************************************************************************/
  2103. void reset_status_icon_state(S16 icon_ID)
  2104. {
  2105.     /*----------------------------------------------------------------*/
  2106.     /* Local Variables                                                */
  2107.     /*----------------------------------------------------------------*/
  2108.     /*----------------------------------------------------------------*/
  2109.     /* Code Body                                                      */
  2110.     /*----------------------------------------------------------------*/
  2111.     /* set teh flag of icon to default 0 value */
  2112.     MMI_status_icons[icon_ID].state = 0;
  2113. }
  2114. /*****************************************************************************
  2115.  * FUNCTION
  2116.  *  fill_status_bar_color
  2117.  * DESCRIPTION
  2118.  *  fill teh clor of status bar as grey
  2119.  * PARAMETERS
  2120.  *  bar_id      [IN]        
  2121.  * RETURNS
  2122.  *  void
  2123.  *****************************************************************************/
  2124. void fill_status_bar_color(U8 bar_id)
  2125. {
  2126.     /*----------------------------------------------------------------*/
  2127.     /* Local Variables                                                */
  2128.     /*----------------------------------------------------------------*/
  2129.     S32 x1, y1, x2, y2;
  2130.     color c;
  2131.     /*----------------------------------------------------------------*/
  2132.     /* Code Body                                                      */
  2133.     /*----------------------------------------------------------------*/
  2134.     if (current_MMI_theme != NULL)
  2135.     {
  2136.         c = *current_MMI_theme->statusbar0_background_color;    /* gui_color(216,212,212); */
  2137.     }
  2138.     else
  2139.     {
  2140.         c = gui_color(216, 212, 212);
  2141.     }
  2142.     /* set clip region */
  2143.     gui_push_clip();
  2144.     get_status_icon_bar_clip(bar_id, &x1, &y1, &x2, &y2);   /* get teh clip values of bar_id */
  2145.     gui_set_clip(x1, y1, x2, y2);
  2146.     /* draw status icon bar */
  2147.     gui_fill_rectangle(x1, y1, x2, y2, c);  /* fill the bar with grey color */
  2148.     /* restore clip region */
  2149.     gui_pop_clip();
  2150. }
  2151. /*****************************************************************************
  2152.  * FUNCTION
  2153.  *  redraw_status_icon_bar
  2154.  * DESCRIPTION
  2155.  *  redarw only the staus bar whose id is equl to valeu pass as parameter
  2156.  * PARAMETERS
  2157.  *  j               [IN]        
  2158.  *  bar_id(?)       [IN]        
  2159.  * RETURNS
  2160.  *  void
  2161.  *****************************************************************************/
  2162. void redraw_status_icon_bar(U8 j)
  2163. {
  2164.     /*----------------------------------------------------------------*/
  2165.     /* Local Variables                                                */
  2166.     /*----------------------------------------------------------------*/
  2167.     /* backup active lcd */
  2168.     bitmap *saved_graphics_context = current_LCD_device_bitmap;
  2169.     S32 i, id, sbx, sby;
  2170.     S32 ix1, iy1;
  2171.     /*----------------------------------------------------------------*/
  2172.     /* Code Body                                                      */
  2173.     /*----------------------------------------------------------------*/
  2174.     if (MMI_status_icon_bars[j].flags & STATUS_ICON_BAR_DISPLAY)
  2175.     {
  2176.         /* set active lcd according to different status icon bar */
  2177.         if (MMI_status_icon_bars[j].graphics_context == &main_LCD_device_bitmap)        /* check the graphicd context of bar id */
  2178.         {
  2179.             UI_set_main_LCD_graphics_context();
  2180.         }
  2181.         else if (MMI_status_icon_bars[j].graphics_context == &sub_LCD_device_bitmap)
  2182.         {
  2183.             UI_set_sub_LCD_graphics_context();
  2184.         }
  2185.         sbx = MMI_status_icon_bars[j].x;    /* store the start offset x position of bar */
  2186.         sby = MMI_status_icon_bars[j].y;    /* store the start offset y position of bar */
  2187.         if (MMI_status_icon_bars[j].icon_list != NULL)
  2188.         {
  2189.             for (i = 0; i < MMI_status_icon_bars[j].n_icons; i++)
  2190.             {
  2191.                 id = MMI_status_icon_bars[j].icon_list[i];
  2192.             #ifdef __MMI_DOWNLOADABLE_THEMES_SUPPORT__
  2193.                 if (mmi_tm_does_theme_have_alt_image())
  2194.                 {
  2195.                     if (mmi_tm_is_theme_dirty_bit_set(GetImageIndex((U16) id)))
  2196.                     {
  2197.                         MMI_status_icons[j].icon_data = get_image((U16) id);
  2198.                         /* No need to calculate Image width, height and frames as they will not change */
  2199.                     }
  2200.                 }
  2201.             #endif /* __MMI_DOWNLOADABLE_THEMES_SUPPORT__ */ 
  2202.                 if (MMI_status_icons[id].icon_ID != IMAGE_ID_NULL)
  2203.                 {
  2204.                     ix1 = MMI_status_icons[id].x + sbx; /* start x position of icon */
  2205.                     iy1 = MMI_status_icons[id].y + sby; /* start y position of icon */
  2206.                     if (MMI_status_icons[id].flags & STATUS_ICON_ANIMATE)
  2207.                     {
  2208.                         /* show animated icon */
  2209.                         gui_show_transparent_animated_image_frame(
  2210.                             ix1,
  2211.                             iy1,
  2212.                             MMI_status_icons[id].icon_data,
  2213.                             0,
  2214.                             MMI_status_icons[id].state);
  2215.                     }
  2216.                     else if (MMI_status_icons[id].flags & STATUS_ICON_BLINK)
  2217.                     {
  2218.                         /* show blinking icon */
  2219.                         if (MMI_status_icons_blink_animate_ON_state)
  2220.                         {
  2221.                             gui_show_transparent_image(ix1, iy1, MMI_status_icons[id].icon_data, 0);
  2222.                         }
  2223.                     }
  2224.                     else
  2225.                     {
  2226.                         /* show normal icon */
  2227.                         if (MMI_status_icons[id].state > 0)
  2228.                             /* the icon have many frames for different levels */
  2229.                         {
  2230.                             gui_show_transparent_animated_image_frame(
  2231.                                 ix1,
  2232.                                 iy1,
  2233.                                 MMI_status_icons[id].icon_data,
  2234.                                 0,
  2235.                                 MMI_status_icons[id].state);
  2236.                         }
  2237.                         else
  2238.                             /* the icon has only one level */
  2239.                         {
  2240.                             gui_show_transparent_image(ix1, iy1, MMI_status_icons[id].icon_data, 0);
  2241.                         }
  2242.                     }
  2243.                 }
  2244.             }
  2245.         }
  2246.     }
  2247.     /* restore active lcd according to backuped lcd */
  2248.     if (saved_graphics_context == &main_LCD_device_bitmap)
  2249.     {
  2250.         UI_set_main_LCD_graphics_context(); /* set graphic context to main lcd */
  2251.     }
  2252.     else if (saved_graphics_context == &sub_LCD_device_bitmap)
  2253.     {
  2254.         UI_set_sub_LCD_graphics_context();  /* set graphic context to sub lcd */
  2255.     }
  2256. }
  2257. /*****************************************************************************
  2258.  * FUNCTION
  2259.  *  set_status_icon_display