FreeCalypso > hg > fc-magnetite
comparison src/ui3/bmi/mmiSatMenu.c @ 420:e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 21 Jan 2018 03:09:00 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 419:59143cd42ec7 | 420:e8ddbb0837ed |
|---|---|
| 1 | |
| 2 /******************************************************************************* | |
| 3 | |
| 4 CONDAT (UK) | |
| 5 | |
| 6 ******************************************************************************** | |
| 7 | |
| 8 This software product is the property of Condat (UK) Ltd and may not be | |
| 9 disclosed to any third party without the express permission of the owner. | |
| 10 | |
| 11 ******************************************************************************** | |
| 12 | |
| 13 $Project name: Basic MMI | |
| 14 $Project code: BMI (6349) | |
| 15 $Module: MMI | |
| 16 $File: MmiSatMenu.c | |
| 17 $Revision: 1.0 | |
| 18 | |
| 19 $Author: Condat(UK) | |
| 20 $Date: 25/10/00 | |
| 21 | |
| 22 ******************************************************************************** | |
| 23 | |
| 24 Description: | |
| 25 | |
| 26 Implementation of MMI SIM Application Toolkit (SAT) | |
| 27 | |
| 28 ******************************************************************************** | |
| 29 | |
| 30 $History: MmiSatMenu.c | |
| 31 | |
| 32 | |
| 33 | |
| 34 | |
| 35 Jun 06, 2006 DR: OMAPS00080543 - xreddymn | |
| 36 Description: Default item is not being highlighted for SELECT ITEM command. | |
| 37 Solution: Change list menu highlight index based on the default item provided | |
| 38 in the SELECT ITEM command. | |
| 39 | |
| 40 June 05, 2006 REF:OMAPS00060424 x0045876 | |
| 41 Description: Header Toggling | |
| 42 Solution: Implemented the toggling of header when displaying the length text in SELECT ITEM and SET UP MENU | |
| 43 | |
| 44 Apr 24, 2006 REF: DRT OMAPS00075832 x0039928 | |
| 45 Description: SIM tool kit crash on plus 2.5 image | |
| 46 Fix: Memory freeing of data->list_menu_data.Attr->icon is put under if conditon | |
| 47 setupMenuHeaderIconData.dst != NULL for setup menu and selectItemHeaderIconData.dst != NULL | |
| 48 for select item. | |
| 49 | |
| 50 Shashi Shekar B.S., a0876501, 16 Mar, 2006, OMAPS00061462 | |
| 51 Icon support for SetupMenu & Select item. | |
| 52 | |
| 53 xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 54 Using the MenuSelect Key for requesting the help info in STK menu. | |
| 55 | |
| 56 May 24, 2005 REF: CRR 29358 x0021334 | |
| 57 Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 58 Fix: The implementation is now based on timer. After the specified timeout period | |
| 59 the control comes back to SAT main menu, if there is no selection done by the user. | |
| 60 | |
| 61 Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
| 62 Bug:Clenup of sprintf used for tracing | |
| 63 Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX | |
| 64 | |
| 65 25/10/00 Original Condat(UK) BMI version. | |
| 66 | |
| 67 $End | |
| 68 | |
| 69 *******************************************************************************/ | |
| 70 | |
| 71 | |
| 72 | |
| 73 /******************************************************************************* | |
| 74 | |
| 75 Include Files | |
| 76 | |
| 77 *******************************************************************************/ | |
| 78 #define ENTITY_MFW | |
| 79 | |
| 80 /* includes */ | |
| 81 #include <string.h> | |
| 82 #include <stdio.h> | |
| 83 #include <stdlib.h> | |
| 84 | |
| 85 #if defined (NEW_FRAME) | |
| 86 | |
| 87 #include "typedefs.h" | |
| 88 #include "vsi.h" | |
| 89 #include "pei.h" | |
| 90 #include "custom.h" | |
| 91 #include "gsm.h" | |
| 92 | |
| 93 #else | |
| 94 | |
| 95 #include "STDDEFS.H" | |
| 96 #include "custom.h" | |
| 97 #include "gsm.h" | |
| 98 #include "vsi.h" | |
| 99 | |
| 100 #endif | |
| 101 #include "mfw_sys.h" | |
| 102 #include "prim.h" | |
| 103 | |
| 104 | |
| 105 | |
| 106 #include "mfw_mfw.h" | |
| 107 #include "mfw_win.h" | |
| 108 #include "mfw_kbd.h" | |
| 109 /* SPR#1428 - SH - New Editor changes */ | |
| 110 #ifndef NEW_EDITOR | |
| 111 #include "mfw_edt.h" | |
| 112 #endif | |
| 113 #include "mfw_lng.h" | |
| 114 #include "mfw_icn.h" | |
| 115 #include "mfw_phb.h" | |
| 116 #include "mfw_sim.h" | |
| 117 #include "mfw_nm.h" | |
| 118 #include "mfw_sms.h" | |
| 119 #include "mfw_mnu.h" | |
| 120 #include "mfw_sat.h" | |
| 121 #include "mfw_tim.h" | |
| 122 | |
| 123 #include "ksd.h" | |
| 124 #include "psa.h" | |
| 125 #include "dspl.h" | |
| 126 | |
| 127 | |
| 128 #include "MmiMmi.h" | |
| 129 #include "MmiDummy.h" | |
| 130 #include "MmiDialogs.h" | |
| 131 #include "MmiLists.h" | |
| 132 | |
| 133 #include "MmiMain.h" | |
| 134 #include "MmiStart.h" | |
| 135 #include "MmiPins.h" | |
| 136 #include "MmiMenu.h" | |
| 137 #include "MmiSoftKeys.h" | |
| 138 #include "MmiSounds.h" | |
| 139 #include "mmiCall.h" | |
| 140 | |
| 141 #include "mmiSat_i.h" | |
| 142 | |
| 143 #include "cus_aci.h" | |
| 144 | |
| 145 #include "prim.h" | |
| 146 #ifndef PCM_2_FFS | |
| 147 #include "pcm.h" | |
| 148 #endif | |
| 149 | |
| 150 | |
| 151 #include "mmiColours.h" | |
| 152 | |
| 153 BOOL g_SATsession_is_active = FALSE; | |
| 154 | |
| 155 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 156 static BOOL g_sat_scroll_status = FALSE; // to determine if the user has scrolled up/down | |
| 157 BOOL getScrollStatus(void); // function prototype | |
| 158 | |
| 159 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 160 #ifdef FF_MMI_SAT_ICON | |
| 161 static T_SAT_IconInfo setupMenuItemIconData, setupMenuHeaderIconData; | |
| 162 static T_SAT_IconInfo selectItemIconData, selectItemHeaderIconData; | |
| 163 #endif | |
| 164 | |
| 165 | |
| 166 /********************************************************************* | |
| 167 ********************************************************************** | |
| 168 | |
| 169 setup_menu DYNAMIC MENU WINDOW. DECLARATION | |
| 170 | |
| 171 ********************************************************************* | |
| 172 **********************************************************************/ | |
| 173 typedef struct | |
| 174 { | |
| 175 /* administrative data */ | |
| 176 | |
| 177 T_MMI_CONTROL mmi_control; | |
| 178 T_MFW_HND win; | |
| 179 T_MFW_HND kbd; /* sbh - keyboard handler, so window can be destroyed by user */ | |
| 180 | |
| 181 /* associated handlers */ | |
| 182 | |
| 183 /* internal data */ | |
| 184 T_SAT_CMD *sat_command; /* pointer to sat_command in parent */ | |
| 185 ListMenuData_t list_menu_data; | |
| 186 } T_sat_setup_menu; | |
| 187 | |
| 188 static T_MFW_HND sat_setup_menu_create (T_MFW_HND parent); | |
| 189 static void sat_setup_menu_destroy (T_MFW_HND window); | |
| 190 static void sat_setup_menu_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command); | |
| 191 static void sat_setup_menu_listmnu_cb (T_MFW_HND win, ListMenuData_t * ListData); | |
| 192 static T_MFW sat_setup_menu_recreate(T_sat_setup_menu *data); | |
| 193 | |
| 194 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 195 // Prototype declaratio for sat_select_TimerCb(). | |
| 196 static int sat_select_TimerCb (T_MFW_EVENT event, T_MFW_TIM *timer); | |
| 197 | |
| 198 static MfwMnuAttr sat_setup_menuAttrib = | |
| 199 { | |
| 200 &sat_setup_menuArea, | |
| 201 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, | |
| 202 /* x0045876, 14-Aug-2006 (WR - integer conversion resulted in a change of sign) */ | |
| 203 (UBYTE) -1, /* use default font */ | |
| 204 NULL, /* with these items */ | |
| 205 0 , /* number of items */ | |
| 206 COLOUR_LIST_XX, TxtNull, NULL, MNUATTRSPARE, | |
| 207 /* 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ | |
| 208 TRUE | |
| 209 | |
| 210 }; | |
| 211 | |
| 212 static MfwMnuAttr sat_select_menuAttrib = | |
| 213 { | |
| 214 &sat_select_menuArea, | |
| 215 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, | |
| 216 /* x0045876, 14-Aug-2006 (WR - integer conversion resulted in a change of sign) */ | |
| 217 (UBYTE) -1, /* use default font */ | |
| 218 NULL, /* with these items */ | |
| 219 0, /* number of items */ | |
| 220 COLOUR_LIST_XX, TxtNull, NULL, MNUATTRSPARE, | |
| 221 /* 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ | |
| 222 TRUE | |
| 223 }; | |
| 224 | |
| 225 /* SPR#2492 - DS - Dynamically allocated string storage for SAT menu header */ | |
| 226 static char* menuHdr = NULL; | |
| 227 | |
| 228 | |
| 229 /********************************************************************* | |
| 230 ********************************************************************** | |
| 231 | |
| 232 setup_menu DYNAMIC MENU WINDOW. IMPLEMENTATION | |
| 233 | |
| 234 ********************************************************************* | |
| 235 **********************************************************************/ | |
| 236 | |
| 237 T_MFW_HND sat_setup_menu_start(T_SAT_CMD * sat_command) | |
| 238 { | |
| 239 T_MFW_HND win; | |
| 240 | |
| 241 TRACE_FUNCTION ("sat_setup_menu_start()"); | |
| 242 /***************************Go-lite Optimization changes Start***********************/ | |
| 243 //Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
| 244 TRACE_EVENT_P1("MFW Memory Left after starting SAT %d",mfwCheckMemoryLeft()); | |
| 245 /***************************Go-lite Optimization changes end***********************/ | |
| 246 | |
| 247 win = sat_setup_menu_create (NULL); | |
| 248 | |
| 249 if (win NEQ NULL) | |
| 250 { | |
| 251 SEND_EVENT (win, SAT_SETUP_MENU, 0, sat_command); | |
| 252 } | |
| 253 return win; | |
| 254 } | |
| 255 | |
| 256 static T_MFW_HND sat_setup_menu_create(MfwHnd parent_window) | |
| 257 { | |
| 258 T_sat_setup_menu * data = (T_sat_setup_menu *)ALLOC_MEMORY (sizeof (T_sat_setup_menu)); | |
| 259 T_MFW_WIN * win; | |
| 260 | |
| 261 TRACE_EVENT ("sat_setup_menu_create()"); | |
| 262 | |
| 263 /* | |
| 264 * Create window handler | |
| 265 */ | |
| 266 | |
| 267 data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)sat_win_cb); | |
| 268 sat_set_setup_menu_win(data->win); // c030 rsa | |
| 269 | |
| 270 if (data->win EQ NULL) | |
| 271 { | |
| 272 return NULL; | |
| 273 } | |
| 274 | |
| 275 /* | |
| 276 * connect the dialog data to the MFW-window | |
| 277 */ | |
| 278 | |
| 279 data->mmi_control.dialog = (T_DIALOG_FUNC)sat_setup_menu_exec; | |
| 280 data->mmi_control.data = data; | |
| 281 win = ((T_MFW_HDR *)data->win)->data; | |
| 282 win->user = (MfwUserDataPtr)data; | |
| 283 | |
| 284 data->kbd = kbdCreate( data->win, KEY_ALL, (T_MFW_CB) sat_kbd_cb); /* sbh - add keyboard handler */ | |
| 285 | |
| 286 /* | |
| 287 * return window handle | |
| 288 */ | |
| 289 | |
| 290 | |
| 291 g_SATsession_is_active = TRUE; | |
| 292 | |
| 293 win_show(data->win); | |
| 294 return data->win; | |
| 295 } | |
| 296 | |
| 297 static void sat_setup_menu_destroy(MfwHnd own_window) | |
| 298 { | |
| 299 T_MFW_WIN * win_data; | |
| 300 T_sat_setup_menu * data; | |
| 301 int i; | |
| 302 | |
| 303 TRACE_EVENT ("sat_setup_menu_destroy()"); | |
| 304 | |
| 305 g_SATsession_is_active = FALSE; | |
| 306 | |
| 307 if (own_window) | |
| 308 { | |
| 309 win_data = ((T_MFW_HDR *)own_window)->data; | |
| 310 data = (T_sat_setup_menu *)win_data->user; | |
| 311 | |
| 312 if (data) | |
| 313 { | |
| 314 /* | |
| 315 * Delete WIN handler | |
| 316 */ | |
| 317 win_delete (data->win); | |
| 318 | |
| 319 /* | |
| 320 * Free Memory | |
| 321 */ | |
| 322 | |
| 323 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 324 #ifdef FF_MMI_SAT_ICON | |
| 325 /* Free the memory allocated for Item icon data. */ | |
| 326 if(setupMenuItemIconData.dst != NULL) | |
| 327 { | |
| 328 FREE_MEMORY((U8 *)setupMenuItemIconData.dst, setupMenuItemIconData.width * | |
| 329 setupMenuItemIconData.height); | |
| 330 setupMenuItemIconData.dst = NULL; | |
| 331 } | |
| 332 | |
| 333 /* Free the memory allocated for Header icon data. */ | |
| 334 if(setupMenuHeaderIconData.dst != NULL) | |
| 335 { | |
| 336 FREE_MEMORY((U8 *)setupMenuHeaderIconData.dst, setupMenuHeaderIconData.width * | |
| 337 setupMenuHeaderIconData.height); | |
| 338 setupMenuHeaderIconData.dst = NULL; | |
| 339 | |
| 340 //Apr 24, 2006 REF: DRT OMAPS00075832 x0039928 | |
| 341 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 342 if(data->list_menu_data.Attr->icon != NULL) | |
| 343 { | |
| 344 FREE_MEMORY((U8 *)data->list_menu_data.Attr->icon, sizeof (MfwIcnAttr)); | |
| 345 data->list_menu_data.Attr->icon = NULL; | |
| 346 } | |
| 347 } | |
| 348 #endif | |
| 349 | |
| 350 for (i=0; i < data->list_menu_data.ListLength; i++) | |
| 351 { | |
| 352 sat_destroy_ITEM_ASCIIZ (data->list_menu_data.List[i].str); | |
| 353 | |
| 354 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 355 #ifdef FF_MMI_SAT_ICON | |
| 356 if(data->list_menu_data.List[i].icon != NULL) | |
| 357 { | |
| 358 FREE_MEMORY((U8 *)data->list_menu_data.List[i].icon, sizeof (MfwIcnAttr)); | |
| 359 data->list_menu_data.List[i].icon = NULL; | |
| 360 } | |
| 361 #endif | |
| 362 } | |
| 363 FREE_MEMORY ((U8 *)data->list_menu_data.List, | |
| 364 (data->list_menu_data.ListLength * sizeof (MfwMnuItem))); | |
| 365 data->list_menu_data.List = NULL; | |
| 366 FREE_MEMORY ((U8 *)data, sizeof (T_sat_setup_menu)); | |
| 367 | |
| 368 /* SPR#2492 - DS - Free SAT menu header if it exists */ | |
| 369 if (menuHdr) | |
| 370 { | |
| 371 TRACE_EVENT_P2("Destroy menuHdr %d with size %d", menuHdr, *(menuHdr -(U16)sizeof(U16)) ); | |
| 372 sat_destroy_TEXT_ASCIIZ(menuHdr); | |
| 373 menuHdr = NULL; /* dsm 01/12/03 - Added to explicitly set menuHdr to NULL */ | |
| 374 | |
| 375 } | |
| 376 | |
| 377 sat_set_setup_menu_win(NULL); // c030 rsa | |
| 378 } | |
| 379 else | |
| 380 { | |
| 381 TRACE_EVENT ("sat_setup_menu_destroy() called twice"); | |
| 382 } | |
| 383 } | |
| 384 } | |
| 385 | |
| 386 static T_MFW sat_setup_menu_recreate(T_sat_setup_menu *data) | |
| 387 { | |
| 388 int i; | |
| 389 SatMenu * menu = &data->sat_command->c.menu; | |
| 390 int Unicode_menu = FALSE; /*MC, SPR 940/2flag to lay-out as Unicode*/ | |
| 391 T_MFW retVal; | |
| 392 | |
| 393 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 394 #ifdef FF_MMI_SAT_ICON | |
| 395 USHORT icon_length; | |
| 396 USHORT fontHeight = 0, menuHeight = 0, titleHeight; | |
| 397 #endif | |
| 398 | |
| 399 TRACE_EVENT ("sat_setup_menu_recreate()"); | |
| 400 | |
| 401 #ifdef __COMPLETE_LIST_SUPPORT__ /* ??? rsa for future extension */ | |
| 402 if ((&data->sat_command.qual & SAT_M_SETUP_HELP_AVAIL) NEQ 0) | |
| 403 { | |
| 404 data->list_menu_data.AlternateLeftSoftKey = TxtHelp; /* help available */ | |
| 405 } | |
| 406 else | |
| 407 { | |
| 408 data->list_menu_data.AlternateLeftSoftKey = TxtNull; /* no help available */ | |
| 409 } | |
| 410 #endif | |
| 411 | |
| 412 if (data->list_menu_data.List EQ NULL) | |
| 413 { | |
| 414 /* c030 rsa first time creation */ | |
| 415 /* allocate sufficient memory to hold the list of menu items */ | |
| 416 data->list_menu_data.ListLength = menu->nItems; /* actual number of entries in list menu. */ | |
| 417 data->list_menu_data.List = (MfwMnuItem *)ALLOC_MEMORY (data->list_menu_data.ListLength * sizeof (MfwMnuItem)); | |
| 418 memset(data->list_menu_data.List, 0x00, data->list_menu_data.ListLength * sizeof (MfwMnuItem)); | |
| 419 | |
| 420 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 421 #ifdef FF_MMI_SAT_ICON | |
| 422 if(data->sat_command->c.menu.itemIconQual != 0xFF) | |
| 423 { | |
| 424 /* We have icon to be displayed*/ | |
| 425 /* Copy the icon data to the editor attributes*/ | |
| 426 setupMenuItemIconData.width = data->sat_command->c.menu.items[0].iconInfo.width; | |
| 427 setupMenuItemIconData.height = data->sat_command->c.menu.items[0].iconInfo.height; | |
| 428 | |
| 429 icon_length = data->sat_command->c.menu.items[0].iconInfo.width * data->sat_command->c.menu.items[0].iconInfo.height; | |
| 430 | |
| 431 setupMenuItemIconData.dst = (char *)ALLOC_MEMORY (icon_length); | |
| 432 | |
| 433 memcpy(setupMenuItemIconData.dst, data->sat_command->c.menu.items[0].iconInfo.dst, icon_length); | |
| 434 | |
| 435 /* Icon is self-explanatory. No need to display text for this case.*/ | |
| 436 if(data->sat_command->c.menu.itemIconQual == 0x00) | |
| 437 { | |
| 438 /* Icon is self-explanatory. Do not display the text*/ | |
| 439 setupMenuItemIconData.selfExplanatory = TRUE; | |
| 440 } | |
| 441 else | |
| 442 setupMenuItemIconData.selfExplanatory = FALSE; | |
| 443 | |
| 444 /* Get the height of Title & Line. This will be used to calculate the icon co-ordinates. */ | |
| 445 fontHeight = dspl_GetFontHeight(); | |
| 446 titleHeight = res_getTitleHeight(); | |
| 447 | |
| 448 /* Set the initial menu height to the title height*/ | |
| 449 menuHeight = titleHeight + ((fontHeight - 2) / 2) - (setupMenuItemIconData.height / 2); | |
| 450 | |
| 451 /* Free the memory of icon data that we got through the SATK command*/ | |
| 452 mfwFree((U8 *)data->sat_command->c.menu.items[0].iconInfo.dst, icon_length); | |
| 453 data->sat_command->c.menu.items[0].iconInfo.dst = NULL; | |
| 454 } | |
| 455 else | |
| 456 { | |
| 457 setupMenuItemIconData.width = 0; | |
| 458 setupMenuItemIconData.height = 0; | |
| 459 setupMenuItemIconData.dst = NULL; | |
| 460 setupMenuItemIconData.selfExplanatory = FALSE; | |
| 461 } | |
| 462 #endif | |
| 463 | |
| 464 for (i=0; i < data->list_menu_data.ListLength; i++) /* Fill Menu List */ | |
| 465 { | |
| 466 mnuInitDataItem(&data->list_menu_data.List[i]); | |
| 467 | |
| 468 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 469 #ifdef FF_MMI_SAT_ICON | |
| 470 if(data->sat_command->c.menu.itemIconQual != 0xFF) | |
| 471 { | |
| 472 /* Populate the Icon attributes. | |
| 473 We assume that we have the same icon for all elements in the item list. */ | |
| 474 data->list_menu_data.List[i].icon = (MfwIcnAttr *)ALLOC_MEMORY (sizeof (MfwIcnAttr)); | |
| 475 | |
| 476 data->list_menu_data.List[i].icon->icons = setupMenuItemIconData.dst; | |
| 477 data->list_menu_data.List[i].icon->nIcons = 1; | |
| 478 data->list_menu_data.List[i].icon->icnType = BMP_FORMAT_256_COLOUR; | |
| 479 data->list_menu_data.List[i].icon->area.px = 1; | |
| 480 data->list_menu_data.List[i].icon->area.py = menuHeight + 1; | |
| 481 data->list_menu_data.List[i].icon->area.sx = setupMenuItemIconData.width; | |
| 482 data->list_menu_data.List[i].icon->area.sy = setupMenuItemIconData.height; | |
| 483 data->list_menu_data.List[i].icon->selfExplanatory = setupMenuItemIconData.selfExplanatory; | |
| 484 | |
| 485 menuHeight += fontHeight; | |
| 486 } | |
| 487 | |
| 488 /* get the correct entry in list of setup_menuList */ | |
| 489 data->list_menu_data.List[i].str = sat_create_ITEM_ASCIIZ (&menu->items[i]); | |
| 490 if (data->list_menu_data.List[i].str[0] == (char)0x80)/*MC, SPR 940/2 check for unicode tag*/ | |
| 491 Unicode_menu = TRUE; | |
| 492 #else | |
| 493 /* get the correct entry in list of setup_menuList */ | |
| 494 data->list_menu_data.List[i].str = sat_create_ITEM_ASCIIZ (&menu->items[i]); | |
| 495 if (data->list_menu_data.List[i].str[0] == 0x80)/*MC, SPR 940/2 check for unicode tag*/ | |
| 496 Unicode_menu = TRUE; | |
| 497 #endif | |
| 498 data->list_menu_data.List[i].flagFunc = (FlagFunc)item_flag_none; | |
| 499 } | |
| 500 } | |
| 501 data->list_menu_data.autoDestroy = TRUE; | |
| 502 | |
| 503 TRACE_EVENT_P1("menu->header.len %d", menu->header.len); | |
| 504 | |
| 505 /* SPR#2492 - DS - Setup menu header */ | |
| 506 if (menu->header.len > 0 && menu->header.len != 0xFF) | |
| 507 { | |
| 508 if (menuHdr) /* Free previously allocated header */ | |
| 509 { | |
| 510 TRACE_EVENT_P2("Destroy menuHdr %d with size %d", menuHdr, *(menuHdr -(U16)sizeof(U16)) ); | |
| 511 | |
| 512 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 513 #ifdef FF_MMI_SAT_ICON | |
| 514 /* Free the memory allocated for Header icon data. */ | |
| 515 if(setupMenuHeaderIconData.dst != NULL) | |
| 516 { | |
| 517 FREE_MEMORY((U8 *)setupMenuHeaderIconData.dst, setupMenuHeaderIconData.width * | |
| 518 setupMenuHeaderIconData.height); | |
| 519 setupMenuHeaderIconData.dst = NULL; | |
| 520 } | |
| 521 #endif | |
| 522 sat_destroy_TEXT_ASCIIZ(menuHdr); | |
| 523 menuHdr = NULL; /* dsm 01/12/03 - Added to explicitly set menuHdr to NULL */ | |
| 524 } | |
| 525 | |
| 526 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 527 #ifdef FF_MMI_SAT_ICON | |
| 528 if(data->sat_command->c.menu.header.icon.qual != 0xFF) | |
| 529 { | |
| 530 /* We have icon to be displayed*/ | |
| 531 /* Copy the icon data to the editor attributes*/ | |
| 532 setupMenuHeaderIconData.width = data->sat_command->c.menu.header.iconInfo.width; | |
| 533 setupMenuHeaderIconData.height = data->sat_command->c.menu.header.iconInfo.height; | |
| 534 | |
| 535 icon_length = data->sat_command->c.menu.header.iconInfo.width * data->sat_command->c.menu.header.iconInfo.height; | |
| 536 | |
| 537 setupMenuHeaderIconData.dst = (char *)ALLOC_MEMORY (icon_length); | |
| 538 | |
| 539 memcpy(setupMenuHeaderIconData.dst, data->sat_command->c.menu.header.iconInfo.dst, icon_length); | |
| 540 | |
| 541 /* Icon is self-explanatory. No need to display text for this case.*/ | |
| 542 if(data->sat_command->c.menu.header.icon.qual == 0x00) | |
| 543 { | |
| 544 /* Icon is self-explanatory. Do not display the text*/ | |
| 545 setupMenuHeaderIconData.selfExplanatory = TRUE; | |
| 546 } | |
| 547 else | |
| 548 setupMenuHeaderIconData.selfExplanatory = FALSE; | |
| 549 | |
| 550 /* Free the memory of icon data that we got through the SATK command*/ | |
| 551 mfwFree((U8 *)data->sat_command->c.menu.header.iconInfo.dst, icon_length); | |
| 552 data->sat_command->c.menu.header.iconInfo.dst = NULL; | |
| 553 } | |
| 554 else | |
| 555 { | |
| 556 setupMenuHeaderIconData.width = 0; | |
| 557 setupMenuHeaderIconData.height = 0; | |
| 558 setupMenuHeaderIconData.dst = NULL; | |
| 559 setupMenuHeaderIconData.selfExplanatory = FALSE; | |
| 560 } | |
| 561 #endif | |
| 562 | |
| 563 menuHdr = sat_create_TEXT_ASCIIZ(&menu->header); | |
| 564 TRACE_EVENT_P1("SAT menu header: %s", menuHdr); | |
| 565 | |
| 566 /* SPR#2492 - DS - Display menu header if one exists */ | |
| 567 if (menuHdr) | |
| 568 { | |
| 569 data->list_menu_data.Attr->hdrId = (int)menuHdr; | |
| 570 | |
| 571 TRACE_EVENT_P1("mode map before: %04x", data->list_menu_data.Attr->mode); | |
| 572 | |
| 573 /* SPR#2492 - DS - Use strings rather than text Ids */ | |
| 574 data->list_menu_data.Attr->mode |= MNU_HDRFORMAT_STR; | |
| 575 | |
| 576 TRACE_EVENT_P1("mode map after: %04x", data->list_menu_data.Attr->mode); | |
| 577 | |
| 578 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 579 #ifdef FF_MMI_SAT_ICON | |
| 580 /* We allow the Header text to be created. We send the icon data with self-explanatory status.*/ | |
| 581 if(setupMenuHeaderIconData.dst != NULL) | |
| 582 { | |
| 583 data->list_menu_data.Attr->icon = (MfwIcnAttr *)ALLOC_MEMORY (sizeof (MfwIcnAttr)); | |
| 584 | |
| 585 data->list_menu_data.Attr->icon->icons = setupMenuHeaderIconData.dst; | |
| 586 data->list_menu_data.Attr->icon->nIcons = 1; | |
| 587 data->list_menu_data.Attr->icon->icnType = BMP_FORMAT_256_COLOUR; | |
| 588 data->list_menu_data.Attr->icon->area.px = 1; | |
| 589 data->list_menu_data.Attr->icon->area.py = 1; | |
| 590 data->list_menu_data.Attr->icon->area.sx = setupMenuHeaderIconData.width; | |
| 591 data->list_menu_data.Attr->icon->area.sy = setupMenuHeaderIconData.height; | |
| 592 data->list_menu_data.Attr->icon->selfExplanatory = setupMenuHeaderIconData.selfExplanatory; | |
| 593 } | |
| 594 #endif | |
| 595 } | |
| 596 } | |
| 597 | |
| 598 retVal = listDisplayListMenu(data->win, &data->list_menu_data, (ListCbFunc)sat_setup_menu_listmnu_cb,Unicode_menu/*MC*/); | |
| 599 // xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 600 // Displaying '?' to indicate to the user that help is available for a menu | |
| 601 if(data->sat_command->qual & SAT_M_SELECT_HELP_AVAIL) | |
| 602 { | |
| 603 displayHelpSymbol(); | |
| 604 } | |
| 605 if (retVal != LISTS_FAIL) | |
| 606 sat_set_setup_menu_listmnu_win(data->list_menu_data.win); | |
| 607 else | |
| 608 sat_set_setup_menu_listmnu_win(NULL); | |
| 609 | |
| 610 return retVal; | |
| 611 } | |
| 612 | |
| 613 static void sat_setup_menu_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command) | |
| 614 /* callback handler for events sent from parents or childs to to trigger some execution */ | |
| 615 { | |
| 616 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
| 617 T_sat_setup_menu * data = (T_sat_setup_menu *)win_data->user; | |
| 618 T_SAT_RES sat_res; | |
| 619 | |
| 620 | |
| 621 | |
| 622 TRACE_FUNCTION ("sat_setup_menu_exec()"); | |
| 623 | |
| 624 switch (event) | |
| 625 { | |
| 626 case SAT_SETUP_MENU: | |
| 627 | |
| 628 TRACE_EVENT("sat_setup_menu_exec() SAT_SETUP_MENU"); | |
| 629 | |
| 630 /* initialization of administrative data */ | |
| 631 | |
| 632 data->sat_command = sat_command; /* save a pointer to the parameter for later use in callbacks */ | |
| 633 | |
| 634 /* initialization of the dialog data */ | |
| 635 | |
| 636 data->list_menu_data.ListPosition = 1;/* True cursor position in list menu. */ | |
| 637 data->list_menu_data.Font = 0; | |
| 638 data->list_menu_data.LeftSoftKey = TxtSoftSelect; | |
| 639 data->list_menu_data.RightSoftKey = TxtSoftBack; | |
| 640 // xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 641 //Adding the support for MenuSelect in this list view | |
| 642 data->list_menu_data.KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUSELECT| KEY_MNULEFT| KEY_MNUUP | KEY_MNUDOWN |KEY_HUP; | |
| 643 data->list_menu_data.Reason = 0; | |
| 644 data->list_menu_data.Strings = TRUE; | |
| 645 data->list_menu_data.Attr = &sat_setup_menuAttrib; | |
| 646 data->list_menu_data.List = NULL; /* c030 rsa mark as first time creation */ | |
| 647 data->list_menu_data.autoDestroy = TRUE; | |
| 648 | |
| 649 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 650 #ifdef FF_MMI_SAT_ICON | |
| 651 /*Initialize the data members of Icon attributes */ | |
| 652 setupMenuItemIconData.width = 0; | |
| 653 setupMenuItemIconData.height = 0; | |
| 654 setupMenuItemIconData.dst = NULL; | |
| 655 setupMenuItemIconData.selfExplanatory = FALSE; | |
| 656 setupMenuHeaderIconData.width = 0; | |
| 657 setupMenuHeaderIconData.height = 0; | |
| 658 setupMenuHeaderIconData.dst = NULL; | |
| 659 setupMenuHeaderIconData.selfExplanatory = FALSE; | |
| 660 #endif | |
| 661 | |
| 662 // c030 rsa | |
| 663 /* NOBREAK */ | |
| 664 case SAT_RETURN: | |
| 665 | |
| 666 if (event == SAT_RETURN) | |
| 667 TRACE_EVENT("sat_setup_menu_exec() SAT_RETURN"); | |
| 668 | |
| 669 // end c030 rsa | |
| 670 if (sat_get_setup_menu_listmnu_win() == NULL) | |
| 671 { | |
| 672 /* (re)create the dialog handler */ | |
| 673 if (sat_setup_menu_recreate(data) == LISTS_FAIL) | |
| 674 { | |
| 675 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE; | |
| 676 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 677 sat_done (sat_command, sat_res); | |
| 678 sat_setup_menu_destroy (data->win); | |
| 679 } | |
| 680 } | |
| 681 break; | |
| 682 | |
| 683 /* sbh - all window types are being provided with this event to destroy the window */ | |
| 684 case SAT_DESTROY_WINDOW: | |
| 685 /* ...sbh */ | |
| 686 | |
| 687 case SAT_EXIT: | |
| 688 sat_setup_menu_destroy (data->win); | |
| 689 break; | |
| 690 | |
| 691 default: | |
| 692 TRACE_EVENT ("sat_setup_menu_exec() unexpected event"); | |
| 693 break; | |
| 694 } | |
| 695 } | |
| 696 | |
| 697 static void sat_setup_menu_listmnu_cb (T_MFW_HND win, ListMenuData_t * ListData) | |
| 698 /* sat_setup_menu menu event handler */ | |
| 699 { | |
| 700 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
| 701 T_sat_setup_menu * data = (T_sat_setup_menu *)win_data->user; | |
| 702 SatItem * item; | |
| 703 int index; | |
| 704 // T_SAT_RES sat_res; // RAVI | |
| 705 | |
| 706 TRACE_FUNCTION ("sat_setup_menu_listmnu_cb()"); | |
| 707 | |
| 708 if ((win EQ NULL) || (win_data EQ NULL) || (data EQ NULL)) | |
| 709 return; | |
| 710 | |
| 711 switch (ListData->Reason) | |
| 712 { | |
| 713 case E_MNU_SELECT: | |
| 714 case LISTS_REASON_SELECT: | |
| 715 | |
| 716 index = ListData->ListPosition; /* index of selected item */ | |
| 717 item = &data->sat_command->c.menu.items[index]; /* selected item */ | |
| 718 // xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 719 // Using the MenuSelect Key for requesting the help info in STK menu. | |
| 720 if(ListData->selectKey && ((data->sat_command->qual & SAT_M_SELECT_HELP_AVAIL) != 0)) | |
| 721 { | |
| 722 satMenuItem(item->id, 1); | |
| 723 ListData->selectKey = FALSE; | |
| 724 } | |
| 725 else | |
| 726 satMenuItem(item->id, 0); /* issue the answering envelope */ | |
| 727 | |
| 728 /* | |
| 729 ** The SAT Menu is automatically destroyed when an item is selected | |
| 730 */ | |
| 731 sat_set_setup_menu_listmnu_win(NULL); | |
| 732 | |
| 733 /* sat_setup_menu_destroy(data->win); c030 rsa do not destroy in order to keep the menu on top */ | |
| 734 break; | |
| 735 case LISTS_REASON_TIMEOUT: // c015 rsa | |
| 736 case LISTS_REASON_BACK: /* back to previous menu */ | |
| 737 case LISTS_REASON_HANGUP: // sbh - added so hangup key exits | |
| 738 case LISTS_REASON_CLEAR: | |
| 739 | |
| 740 /* | |
| 741 * we don't need to signal <SAT_RES_USER_BACK> here, since the session itself | |
| 742 * has been finished immediately after sat_setup_menu_proc(). | |
| 743 * Furthermore the entering of the menu has not been signalled to the SIM... | |
| 744 */ | |
| 745 | |
| 746 /* | |
| 747 ** The SAT Menu is automatically destroyed and recreated when we move. | |
| 748 */ | |
| 749 sat_set_setup_menu_listmnu_win(NULL); | |
| 750 | |
| 751 sat_setup_menu_destroy(data->win); | |
| 752 break; | |
| 753 default: | |
| 754 return; | |
| 755 } | |
| 756 return; | |
| 757 } | |
| 758 | |
| 759 /********************************************************************* | |
| 760 ********************************************************************** | |
| 761 | |
| 762 select_item DYNAMIC MENU WINDOW. DECLARATION | |
| 763 | |
| 764 ********************************************************************* | |
| 765 **********************************************************************/ | |
| 766 typedef struct | |
| 767 { | |
| 768 /* administrative data */ | |
| 769 | |
| 770 T_MMI_CONTROL mmi_control; | |
| 771 T_MFW_HND win; | |
| 772 | |
| 773 /* associated handlers */ | |
| 774 | |
| 775 T_MFW_HND kbd; /* sbh - keyboard handler, so window can be destroyed by user */ | |
| 776 | |
| 777 /* internal data */ | |
| 778 T_SAT_CMD *sat_command; /* pointer to sat_command in parent */ | |
| 779 ListMenuData_t list_menu_data; | |
| 780 T_MFW_HND sat_timer; // May 24, 2005 REF: CRR 29358 x0021334 | |
| 781 ULONG sat_timeout; // May 24, 2005 REF: CRR 29358 x0021334 | |
| 782 } T_sat_select_item; | |
| 783 | |
| 784 static void sat_select_item_destroy (T_MFW_HND window); | |
| 785 static void sat_select_item_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command); | |
| 786 static void sat_select_item_listmnu_cb (T_MFW_HND win, ListMenuData_t * ListData); | |
| 787 static T_MFW sat_select_item_recreate(T_sat_select_item *data); | |
| 788 | |
| 789 /********************************************************************* | |
| 790 ********************************************************************** | |
| 791 | |
| 792 select_item DYNAMIC MENU WINDOW. IMPLEMENTATION | |
| 793 | |
| 794 ********************************************************************* | |
| 795 **********************************************************************/ | |
| 796 | |
| 797 T_MFW_HND sat_select_item_create(MfwHnd parent_window) | |
| 798 { | |
| 799 T_sat_select_item * data = (T_sat_select_item *)ALLOC_MEMORY (sizeof (T_sat_select_item)); | |
| 800 T_MFW_WIN * win; | |
| 801 | |
| 802 TRACE_FUNCTION ("sat_select_item_create()"); | |
| 803 | |
| 804 /* | |
| 805 * Create window handler | |
| 806 */ | |
| 807 | |
| 808 data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)sat_win_cb); | |
| 809 if (data->win EQ NULL) | |
| 810 { | |
| 811 return NULL; | |
| 812 } | |
| 813 | |
| 814 /* | |
| 815 * connect the dialog data to the MFW-window | |
| 816 */ | |
| 817 | |
| 818 data->mmi_control.dialog = (T_DIALOG_FUNC)sat_select_item_exec; | |
| 819 data->mmi_control.data = data; | |
| 820 win = ((T_MFW_HDR *)data->win)->data; | |
| 821 win->user = (MfwUserDataPtr)data; | |
| 822 | |
| 823 data->kbd = kbdCreate( data->win, KEY_ALL, (T_MFW_CB) sat_kbd_cb); /* sbh - add keyboard handler */ | |
| 824 | |
| 825 /* | |
| 826 * return window handle | |
| 827 */ | |
| 828 | |
| 829 | |
| 830 win_show(data->win); | |
| 831 return data->win; | |
| 832 } | |
| 833 | |
| 834 static void sat_select_item_destroy(MfwHnd own_window) | |
| 835 { | |
| 836 T_MFW_WIN * win_data; | |
| 837 T_sat_select_item * data; | |
| 838 int i; | |
| 839 | |
| 840 TRACE_FUNCTION ("sat_select_item_destroy()"); | |
| 841 | |
| 842 if (own_window) | |
| 843 { | |
| 844 win_data = ((T_MFW_HDR *)own_window)->data; | |
| 845 data = (T_sat_select_item *)win_data->user; | |
| 846 | |
| 847 if (data) | |
| 848 { | |
| 849 /* | |
| 850 * Delete WIN handler | |
| 851 */ | |
| 852 win_delete (data->win); | |
| 853 | |
| 854 /* | |
| 855 * Free Memory | |
| 856 */ | |
| 857 | |
| 858 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 859 #ifdef FF_MMI_SAT_ICON | |
| 860 /* Free the memory allocated for Item icon data. */ | |
| 861 if(selectItemIconData.dst != NULL) | |
| 862 { | |
| 863 FREE_MEMORY((U8 *)selectItemIconData.dst, selectItemIconData.width * | |
| 864 selectItemIconData.height); | |
| 865 selectItemIconData.dst = NULL; | |
| 866 } | |
| 867 | |
| 868 /* Free the memory allocated for Header icon data. */ | |
| 869 if(selectItemHeaderIconData.dst != NULL) | |
| 870 { | |
| 871 FREE_MEMORY((U8 *)selectItemHeaderIconData.dst, selectItemHeaderIconData.width * | |
| 872 selectItemHeaderIconData.height); | |
| 873 selectItemHeaderIconData.dst = NULL; | |
| 874 | |
| 875 // Apr 24, 2006 REF: DRT OMAPS00075832 x0039928 | |
| 876 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 877 if(data->list_menu_data.Attr->icon != NULL) | |
| 878 { | |
| 879 FREE_MEMORY((U8 *)data->list_menu_data.Attr->icon, sizeof (MfwIcnAttr)); | |
| 880 data->list_menu_data.Attr->icon = NULL; | |
| 881 } | |
| 882 | |
| 883 } | |
| 884 #endif | |
| 885 | |
| 886 for (i=0; i < data->list_menu_data.ListLength; i++) | |
| 887 { | |
| 888 sat_destroy_ITEM_ASCIIZ (data->list_menu_data.List[i].str); | |
| 889 | |
| 890 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 891 #ifdef FF_MMI_SAT_ICON | |
| 892 if(data->list_menu_data.List[i].icon != NULL) | |
| 893 { | |
| 894 FREE_MEMORY((U8 *)data->list_menu_data.List[i].icon, sizeof (MfwIcnAttr)); | |
| 895 data->list_menu_data.List[i].icon = NULL; | |
| 896 } | |
| 897 #endif | |
| 898 } | |
| 899 FREE_MEMORY ((U8 *)data->list_menu_data.List, | |
| 900 (data->list_menu_data.ListLength * sizeof (MfwMnuItem))); | |
| 901 data->list_menu_data.List = NULL; | |
| 902 FREE_MEMORY ((U8 *)data, sizeof (T_sat_select_item)); | |
| 903 | |
| 904 /* SPR#2492 - DS - Free SAT menu header if it exists */ | |
| 905 if (menuHdr) | |
| 906 { | |
| 907 TRACE_EVENT_P2("Destroy menuHdr %d with size %d", menuHdr, *(menuHdr -(U16)sizeof(U16)) ); | |
| 908 sat_destroy_TEXT_ASCIIZ(menuHdr); | |
| 909 menuHdr = NULL; /* dsm 01/12/03 - Added to explicitly set menuHdr to NULL */ | |
| 910 | |
| 911 } | |
| 912 } | |
| 913 else | |
| 914 { | |
| 915 TRACE_EVENT ("sat_select_item_destroy() called twice"); | |
| 916 } | |
| 917 } | |
| 918 } | |
| 919 | |
| 920 static T_MFW sat_select_item_recreate(T_sat_select_item *data) | |
| 921 { | |
| 922 int i; | |
| 923 int Unicode_menu = FALSE; /*MC, SPR 940/2 flag to lay-out as Unicode*/ | |
| 924 //May 24, 2005 REF: CRR 29358 x0021334 | |
| 925 // Added this variable to store return value from listDisplayListMenu | |
| 926 T_MFW sat_select_item_status; | |
| 927 | |
| 928 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 929 #ifdef FF_MMI_SAT_ICON | |
| 930 USHORT icon_length; | |
| 931 USHORT fontHeight = 0, menuHeight = 0, titleHeight; | |
| 932 #endif | |
| 933 | |
| 934 SatMenu * menu = &data->sat_command->c.menu; | |
| 935 TRACE_FUNCTION ("sat_select_item_recreate()"); | |
| 936 | |
| 937 #ifdef __COMPLETE_LIST_SUPPORT__ /* ??? rsa for future extension */ | |
| 938 if ((&data->sat_command.qual & SAT_M_SELECT_HELP_AVAIL) NEQ 0) | |
| 939 { | |
| 940 data->list_menu_data.AlternateLeftSoftKey = TxtHelp; /* help available */ | |
| 941 } | |
| 942 else | |
| 943 { | |
| 944 data->list_menu_data.AlternateLeftSoftKey = TxtNull; /* no help available */ | |
| 945 } | |
| 946 #endif | |
| 947 | |
| 948 /* allocate sufficient memory to hold the list of menu items */ | |
| 949 data->list_menu_data.ListLength = menu->nItems; /* actual number of entries in list menu. */ | |
| 950 data->list_menu_data.List = (MfwMnuItem *)ALLOC_MEMORY (data->list_menu_data.ListLength * sizeof (MfwMnuItem)); | |
| 951 memset(data->list_menu_data.List, 0x00, data->list_menu_data.ListLength * sizeof (MfwMnuItem)); | |
| 952 | |
| 953 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 954 #ifdef FF_MMI_SAT_ICON | |
| 955 if(menu->itemIconQual != 0xFF) | |
| 956 { | |
| 957 /* We have icon to be displayed*/ | |
| 958 /* Copy the icon data to the editor attributes*/ | |
| 959 selectItemIconData.width = menu->items[0].iconInfo.width; | |
| 960 selectItemIconData.height = menu->items[0].iconInfo.height; | |
| 961 | |
| 962 icon_length = menu->items[0].iconInfo.width * menu->items[0].iconInfo.height; | |
| 963 | |
| 964 selectItemIconData.dst = (char *)ALLOC_MEMORY (icon_length); | |
| 965 | |
| 966 memcpy(selectItemIconData.dst, menu->items[0].iconInfo.dst, icon_length); | |
| 967 | |
| 968 /* Icon is self-explanatory. No need to display text for this case.*/ | |
| 969 if(menu->itemIconQual == 0x00) | |
| 970 { | |
| 971 /* Icon is self-explanatory. Do not display the text*/ | |
| 972 selectItemIconData.selfExplanatory = TRUE; | |
| 973 } | |
| 974 else | |
| 975 selectItemIconData.selfExplanatory = FALSE; | |
| 976 | |
| 977 /* Get the height of Title & Line. This will be used to calculate the icon co-ordinates. */ | |
| 978 fontHeight = dspl_GetFontHeight(); | |
| 979 titleHeight = res_getTitleHeight(); | |
| 980 | |
| 981 /* Set the initial menu height to the title height*/ | |
| 982 menuHeight = titleHeight + ((fontHeight - 2) / 2) - (selectItemIconData.height / 2); | |
| 983 | |
| 984 /* Free the memory of icon data that we got through the SATK command*/ | |
| 985 mfwFree((U8 *)menu->items[0].iconInfo.dst, icon_length); | |
| 986 menu->items[0].iconInfo.dst = NULL; | |
| 987 } | |
| 988 else | |
| 989 { | |
| 990 selectItemIconData.width = 0; | |
| 991 selectItemIconData.height = 0; | |
| 992 selectItemIconData.dst = NULL; | |
| 993 selectItemIconData.selfExplanatory = FALSE; | |
| 994 } | |
| 995 #endif | |
| 996 | |
| 997 for (i=0; i < data->list_menu_data.ListLength; i++) /* Fill Menu List */ | |
| 998 { | |
| 999 mnuInitDataItem(&data->list_menu_data.List[i]); | |
| 1000 | |
| 1001 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 1002 #ifdef FF_MMI_SAT_ICON | |
| 1003 if(data->sat_command->c.menu.itemIconQual != 0xFF) | |
| 1004 { | |
| 1005 /* Populate the Icon attributes. | |
| 1006 We assume that we have the same icon for all elements in the item list. */ | |
| 1007 data->list_menu_data.List[i].icon = (MfwIcnAttr *)ALLOC_MEMORY (sizeof (MfwIcnAttr)); | |
| 1008 | |
| 1009 data->list_menu_data.List[i].icon->icons = selectItemIconData.dst; | |
| 1010 data->list_menu_data.List[i].icon->nIcons = 1; | |
| 1011 data->list_menu_data.List[i].icon->icnType = BMP_FORMAT_256_COLOUR; | |
| 1012 data->list_menu_data.List[i].icon->area.px = 1; | |
| 1013 data->list_menu_data.List[i].icon->area.py = menuHeight + 1; | |
| 1014 data->list_menu_data.List[i].icon->area.sx = selectItemIconData.width; | |
| 1015 data->list_menu_data.List[i].icon->area.sy = selectItemIconData.height; | |
| 1016 data->list_menu_data.List[i].icon->selfExplanatory = selectItemIconData.selfExplanatory; | |
| 1017 | |
| 1018 menuHeight += fontHeight; | |
| 1019 } | |
| 1020 /* get the correct entry in list of select_itemList */ | |
| 1021 data->list_menu_data.List[i].str = sat_create_ITEM_ASCIIZ (&menu->items[i]); | |
| 1022 if (data->list_menu_data.List[i].str[0] == (char)0x80)/*MC, SPR 940/2 check for unicode tag*/ | |
| 1023 Unicode_menu = TRUE; | |
| 1024 #else | |
| 1025 /* get the correct entry in list of select_itemList */ | |
| 1026 data->list_menu_data.List[i].str = sat_create_ITEM_ASCIIZ (&menu->items[i]); | |
| 1027 if (data->list_menu_data.List[i].str[0] == 0x80)/*MC, SPR 940/2 check for unicode tag*/ | |
| 1028 Unicode_menu = TRUE; | |
| 1029 #endif | |
| 1030 | |
| 1031 data->list_menu_data.List[i].flagFunc = (FlagFunc)item_flag_none; | |
| 1032 | |
| 1033 /* xreddymn OMAPS00080543 Jun-05-2006 | |
| 1034 * A flag bit in item.action is set to TRUE for default item in decDefItem. | |
| 1035 */ | |
| 1036 if(menu->items[i].action & 0x40) | |
| 1037 data->list_menu_data.ListPosition = i + 1; | |
| 1038 | |
| 1039 } | |
| 1040 | |
| 1041 data->list_menu_data.autoDestroy = TRUE; | |
| 1042 | |
| 1043 TRACE_EVENT_P1("menu->header.len %d", menu->header.len); | |
| 1044 | |
| 1045 /* SPR#2492 - DS - Setup menu header */ | |
| 1046 if (menu->header.len > 0 && menu->header.len != 0xFF) | |
| 1047 { | |
| 1048 if (menuHdr) /* Free previously allocated header */ | |
| 1049 { | |
| 1050 TRACE_EVENT_P2("Destroy menuHdr %d with size %d", menuHdr, *(menuHdr -(U16)sizeof(U16)) ); | |
| 1051 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 1052 #ifdef FF_MMI_SAT_ICON | |
| 1053 /* Free the memory allocated for Header icon data. */ | |
| 1054 if(selectItemHeaderIconData.dst != NULL) | |
| 1055 { | |
| 1056 FREE_MEMORY((U8 *)selectItemHeaderIconData.dst, selectItemHeaderIconData.width * | |
| 1057 selectItemHeaderIconData.height); | |
| 1058 selectItemHeaderIconData.dst = NULL; | |
| 1059 } | |
| 1060 #endif | |
| 1061 sat_destroy_TEXT_ASCIIZ(menuHdr); | |
| 1062 menuHdr = NULL; /* dsm 01/12/03 - Added to explicitly set menuHdr to NULL */ | |
| 1063 } | |
| 1064 | |
| 1065 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 1066 #ifdef FF_MMI_SAT_ICON | |
| 1067 if(data->sat_command->c.menu.header.icon.qual != 0xFF) | |
| 1068 { | |
| 1069 /* We have icon to be displayed*/ | |
| 1070 /* Copy the icon data to the editor attributes*/ | |
| 1071 selectItemHeaderIconData.width = data->sat_command->c.menu.header.iconInfo.width; | |
| 1072 selectItemHeaderIconData.height = data->sat_command->c.menu.header.iconInfo.height; | |
| 1073 | |
| 1074 icon_length = data->sat_command->c.menu.header.iconInfo.width * data->sat_command->c.menu.header.iconInfo.height; | |
| 1075 | |
| 1076 selectItemHeaderIconData.dst = (char *)ALLOC_MEMORY (icon_length); | |
| 1077 | |
| 1078 memcpy(selectItemHeaderIconData.dst, data->sat_command->c.menu.header.iconInfo.dst, icon_length); | |
| 1079 | |
| 1080 /* Icon is self-explanatory. No need to display text for this case.*/ | |
| 1081 if(data->sat_command->c.menu.header.icon.qual == 0x00) | |
| 1082 { | |
| 1083 /* Icon is self-explanatory. Do not display the text*/ | |
| 1084 selectItemHeaderIconData.selfExplanatory = TRUE; | |
| 1085 } | |
| 1086 else | |
| 1087 selectItemHeaderIconData.selfExplanatory = FALSE; | |
| 1088 | |
| 1089 /* Free the memory of icon data that we got through the SATK command*/ | |
| 1090 mfwFree((U8 *)data->sat_command->c.menu.header.iconInfo.dst, icon_length); | |
| 1091 data->sat_command->c.menu.header.iconInfo.dst = NULL; | |
| 1092 } | |
| 1093 else | |
| 1094 { | |
| 1095 selectItemHeaderIconData.width = 0; | |
| 1096 selectItemHeaderIconData.height = 0; | |
| 1097 selectItemHeaderIconData.dst = NULL; | |
| 1098 selectItemHeaderIconData.selfExplanatory = FALSE; | |
| 1099 } | |
| 1100 #endif | |
| 1101 | |
| 1102 | |
| 1103 menuHdr = sat_create_TEXT_ASCIIZ(&menu->header); | |
| 1104 TRACE_EVENT_P1("SAT menu header: %s", menuHdr); | |
| 1105 | |
| 1106 /* SPR#2492 - DS - Display menu header if one exists */ | |
| 1107 if (menuHdr) | |
| 1108 { | |
| 1109 data->list_menu_data.Attr->hdrId = (int)menuHdr; | |
| 1110 | |
| 1111 TRACE_EVENT_P1("mode map before: %04x", data->list_menu_data.Attr->mode); | |
| 1112 | |
| 1113 /* SPR#2492 - DS - Use strings rather than text Ids */ | |
| 1114 data->list_menu_data.Attr->mode |= MNU_HDRFORMAT_STR; | |
| 1115 | |
| 1116 TRACE_EVENT_P1("mode map after: %04x", data->list_menu_data.Attr->mode); | |
| 1117 | |
| 1118 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 1119 #ifdef FF_MMI_SAT_ICON | |
| 1120 /* We allow the Header text to be created. We send the icon data with self-explanatory status.*/ | |
| 1121 if(selectItemHeaderIconData.dst != NULL) | |
| 1122 { | |
| 1123 data->list_menu_data.Attr->icon = (MfwIcnAttr *)ALLOC_MEMORY (sizeof (MfwIcnAttr)); | |
| 1124 | |
| 1125 data->list_menu_data.Attr->icon->icons = selectItemHeaderIconData.dst; | |
| 1126 data->list_menu_data.Attr->icon->nIcons = 1; | |
| 1127 data->list_menu_data.Attr->icon->icnType = BMP_FORMAT_256_COLOUR; | |
| 1128 data->list_menu_data.Attr->icon->area.px = 1; | |
| 1129 data->list_menu_data.Attr->icon->area.py = 1; | |
| 1130 data->list_menu_data.Attr->icon->area.sx = selectItemHeaderIconData.width; | |
| 1131 data->list_menu_data.Attr->icon->area.sy = selectItemHeaderIconData.height; | |
| 1132 data->list_menu_data.Attr->icon->selfExplanatory = selectItemHeaderIconData.selfExplanatory; | |
| 1133 } | |
| 1134 #endif | |
| 1135 } | |
| 1136 } | |
| 1137 | |
| 1138 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1139 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 1140 // Now the list will be displayed, so start the timer. | |
| 1141 sat_select_item_status = listDisplayListMenu(data->win, &data->list_menu_data, (ListCbFunc)sat_select_item_listmnu_cb,Unicode_menu/*MC*/); | |
| 1142 // xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 1143 // Displaying '?' to indicate to the user that help is available for a menu | |
| 1144 if(data->sat_command->qual & SAT_M_SELECT_HELP_AVAIL) | |
| 1145 { | |
| 1146 displayHelpSymbol(); | |
| 1147 } | |
| 1148 tim_start(data->sat_timer); | |
| 1149 return sat_select_item_status; | |
| 1150 } | |
| 1151 | |
| 1152 static void sat_select_item_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command) | |
| 1153 /* callback handler for events sent from parents or childs to to trigger some execution */ | |
| 1154 { | |
| 1155 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
| 1156 T_sat_select_item * data = (T_sat_select_item *)win_data->user; | |
| 1157 T_SAT_RES sat_res; | |
| 1158 | |
| 1159 TRACE_FUNCTION ("sat_select_item_exec()"); | |
| 1160 | |
| 1161 switch (event) | |
| 1162 { | |
| 1163 case SAT_SELECT_ITEM: | |
| 1164 /* initialization of administrative data */ | |
| 1165 | |
| 1166 data->sat_command = sat_command; /* save a pointer to the parameter for later use in callbacks */ | |
| 1167 | |
| 1168 /* initialization of the dialog data */ | |
| 1169 data->list_menu_data.ListPosition = 1;/* True cursor position in list menu. */ | |
| 1170 data->list_menu_data.Font = 0; | |
| 1171 data->list_menu_data.LeftSoftKey = TxtSoftSelect; | |
| 1172 data->list_menu_data.RightSoftKey = TxtSoftBack; | |
| 1173 // xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 1174 //Adding the support for MenuSelect in this list view | |
| 1175 data->list_menu_data.KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUSELECT| KEY_MNULEFT| KEY_MNUUP | KEY_MNUDOWN|KEY_HUP; | |
| 1176 data->list_menu_data.Reason = 0; | |
| 1177 data->list_menu_data.Strings = TRUE; | |
| 1178 data->list_menu_data.Attr = &sat_select_menuAttrib; | |
| 1179 data->list_menu_data.autoDestroy = TRUE; | |
| 1180 | |
| 1181 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1182 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 1183 // Fix: Set Timeout period to 20 seconds and create the timer. | |
| 1184 data->sat_timeout = TWENTY_SECS; | |
| 1185 data->sat_timer = tim_create(data->win, data->sat_timeout, (T_MFW_CB)sat_select_TimerCb); | |
| 1186 g_sat_scroll_status = TRUE; | |
| 1187 | |
| 1188 // Shashi Shekar B.S., a0876501, Feb 4, 2006, DR: OMAPS00061462 | |
| 1189 #ifdef FF_MMI_SAT_ICON | |
| 1190 /*Initialize the data members of Icon attributes */ | |
| 1191 selectItemIconData.width = 0; | |
| 1192 selectItemIconData.height = 0; | |
| 1193 selectItemIconData.dst = NULL; | |
| 1194 selectItemIconData.selfExplanatory = FALSE; | |
| 1195 selectItemHeaderIconData.width = 0; | |
| 1196 selectItemHeaderIconData.height = 0; | |
| 1197 selectItemHeaderIconData.dst = NULL; | |
| 1198 selectItemHeaderIconData.selfExplanatory = FALSE; | |
| 1199 #endif | |
| 1200 | |
| 1201 /* (re)create the dialog handler */ | |
| 1202 if (sat_select_item_recreate(data) == LISTS_FAIL) | |
| 1203 { | |
| 1204 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE; | |
| 1205 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 1206 sat_done (sat_command, sat_res); | |
| 1207 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1208 // Delete the timer and set g_sat_scroll_status to FALSE. | |
| 1209 tim_delete (data->sat_timer); | |
| 1210 g_sat_scroll_status = FALSE; | |
| 1211 sat_select_item_destroy (data->win); | |
| 1212 } | |
| 1213 break; | |
| 1214 | |
| 1215 /* sbh - all window types are being provided with this event to destroy the window */ | |
| 1216 case SAT_DESTROY_WINDOW: | |
| 1217 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1218 // Delete the timer and set g_sat_scroll_status to FALSE. | |
| 1219 tim_delete (data->sat_timer); | |
| 1220 g_sat_scroll_status = FALSE; | |
| 1221 sat_select_item_destroy (data->win); | |
| 1222 break; | |
| 1223 /* ...sbh */ | |
| 1224 | |
| 1225 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1226 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 1227 // Fix: Timeout has occured. Used existing LISTS_REASON_TIMEOUT event for the same | |
| 1228 case LISTS_REASON_TIMEOUT: | |
| 1229 sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP; // set no response from user | |
| 1230 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 1231 sat_done (data->sat_command, sat_res); | |
| 1232 tim_stop(data->sat_timer); // stop the timer | |
| 1233 tim_delete(data->sat_timer); // delete the timer | |
| 1234 g_sat_scroll_status = FALSE; // set scrolling status to FALSE | |
| 1235 sat_select_item_destroy(data->win); | |
| 1236 break; | |
| 1237 | |
| 1238 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1239 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 1240 // Fix: User has scrolled up/down. Used existing LISTS_REASON_SCROLL event for the same | |
| 1241 case LISTS_REASON_SCROLL: | |
| 1242 tim_stop(data->sat_timer); // stop the timer | |
| 1243 tim_start(data->sat_timer); // start the timer again for 20 seconds | |
| 1244 break; | |
| 1245 default: | |
| 1246 TRACE_EVENT ("sim_select_item_exec() unexpected event"); | |
| 1247 break; | |
| 1248 } | |
| 1249 } | |
| 1250 | |
| 1251 static void sat_select_item_listmnu_cb (T_MFW_HND win, ListMenuData_t * ListData) | |
| 1252 /* sat_select_item menu event handler */ | |
| 1253 { | |
| 1254 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
| 1255 T_sat_select_item * data = (T_sat_select_item *)win_data->user; | |
| 1256 SatItem * item; | |
| 1257 int index; | |
| 1258 T_SAT_RES sat_res; | |
| 1259 | |
| 1260 if ((win EQ NULL) || (win_data EQ NULL) || (data EQ NULL)) | |
| 1261 return; | |
| 1262 | |
| 1263 TRACE_FUNCTION ("sat_select_item_listmnu_cb()"); | |
| 1264 | |
| 1265 switch (ListData->Reason) | |
| 1266 { | |
| 1267 case E_MNU_SELECT: | |
| 1268 case LISTS_REASON_SELECT: | |
| 1269 index = ListData->ListPosition; /* index of selected item */ | |
| 1270 item = &data->sat_command->c.menu.items[index]; /* selected item */ | |
| 1271 /* CQ 16307 - Start */ | |
| 1272 if (data->sat_command->c.menu.itemIconQual == 0xFF) | |
| 1273 sat_res[SAT_ERR_INDEX] = SatResSuccess; | |
| 1274 else | |
| 1275 { | |
| 1276 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460 | |
| 1277 #ifdef FF_MMI_SAT_ICON | |
| 1278 sat_res[SAT_ERR_INDEX] = SatResSuccess; | |
| 1279 #else | |
| 1280 sat_res[SAT_ERR_INDEX] = SatResNoIcon; | |
| 1281 /* CQ 16307 - End */ | |
| 1282 #endif | |
| 1283 } | |
| 1284 | |
| 1285 | |
| 1286 // xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
| 1287 // Using the MenuSelect Key for requesting the help info in STK menu. | |
| 1288 if(ListData->selectKey && ((data->sat_command->qual & SAT_M_SELECT_HELP_AVAIL) != 0)) | |
| 1289 { | |
| 1290 sat_res[SAT_ERR_INDEX] = SatResUserHelp; | |
| 1291 ListData->selectKey = FALSE; | |
| 1292 } | |
| 1293 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 1294 satItem (data->sat_command, item->id, sat_res, sizeof(T_SAT_RES)); /* issue the answering envelope */ | |
| 1295 | |
| 1296 | |
| 1297 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1298 // Stop and delete the timer. Also, set scrolling status to FALSE | |
| 1299 tim_stop(data->sat_timer); | |
| 1300 tim_delete(data->sat_timer); | |
| 1301 g_sat_scroll_status = FALSE; | |
| 1302 sat_select_item_destroy(data->win); | |
| 1303 break; | |
| 1304 // c015 rsa | |
| 1305 case LISTS_REASON_TIMEOUT: | |
| 1306 sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP; | |
| 1307 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 1308 sat_done (data->sat_command, sat_res); | |
| 1309 sat_select_item_destroy(data->win); | |
| 1310 break; | |
| 1311 // end c015 rsa | |
| 1312 case LISTS_REASON_CLEAR: /* abort */ | |
| 1313 case LISTS_REASON_HANGUP: /* abort */ | |
| 1314 sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT; | |
| 1315 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 1316 sat_done (data->sat_command, sat_res); | |
| 1317 sat_select_item_destroy(data->win); | |
| 1318 break; | |
| 1319 case LISTS_REASON_BACK: /* back to previous menu */ | |
| 1320 sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK; | |
| 1321 sat_res[SAT_AI_INDEX] = SatResAiNoCause; | |
| 1322 sat_done (data->sat_command, sat_res); | |
| 1323 | |
| 1324 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1325 // Stop and delete the timer. Also, set scrolling status to FALSE | |
| 1326 tim_stop(data->sat_timer); | |
| 1327 tim_delete(data->sat_timer); | |
| 1328 g_sat_scroll_status = FALSE; | |
| 1329 sat_select_item_destroy(data->win); | |
| 1330 break; | |
| 1331 default: | |
| 1332 return; | |
| 1333 } | |
| 1334 return; | |
| 1335 } | |
| 1336 // end c016 rsa | |
| 1337 | |
| 1338 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1339 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 1340 // Fix: This is the call back function for sat timer | |
| 1341 static int sat_select_TimerCb (T_MFW_EVENT event, T_MFW_TIM *timer) | |
| 1342 { | |
| 1343 T_MFW_HND win = mfw_parent (mfw_header()); | |
| 1344 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
| 1345 T_sat_select_item *data = (T_sat_select_item *)win_data->user; | |
| 1346 | |
| 1347 TRACE_FUNCTION("sat_select_TimerCb()"); | |
| 1348 | |
| 1349 // Destroy the list before going back to the sat menu | |
| 1350 listsDestroy(data->list_menu_data.win); | |
| 1351 // Send timeout event. | |
| 1352 SEND_EVENT (data->win, LISTS_REASON_TIMEOUT, NULL, NULL); | |
| 1353 return MFW_EVENT_CONSUMED; | |
| 1354 } | |
| 1355 | |
| 1356 // May 24, 2005 REF: CRR 29358 x0021334 | |
| 1357 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response | |
| 1358 // Fix: This function returns the status of scrolling, which is used for restarting the timer | |
| 1359 BOOL getScrollStatus() | |
| 1360 { | |
| 1361 return g_sat_scroll_status; | |
| 1362 } |
