FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiLists.c @ 261:841a848ba762
SPI SWE: clear any pending boot-time interrupts in spi_init()
Charger plug/unplug hw logic in the Iota ABB has no built-in debouncing,
thus electrical contact bounce on the charging power connection interface
produces a lot of charger plug/unplug interrupts. When we boot in
charging mode (charging power present at boot time and is presumably
the cause of Switch-ON), some bounce may occur between the initial
Iota Switch-ON action and Calypso firmware booting. By clearing any
accumulated ITSTATREG interrupts on boot, we prevent these pre-boot
interrupts from generating charger plug/unplug events to FCHG, which
would upset smooth from-boot charging.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 14 May 2021 02:49:05 +0000 |
parents | 65f0ce5bd32f |
children |
line wrap: on
line source
/******************************************************************************* CONDAT (UK) ******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Basic MMI $Project code: BMI (6349) $Module: MMI $File: MmiLists.c $Revision: 1.0 $Author: Condat(UK) $Date: 22/02/01 ******************************************************************************** Description: ******************************************************************************** $History: MmiLists.c July 10, 2007 REF: DRT OMAPS00135679 x0073106 Description:MM: Board freezes while choosing settings menu in File management. Solution: Hang-up key is mapped properly while going back from audio list window. Mar 30, 2007 REF: OMAPS00122691 x0039928 Description: COMBO: No melody heard on parsing over different volums in tones menu Solution: E_MELODY_START event is sent to play the melody. xrashmic 8 Sep 2006, OMAPS00091618 Removed redundant code introduced during integration June 19, 2006 REF: DRT OMAPS00076378 x0012849 : Jagannatha Description: MIDI files should play while browsing Solution: Event will be generated upon press of Menu up and down key. June 05, 2006 REF:OMAPS00060424 x0045876 Description: Header Toggling Solution: Implemented the toggling of header when displaying the length text in SELECT ITEM and SET UP MENU May 18, 2006 REF: DRT OMAPS00076438 xdeepadh Description: Scrolling not implemented in Imageviewer Solution: The support for scrolling has been provided. May 03, 2006 REF: DRT OMAPS00076439 xdeepadh Description: Image viewer back not working Solution: The Preview List will be repopulated, when the list window is resumed. May 03, 2006 REF: DRT OMAPS00076376 xdeepadh Description: File Viewer-N5.12 issues (very unstable) Solution: The keys are blocked until the view or preview is completed. Dec 22, 2005 REF: ENH xdeepadh Description: Image Viewer Application Solution: Implemeted the Image Viewer to view the jpeg images xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 Using the MenuSelect Key for requesting the help info in STK menu. Storing the info that MenuSelectKey was pressed in a list view. May 24, 2005 REF: CRR 29358 x0021334 Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response Fix: The implementation is now based on timer. After the specified timeout period the control comes back to SAT main menu, if there is no selection done by the user. 25/10/00 Original Condat(UK) BMI version. $End *******************************************************************************/ #define ENTITY_MFW /* includes */ #include <string.h> #include <stdio.h> #include <stdlib.h> #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #include "gsm.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "gdi.h" #include "audio.h" #include "pconst.cdg" #include "mconst.cdg" #include "message.h" #include "ccdapi.h" #include "prim.h" #include "cus_aci.h" #include "cnf_aci.h" #include "mon_aci.h" #include "tok.h" #include "prim.h" #ifndef PCM_2_FFS #include "pcm.h" #endif #include "mfw_sys.h" #include "mfw_mfw.h" #include "mfw_win.h" #include "mfw_kbd.h" #include "mfw_lng.h" /* SPR#1428 - SH - New Editor changes */ #ifndef NEW_EDITOR #include "mfw_edt.h" #endif #include "mfw_icn.h" #include "mfw_mnu.h" #include "mfw_tim.h" #include "mfw_sim.h" #include "mfw_cm.h" #include "mfw_nm.h" #include "mfw_phb.h" #include "mfw_mme.h" #include "mfw_sat.h" #include "mfw_sms.h" #include "dspl.h" #include "ksd.h" #include "psa.h" #include "MmiMain.h" #include "MmiBookController.h" #include "MmiDummy.h" #include "MmiDialogs.h" #include "MmiLists.h" #include "MmiMenu.h" #include "mmiCall.h" #include "Mmiicons.h" #include "MmiIdle.h" #include "MmiSoftKeys.h" #include "MmiSounds.h" #include "MmiIdle.h" #include "MmiNetwork.h" #include "mmiSat_i.h" #include "MmiAoc.h" #include "cus_aci.h" #include "mfw_ffs.h" #include "MmiTimers.h" #include "mmiColours.h" #ifndef MFW_EVENT_PASSED #define MFW_EVENT_PASSED 0 #endif /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ MfwHnd g_win; extern MfwHnd g_title_timer; /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ extern MfwRect menuArea; /* menus display area */ extern BOOL getMelodyListStatus(void); typedef enum { E_INIT, E_BACK, E_RETURN, E_ABORT, E_EXIT } e_lists_events; /*----------------------------------------------------------------------------- * * List menu handling functions: * *-----------------------------------------------------------------------------*/ // ADDED BY RAVI - 28-11-2005 EXTERN UBYTE mnuDCSType (MfwHnd m, UBYTE listLanguageType); EXTERN BOOL getScrollStatus(void); // END RAVI - 28-11-2005 static int listsKeyEvent(MfwEvt event, MfwKbd *keyboard); static int listsWinEvent(MfwEvt e, MfwWin *w); static int listsListCbMenu(MfwEvt EventCode, MfwMnu *MenuHandle); static void lists_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); static int listsIconsKeyEvent(MfwEvt event, MfwKbd *keyboard); static int listsIconsWinEvent(MfwEvt e, MfwWin *w); static int listsIconsListCbMenu(MfwEvt EventCode, MfwMnu *MenuHandle); static void listsIcons_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); /******************************************************************************* $Function: listIconsDisplayListMenu $Description: Creates a list menu from data stored in NVRAM. $Returns: none. $Arguments: *******************************************************************************/ MfwHnd winIconsLists; T_MFW listIconsDisplayListMenu (MfwHnd Parent, ListMenuData *Data, ListCbFunc cbFunc,int inUnicode) { // UBYTE i; // RAVI - Not Used. MfwWin * win; MfwHnd winLists; T_MFW Status = LISTS_OK; TRACE_FUNCTION ("listIconsDisplayListMenu() Start"); winLists = winCreate(Parent, 0, E_WIN_VISIBLE |E_WIN_RESUME|E_WIN_SUSPEND, (MfwCb)listsIconsWinEvent); winIconsLists=winLists; if (winLists == NULL) { Status = LISTS_FAIL; /* Inform caller of failure. */ TRACE_EVENT ("win creation fails"); } else { ListIconsWinInfo * ListData = (ListIconsWinInfo *)ALLOC_MEMORY (sizeof (ListIconsWinInfo)); if (!ListData) { /* cq12719. if insufficient memory for listdata then delete window and Free allocated memory.16-03-04.MZ */ if(NULL != winLists) winDelete(winLists); TRACE_EVENT ("(ListIconsWinInfo *)ALLOC_MEMORY fails"); return LISTS_FAIL; } ListData->mmi_control.dialog = (T_DIALOG_FUNC)lists_exec_cb; ListData->mmi_control.data = ListData; win = ((MfwHdr *)winLists)->data; win->user = (void *) ListData; ListData->Parent = Parent; ListData->Callback = cbFunc; ListData->winLists = winLists; ListData->kbdLists = kbdCreate(winLists,Data->KeyEvents|KEY_MAKE,(MfwCb)listsIconsKeyEvent); ListData->kbdLists_long = kbdCreate(winLists,Data->KeyEvents|KEY_LONG,(MfwCb)listsIconsKeyEvent); if ((ListData->kbdLists == NULL) || (ListData->kbdLists_long == NULL)) { Status = LISTS_FAIL; TRACE_EVENT ("ListData->kbdLists fails"); } else { /* Create initial list menu for display. */ /* * set menu list from outside */ ListData->MenuListsAttr = *Data->Attr; /* copy contents */ /* SPR#2492 - DS - Do not overwrite mode settings unless mode is zero */ if (ListData->MenuListsAttr.mode == 0x0000) /* Mode not yet setup */ ListData->MenuListsAttr.mode = MNU_LEFT | MNU_LIST | MNU_CUR_LINE; else ListData->MenuListsAttr.mode |= Data->Attr->mode; ListData->MenuListsAttr.font = Data->Font; ListData->MenuListsAttr.items = Data->List; ListData->MenuListsAttr.nItems = Data->ListLength; /* START: x0045876, 05-June-2006 (OMAPS00060424 - Header Toggle) */ ListData->MenuListsAttr.header_toggle = Data->Attr->header_toggle; if (ListData->MenuListsAttr.header_toggle) g_win = winLists; /* END: x0045876, 05-June-2006 (OMAPS00060424 - Header Toggle) */ /* * Intialize List Menu Data */ ListData->MenuData = Data; /* copy contents */ ListData->MenuData->listCol = COLOUR_LIST_XX; //Set-up colour ListData->MenuData->Attr = &ListData->MenuListsAttr; /* copy data*/ ListData->MenuLists = mnuCreate(winLists, &ListData->MenuListsAttr, E_MNU_SELECT | E_MNU_ESCAPE| E_MNU_POSTDRAW, (MfwCb)listsIconsListCbMenu); ListData->MenuData->win = winLists; Data->win = winLists; mnuScrollMode(ListData->MenuLists,0); if (Data->Strings) mnuLang (ListData->MenuLists,0); else mnuLang (ListData->MenuLists,mainMmiLng); /* SPR#1983 - SH - Set up whether menu is in unicode or not */ if (inUnicode != 0) { mnuDCSType(ListData->MenuLists, inUnicode); /* Unicode display */ } mnuChooseVisibleItem(ListData->MenuLists, Data->ListPosition-1); mnuUnhide(ListData->MenuLists); displaySoftKeys(ListData->MenuData->LeftSoftKey,ListData->MenuData->RightSoftKey); winShow(winLists); } } return Status; } static int listsIconsKeyEvent (MfwEvt e, MfwKbd *k) /* list keyboard event handler */ { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; ListIconsWinInfo * data = (ListIconsWinInfo *)win_data->user; MfwMnu *MenuHandle; /* This trace function was added inside the fflag by vinoj to remove compilation error: 2/6/06*/ TRACE_FUNCTION("listsIconsKeyEvent() start"); { //xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 //Initialize selectKey to FALSE here. It will be set to TRUE only when a key event for KCD_MNUSELECT occurs. data->MenuData->selectKey = FALSE; if (!(e & KEY_MAKE)) { return MFW_EVENT_CONSUMED; } if(data->MenuData->block_keys == TRUE) { return MFW_EVENT_CONSUMED; } if (e & KEY_LONG) { switch (k->code) { case KCD_HUP: /* back to previous menu */ mnuEscape(data->MenuLists); break; case KCD_RIGHT: /* Power Down */ return MFW_EVENT_PASSED; /* handled by idle */ default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } else { switch (k->code) { case KCD_MNUUP: /* highlight previous entry */ mnuUp(data->MenuLists); { MenuHandle = mfwControl(data->MenuLists); data->MenuData->Reason = LISTS_REASON_SCROLL; data->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; // Send event to indicate that the user has scrolled list items SEND_EVENT(data->Parent, LISTS_REASON_SCROLL, 0, NULL); } break; case KCD_MNUDOWN: /* highlight next entry */ mnuDown(data->MenuLists); { MenuHandle = mfwControl(data->MenuLists); data->MenuData->Reason = LISTS_REASON_SCROLL; data->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; // Send event to indicate that the user has scrolled list items SEND_EVENT(data->Parent, LISTS_REASON_SCROLL, 0, NULL); } break; case KCD_MNUSELECT: //xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 //Menu Select Key was pressed, storing this for future use. data->MenuData->selectKey = TRUE; //Break is delibrately not used here. The control should pass through the KCD_LEFT case. case KCD_LEFT: /* activate this entry */ MenuHandle = mfwControl(data->MenuLists); data->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; mnuSelect(data->MenuLists); break; case KCD_CALL: /* press send key */ data->ExitReason = LISTS_REASON_SEND; data->MenuData->Reason = LISTS_REASON_SEND; MenuHandle = mfwControl(data->MenuLists); data->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /* SPR998 - SH - check if callback exists before calling it! */ if (data->Callback) data->Callback(data->Parent, data->MenuData); if (data->MenuData->autoDestroy) { /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (data->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*)data, sizeof (ListIconsWinInfo)); } break; case KCD_HUP: /* back to previous menu */ data->ExitReason = LISTS_REASON_HANGUP; data->MenuData->Reason = LISTS_REASON_HANGUP; /*NM, p023 */ MenuHandle = mfwControl(data->MenuLists); data->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /*NM, p023 end */ data->Callback(data->Parent, data->MenuData); //July 10, 2007 REF: DRT OMAPS00135679 x0073106 /*if (data->MenuData->autoDestroy) {*/ /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (data->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ /* winDelete (win); FREE_MEMORY ((void*)data, sizeof (ListIconsWinInfo)); }*/ break; case KCD_RIGHT: /* back to previous menu */ mnuEscape(data->MenuLists); break; default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: listsWinEvent $Description: window event handler $Returns: none. $Arguments: *******************************************************************************/ static int listsIconsWinEvent(MfwEvt e, MfwWin *w) { ListIconsWinInfo * ListData = (ListIconsWinInfo *)w->user; TRACE_FUNCTION("listsIconsWinEvent() start"); TRACE_EVENT_P1("ListData->Parent %x",ListData->Parent); switch (e) { case E_WIN_VISIBLE: SEND_EVENT(ListData->Parent,LISTS_REASON_VISIBLE,0,(void*)ListData); break; case MfwWinResume: SEND_EVENT(ListData->Parent,LISTS_REASON_RESUME,0,(void*)ListData); break; case MfwWinSuspend: SEND_EVENT(ListData->Parent,LISTS_REASON_SUSPEND,0,(void*)ListData); break; } return MFW_EVENT_CONSUMED; } /*a0393213 lint warning removal - This function is not used currently. So it's put under the flag. If it is required just remove the flag.*/ #ifdef MMI_LINT_WARNING_REMOVAL static void listsIcons_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; ListIconsWinInfo * ListData = (ListIconsWinInfo *)win_data->user; T_MFW_HND * l_parent; SHORT l_id; TRACE_FUNCTION ("listsIcons_exec_cb() start"); switch (event) { case E_INIT: case E_BACK: case E_RETURN: case E_ABORT: case E_EXIT: /* defaultreaction */ l_parent = ListData->Parent; l_id = ListData->id; /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (ListData->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*) ListData, sizeof (ListIconsWinInfo)); SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ break; default: return; } } #endif /******************************************************************************* $Function: listsListCbMenu $Description: List menu handler. (mfw callback function) $Returns: none. $Arguments: *******************************************************************************/ int listsIconsListCbMenu(MfwEvt EventCode, MfwMnu *MenuHandle) { int Status = LISTS_OK; T_MFW_HND win = mfw_parent (mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; ListIconsWinInfo* ListData = (ListIconsWinInfo *)win_data->user; TRACE_FUNCTION("listsIconsListCbMenu() "); switch (EventCode) { case E_MNU_SELECT: ListData->ExitReason = E_MNU_SELECT; ListData->MenuData->Reason = LISTS_REASON_SELECT;// MZ 14/2/01 E_MNU_SELECT; ListData->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; ListData->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /* SPR998 - SH - check if callback exists before calling it! */ if (ListData->Callback) ListData->Callback(ListData->Parent, ListData->MenuData); break; case E_MNU_ESCAPE: ListData->ExitReason = LISTS_REASON_BACK; ListData->MenuData->Reason = LISTS_REASON_BACK; /*NM, p023*/ ListData->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; ListData->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /*NM, p023*/ /* SPR998 - SH - check if callback exists before calling it! */ if (ListData->Callback) ListData->Callback(ListData->Parent, ListData->MenuData); break; case E_MNU_POSTDRAW: { T_MFW_WIN * winIconsLists_data = ((T_MFW_HDR *)winIconsLists)->data; ListIconsWinInfo* winIconsListsData = (ListIconsWinInfo *)winIconsLists_data->user; winIconsListsData->ExitReason = LISTS_REASON_DRAWCOMPLETE; winIconsListsData->MenuData->Reason = LISTS_REASON_DRAWCOMPLETE; winIconsListsData->MenuData->CursorPosition = MenuHandle->lCursor[MenuHandle->level]; winIconsListsData->MenuData->ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ winIconsListsData->MenuData->lineHeight= MenuHandle->lineHeight; if (winIconsListsData->Callback) winIconsListsData->Callback(winIconsListsData->Parent, winIconsListsData->MenuData); } break; default: Status = LISTS_FAIL; break; } return Status; } void listsIconsDestroy(T_MFW_HND win) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; ListIconsWinInfo * ListData = (ListIconsWinInfo *)win_data->user; TRACE_EVENT_P1("listsIconsDestroy %x",win); /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (ListData->MenuListsAttr.header_toggle) { if(g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*) ListData, sizeof (ListIconsWinInfo)); } /******************************************************************************* $Function: listDisplayListMenu $Description: Creates a list menu from data stored in NVRAM. $Returns: none. $Arguments: *******************************************************************************/ T_MFW listDisplayListMenu (MfwHnd Parent, ListMenuData *Data, ListCbFunc cbFunc,int inUnicode) { // UBYTE i; // RAVI - Not Used. MfwWin * win; MfwHnd winLists; T_MFW Status = LISTS_OK; TRACE_FUNCTION ("listDisplayListMenu() Start"); winLists = winCreate(Parent, 0, E_WIN_VISIBLE |E_WIN_RESUME|E_WIN_SUSPEND, (MfwCb)listsWinEvent); if (winLists == NULL) { Status = LISTS_FAIL; /* Inform caller of failure. */ TRACE_EVENT ("win creation fails"); } else { ListWinInfo * ListData = (ListWinInfo *)ALLOC_MEMORY (sizeof (ListWinInfo)); if (!ListData) { /* cq12719. if insufficient memory for listdata then delete window and Free allocated memory.16-03-04.MZ */ if(NULL != winLists) winDelete(winLists); TRACE_EVENT ("(ListWinInfo *)ALLOC_MEMORY fails"); return LISTS_FAIL; } ListData->mmi_control.dialog = (T_DIALOG_FUNC)lists_exec_cb; ListData->mmi_control.data = ListData; win = ((MfwHdr *)winLists)->data; win->user = (void *) ListData; ListData->Parent = Parent; ListData->Callback = cbFunc; ListData->winLists = winLists; ListData->kbdLists = kbdCreate(winLists,Data->KeyEvents|KEY_MAKE, (MfwCb)listsKeyEvent); ListData->kbdLists_long = kbdCreate(winLists,Data->KeyEvents|KEY_LONG,(MfwCb)listsKeyEvent); if ((ListData->kbdLists == NULL) || (ListData->kbdLists_long == NULL)) { Status = LISTS_FAIL; TRACE_EVENT ("ListData->kbdLists fails"); } else { /* Create initial list menu for display. */ /* * set menu list from outside */ ListData->MenuListsAttr = *Data->Attr; /* copy contents */ /* SPR#2492 - DS - Do not overwrite mode settings unless mode is zero */ if (ListData->MenuListsAttr.mode == 0x0000) /* Mode not yet setup */ ListData->MenuListsAttr.mode = MNU_LEFT | MNU_LIST | MNU_CUR_LINE; else ListData->MenuListsAttr.mode |= Data->Attr->mode; ListData->MenuListsAttr.font = Data->Font; ListData->MenuListsAttr.items = Data->List; ListData->MenuListsAttr.nItems = Data->ListLength; /* START: x0045876, 05-June-2006 (OMAPS00060424 - Header Toggle) */ ListData->MenuListsAttr.header_toggle = Data->Attr->header_toggle; if (ListData->MenuListsAttr.header_toggle) g_win = winLists; /* END: x0045876, 05-June-2006 (OMAPS00060424 - Header Toggle) */ /* * Intialize List Menu Data */ ListData->MenuData = *Data; /* copy contents */ ListData->MenuData.listCol = COLOUR_LIST_XX; //Set-up colour ListData->MenuData.Attr = &ListData->MenuListsAttr; /* copy data*/ ListData->MenuLists = mnuCreate(winLists, &ListData->MenuListsAttr, E_MNU_SELECT | E_MNU_ESCAPE, (MfwCb)listsListCbMenu); ListData->MenuData.win = winLists; Data->win = winLists; mnuScrollMode(ListData->MenuLists,1); if (Data->Strings) mnuLang (ListData->MenuLists,0); else mnuLang (ListData->MenuLists,mainMmiLng); /* SPR#1983 - SH - Set up whether menu is in unicode or not */ if (inUnicode != 0) { mnuDCSType(ListData->MenuLists, inUnicode); /* Unicode display */ } mnuChooseVisibleItem(ListData->MenuLists, Data->ListPosition-1); mnuUnhide(ListData->MenuLists); TRACE_EVENT ("mmiList winShow()"); winShow(winLists); } } return Status; } /******************************************************************************* $Function: listsKeyEvent $Description: Keyboard event handler $Returns: none. $Arguments: *******************************************************************************/ static int listsKeyEvent (MfwEvt e, MfwKbd *k) /* list keyboard event handler */ { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; ListWinInfo * data = (ListWinInfo *)win_data->user; MfwMnu *MenuHandle; /* This trace function was added inside the fflag by vinoj to remove compilation error: 2/6/06*/ { //xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 //Initialize selectKey to FALSE here. It will be set to TRUE only when a key event for KCD_MNUSELECT occurs. data->MenuData.selectKey = FALSE; if (!(e & KEY_MAKE)) { return MFW_EVENT_CONSUMED; } if (e & KEY_LONG) { switch (k->code) { case KCD_HUP: /* back to previous menu */ mnuEscape(data->MenuLists); break; case KCD_RIGHT: /* Power Down */ return MFW_EVENT_PASSED; /* handled by idle */ default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } else { switch (k->code) { case KCD_MNUUP: /* highlight previous entry */ mnuUp(data->MenuLists); //GW Not needed? winShow(win); // Only required in melody list selection. /* Mar 30, 2007 REF: OMAPS00122691 x0039928 */ /* This event will be used to play the selected file. */ if(getMelodyListStatus()== TRUE) { MenuHandle = mfwControl(data->MenuLists); data->MenuData.Reason = LISTS_REASON_SCROLL; data->MenuData.CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData.ListPosition = MenuHandle->lCursor[MenuHandle->level]; SEND_EVENT(data->Parent,E_START_MELODY,0,(void*)data); } if(getScrollStatus() == TRUE) { // Send event to indicate that the user has scrolled list items SEND_EVENT(data->Parent, LISTS_REASON_SCROLL, 0, NULL); } break; case KCD_MNUDOWN: /* highlight next entry */ mnuDown(data->MenuLists); //GW Not needed? winShow(win); /* Mar 30, 2007 REF: OMAPS00122691 x0039928 */ /* This event will be used to play the selected file. */ if(getMelodyListStatus()== TRUE) { MenuHandle = mfwControl(data->MenuLists); data->MenuData.Reason = LISTS_REASON_SCROLL; data->MenuData.CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData.ListPosition = MenuHandle->lCursor[MenuHandle->level]; SEND_EVENT(data->Parent,E_START_MELODY,0,(void*)data); } if(getScrollStatus() == TRUE) { // Send event to indicate that the user has scrolled list items SEND_EVENT(data->Parent, LISTS_REASON_SCROLL, 0, NULL); } break; case KCD_MNUSELECT: //xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 //Menu Select Key was pressed, storing this for future use. data->MenuData.selectKey = TRUE; //Break is delibrately not used here. The control should pass through the KCD_LEFT case. case KCD_LEFT: /* activate this entry */ mnuSelect(data->MenuLists); MenuHandle = mfwControl(data->MenuLists); if ((MenuHandle != NULL) && // Marcus: Issue 1810: 12/03/2003 (MenuHandle->curAttr != NULL) && winIsFocussed(win)) { softKeys_displayId( TxtSoftSelect, TxtSoftBack, 0, MenuHandle->curAttr->mnuColour); } break; case KCD_CALL: /* press send key */ data->ExitReason = LISTS_REASON_SEND; data->MenuData.Reason = LISTS_REASON_SEND; MenuHandle = mfwControl(data->MenuLists); data->MenuData.CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData.ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /* SPR998 - SH - check if callback exists before calling it! */ if (data->Callback) data->Callback(data->Parent, &data->MenuData); if (data->MenuData.autoDestroy) { /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (data->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*)data, sizeof (ListWinInfo)); } break; case KCD_HUP: /* back to previous menu */ data->ExitReason = LISTS_REASON_HANGUP; data->MenuData.Reason = LISTS_REASON_HANGUP; /*NM, p023 */ MenuHandle = mfwControl(data->MenuLists); data->MenuData.CursorPosition = MenuHandle->lCursor[MenuHandle->level]; data->MenuData.ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /*NM, p023 end */ data->Callback(data->Parent, &data->MenuData); if (data->MenuData.autoDestroy) { /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (data->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*)data, sizeof (ListWinInfo)); } break; case KCD_RIGHT: /* back to previous menu */ mnuEscape(data->MenuLists); break; default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } } TRACE_FUNCTION("listsKeyEvent()-end"); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: listsWinEvent $Description: window event handler $Returns: none. $Arguments: *******************************************************************************/ static int listsWinEvent(MfwEvt e, MfwWin *w) { ListWinInfo * ListData = (ListWinInfo *)w->user; TRACE_FUNCTION("listsWinEvent()"); switch (e) { case E_WIN_VISIBLE: SEND_EVENT(ListData->Parent,LISTS_REASON_VISIBLE,0,(void*)ListData); break; case MfwWinResume: SEND_EVENT(ListData->Parent,LISTS_REASON_RESUME,0,(void*)ListData); break; case MfwWinSuspend: SEND_EVENT(ListData->Parent,LISTS_REASON_SUSPEND,0,(void*)ListData); break; } return MFW_EVENT_CONSUMED; } static void lists_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; ListWinInfo * ListData = (ListWinInfo *)win_data->user; T_MFW_HND * l_parent; SHORT l_id; TRACE_FUNCTION ("lists_exec_cb()"); switch (event) { case E_INIT: case E_BACK: case E_RETURN: case E_ABORT: case E_EXIT: /* defaultreaction */ l_parent = ListData->Parent; l_id = ListData->id; /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (ListData->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*) ListData, sizeof (ListWinInfo)); SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ break; default: return; } } /******************************************************************************* $Function: listsListCbMenu $Description: List menu handler. (mfw callback function) $Returns: none. $Arguments: *******************************************************************************/ int listsListCbMenu(MfwEvt EventCode, MfwMnu *MenuHandle) { int Status = LISTS_OK; T_MFW_HND win = mfw_parent (mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; ListWinInfo* ListData = (ListWinInfo *)win_data->user; TRACE_FUNCTION("listsCbMenu()"); switch (EventCode) { case E_MNU_SELECT: ListData->ExitReason = E_MNU_SELECT; ListData->MenuData.Reason = LISTS_REASON_SELECT;// MZ 14/2/01 E_MNU_SELECT; ListData->MenuData.CursorPosition = MenuHandle->lCursor[MenuHandle->level]; ListData->MenuData.ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /* SPR998 - SH - check if callback exists before calling it! */ if (ListData->Callback) ListData->Callback(ListData->Parent, &ListData->MenuData); break; case E_MNU_ESCAPE: ListData->ExitReason = LISTS_REASON_BACK; ListData->MenuData.Reason = LISTS_REASON_BACK; /*NM, p023*/ ListData->MenuData.CursorPosition = MenuHandle->lCursor[MenuHandle->level]; ListData->MenuData.ListPosition = MenuHandle->lCursor[MenuHandle->level]; /* True cursor position in list menu. */ /*NM, p023*/ /* SPR998 - SH - check if callback exists before calling it! */ if (ListData->Callback) ListData->Callback(ListData->Parent, &ListData->MenuData); break; default: Status = LISTS_FAIL; TRACE_EVENT("Activation 77 error"); break; } /* * Free all allocated memory and handler */ if (ListData->MenuData.autoDestroy) { /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (ListData->MenuListsAttr.header_toggle) { if (g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*) ListData, sizeof (ListWinInfo)); } return Status; } void listsDestroy(T_MFW_HND win) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; ListWinInfo * ListData = (ListWinInfo *)win_data->user; /* START: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ if (ListData->MenuListsAttr.header_toggle) { if(g_title_timer) { tim_delete(g_title_timer); g_title_timer = NULL; } } /* END: 05-June-2006, x0045876 (OMAPS00060424 - Header Toggle) */ winDelete (win); FREE_MEMORY ((void*) ListData, sizeof (ListWinInfo)); }