FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiLists.c @ 640:16eb1b9640dc
target gtm900 renamed to gtm900mgc2
This change reflects the fact that the build target in question supports
MGC2GSMT hardware only, and will NOT work on other hw that confusing bears
the same end user name of GTM900, neither the LoCosto-based GTM900-C
nor the Calypso-based MG01GSMT that has a different and incompatible RFFE.
If we ever get our hands on a piece of MG01GSMT hw and add support for it,
that other target will be named gtm900mg01.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 31 Jan 2020 00:46:07 +0000 |
parents | 3c2acfa1a72f |
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 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 "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 "gdi.h" #include "audio.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 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); /******************************************************************************* $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()"); winLists = winCreate(Parent, 0, E_WIN_VISIBLE, (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; /* * 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; TRACE_FUNCTION("listsKeyEvent()"); //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. 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); } // May 24, 2005 REF: CRR 29358 x0021334 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response // Required when user scrolls list items. Depeneding on this, the timer needs // to be restarted for another 20 seconds. 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); 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); } // May 24, 2005 REF: CRR 29358 x0021334 // Description: CT_PTCRB 27.22.4.9.8 fails: wrong terminal response // Required when user scrolls list items. Depeneding on this, the timer needs // to be restarted for another 20 seconds. 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) { 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) { 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: if (w->flags & E_WIN_VISIBLE) { dspl_ClearAll(); softKeys_displayId(ListData->MenuData.LeftSoftKey, ListData->MenuData.RightSoftKey, 0, ListData->MenuListsAttr.mnuColour ); } #ifdef FF_MMI_RINGTONE SEND_EVENT(ListData->Parent,E_VISIBLE_MELODY,0,(void*)ListData); #endif break; #ifdef FF_MMI_RINGTONE case MfwWinSuspend: SEND_EVENT(ListData->Parent,E_SUSPEND_MELODY,0,(void*)ListData); break; #endif default: return MFW_EVENT_PASSED; // break; // RAVI } 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; 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) { 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; winDelete (win); FREE_MEMORY ((void*) ListData, sizeof (ListWinInfo)); }