diff g23m/condat/ms/src/bmi/MmiLists.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/bmi/MmiLists.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,587 @@
+/*******************************************************************************
+
+					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));
+    
+}
+