diff src/aci2/bmi/MmiBookInputWindow.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/bmi/MmiBookInputWindow.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,772 @@
+/*******************************************************************************
+
+					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:		PhoneBook
+ $File:		    MmiBookInputWindow.h
+ $Revision:		1.0                                                       
+                                                                              
+ $Author:		Condat(UK)                                                         
+ $Date:		    25/10/00                                                      
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+
+    This module provides the functionality for the input window of the
+	phone book module.
+	                    
+********************************************************************************
+ $History: MmiBookInputWindow.h
+
+	25/10/00			Original Condat(UK) BMI version.	
+	   
+ $End
+
+*******************************************************************************/
+
+
+
+
+
+/*******************************************************************************
+                                                                              
+                                Include Files
+                                                                              
+*******************************************************************************/
+#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 "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 "MmiBookShared.h"
+#ifdef EASY_TEXT_ENABLED
+#include "MmiChineseInput.h"
+#endif
+
+#include "mmiColours.h"
+/* SPR#1428 - SH - New Editor
+ * This file is obsolete with new editor and should not be compiled */
+#ifndef NEW_EDITOR
+
+#define NAME 	0
+#define NUMBER  1
+
+static int DoNextLongPress = FALSE;
+static UBYTE UPPER_CASE = TRUE;
+static UBYTE MODE;
+extern int upCase;
+
+
+/*******************************************************************************
+                                                                              
+                                Private Methods
+                                                                              
+*******************************************************************************/
+
+/*******************************************************************************
+
+ $Function:		bookInputDialog
+
+ $Description:	Dialog function for the input window
+ 
+ $Returns:		None
+
+ $Arguments:	win, window handle
+                event, event to be handled
+				value, not used
+				parameter, not used
+ 
+*******************************************************************************/
+
+static void bookInputDialog( T_MFW_HND win, USHORT event, SHORT value, void *parameter )
+{
+    T_MFW_WIN		*win_data	= ((T_MFW_HDR *) win)->data;
+    tBookStandard	*data		= (tBookStandard *) win_data->user;
+	tInputSpecifics	*properties = (tInputSpecifics *) parameter;
+
+    TRACE_FUNCTION ("bookInputDialog()");
+
+	/* Handle the input event, ew only deal with initialise and
+	   destroy of the window in here
+	*/
+    switch( event )
+	{
+		case INPUT_INIT:
+		{
+			/* Initialise the input window
+			*/
+			data->properties.abc			= properties->abc;
+			data->properties.text			= properties->text;
+			data->properties.edt_attr_input	= properties->edt_attr_input;
+			data->properties.left_soft_key	= properties->left_soft_key;
+			data->properties.right_soft_key = properties->right_soft_key;
+			data->properties.callback		= properties->callback;
+            data->edt						= edtCreate( data->win, data->properties.edt_attr_input, 0, 0 );
+
+			/* activate our editor, stopping any others before doing so
+			*/
+			editDeactivate();
+			editActivate( data->edt, properties->abc );
+			edtChar( data->edt, ecBottom );
+
+			/* show the window
+			*/
+			winShow( data->win );
+		}
+		break;
+
+		case INPUT_DESTROY:
+		{
+			/* destroy the input window
+			*/
+			bookInputDestroy( win );
+		}
+		break;
+	}
+}
+
+
+
+
+
+
+/*******************************************************************************
+
+ $Function:		bookInputWindowCB
+
+ $Description:	Window event handler
+ 
+ $Returns:		MFW_CONSUMED for the visible event, MFW_PASSED otherwise
+
+ $Arguments:	e, event, w, window handle
+ 
+*******************************************************************************/
+
+static int bookInputWindowCB( MfwEvt e, MfwWin *w )
+{
+	tBookStandard *data = (tBookStandard *) w->user;
+
+    TRACE_FUNCTION ("bookInputWindowCB()");
+
+	/* Handle the visible event, otherwise return MFW_EVENT_PASSED
+	*/
+	switch( e )
+    {
+        case MfwWinVisible:
+		{
+			/* Window visible
+			*/
+		    MmiBookShowDefault();
+			edtShow( data->edt );
+		    PROMPT( MmiBookMenuArea().px, MmiBookMenuArea().py, 0, data->properties.text );
+			softKeys_displayId(data->properties.left_soft_key, data->properties.right_soft_key, 0, COLOUR_LIST_SUBMENU);
+		}
+		break;
+
+        default:
+		{
+			/* unabel to handle event, pass handling of event back up tree
+			*/
+			return MFW_EVENT_PASSED;
+		}
+    }
+
+	/* if we get here, we have handled the event
+	*/
+    return MFW_EVENT_CONSUMED;
+}
+
+
+
+
+
+
+/*******************************************************************************
+
+ $Function:		bookInputKbdCB
+
+ $Description:	Input window keyboard handler
+ 
+ $Returns:		MFW_EVENT_CONSUMED always, this will pass LEFT, RIGHT and CLEAR
+				events back to the calling window using the installed callback
+				method
+
+ $Arguments:	e, event, k, key handle
+ 
+*******************************************************************************/
+
+static int bookInputKbdCB( MfwEvt e, MfwKbd *k )
+{
+    T_MFW_HND       win			= mfwParent( mfw_header() );
+    T_MFW_WIN		*win_data	= ((T_MFW_HDR *) win)->data;
+    tBookStandard	*data		= (tBookStandard *) win_data->user;
+
+    TRACE_FUNCTION ("bookInputKbdCB()");
+
+	/* make sure the active editor is ours
+	*/
+    if ( activeEditor() != data->edt )
+        editActivate( data->edt, data->properties.abc );
+
+	/* Handle the key press
+	*/
+    switch (k->code)
+    {
+		case KCD_MNUUP:
+		{
+			/* move right
+			*/
+			edtChar( data->edt, ecRight );
+		}
+		break;
+
+	    case KCD_MNUDOWN:
+		{
+			/* move left
+			*/
+		    edtChar( data->edt, ecLeft );
+		}
+		break;
+
+		case KCD_MNUSELECT:
+	    case KCD_LEFT:
+		{
+			/* select the entry using the parent window callback
+			*/
+		    data->properties.callback( data->parent_win, INPUT_LEFT );
+		   
+		}
+		break;
+
+		case KCD_HUP:
+		{
+            /* get edit control block
+			*/
+            MfwEdt *edt = ( (MfwHdr *) data->edt )->data;
+
+                data->properties.callback( data->parent_win, INPUT_CLEAR );
+		}
+		break;
+
+		case KCD_RIGHT:
+		{
+			MfwEdt *edt = ( (MfwHdr *) data->edt )->data;
+			/* select the entry using the parent windows callback
+			*/
+			//If we have any data input, delete the char before cursor
+			if ( edt->attr->text[0] )
+				edtChar( data->edt, ecBack );
+			else	
+			{
+				data->properties.callback( data->parent_win, INPUT_RIGHT );
+				displaySoftKeys_edition (TxtNull, TxtNull ,TxtNull);
+				MODE = NUMBER;
+			}
+			 
+		}
+		break;
+
+		case KCD_HASH:
+		{
+			/* deal with hash key 
+			*/
+	        edtChar( data->edt, '#' );
+		}
+		break;
+
+	    case KCD_STAR:
+		{
+			/* deal with star key
+			*/
+		    edtChar( data->edt, '*' );
+		}
+		break;
+
+	    default:
+		{
+			/* default handling for the key being pressed
+			*/
+
+			/*NM, p015a    */
+			/* it is better to use these two function for different mode*/
+			if (data->properties.abc EQ TRUE)
+				editEventKey(e, k); /* alpha-mode*/
+			else
+				edtChar(data->edt ,editControls[k->code]); /*digit -mode*/
+
+			edtShow(data->edt);
+			/*p015a  end  */
+			
+		}
+		break;
+    }
+
+	/* always consume the event
+	*/
+    return MFW_EVENT_CONSUMED;
+}
+
+
+
+
+
+
+/*******************************************************************************
+
+ $Function:		bookInputKbdLongCB
+
+ $Description:	Keyboard long event handler
+ 
+ $Returns:		MFW_EVENT_CONSUMED always
+
+ $Arguments:	e, event, k, key handle
+ 
+*******************************************************************************/
+
+static int bookInputKbdLongCB( MfwEvt e, MfwKbd *k )
+{
+    T_MFW_HND       win			= mfwParent( mfw_header() );
+    T_MFW_WIN		*win_data	= ((T_MFW_HDR *) win)->data;
+    tBookStandard	*data		= (tBookStandard *) win_data->user;
+
+    TRACE_FUNCTION ("bookInputKbdLongCB()");
+
+
+    /* subpress unwanted longpresses (mfw throws more than one long press event for one long press on a key)*/
+    if ( e & KEY_LONG )
+    {
+	   	if ( DoNextLongPress EQ FALSE )
+	       DoNextLongPress = TRUE; 
+		else
+	       DoNextLongPress = FALSE; 
+    }
+    if ( !DoNextLongPress )
+        return MFW_EVENT_CONSUMED;      /* don't do current long press */
+
+	
+
+	/* Handling the long keypress events needs to deal with a 
+	   number of characters in the input window, not just the
+	   normal clear event
+	*/
+	
+	/* if the event is long key clear and the buffer is not empty then
+	   clear the buffer.  Otherwise if the buffer is empty then destroy
+	   the input editor
+	*/
+
+	switch(k->code)
+	{
+		case KCD_HUP:	
+		{
+		    MfwEdt *edt;
+
+			/* get edit control block
+			*/
+			edt = ((MfwHdr *) data->edt)->data;
+	
+			/* if buffer empty then kill the editor window, otherwise clear the buffer
+			*/
+			if ( edt->attr->text[0] )
+			{
+				char *c_ptr = data->properties.edt_attr_input->text;
+				memset( c_ptr, '\0', strlen( c_ptr ) );
+				edtReset( data->edt );
+				edtShow( data->edt );
+			}
+			else
+				bookInputDestroy( data->win );
+		}
+		break;
+
+		case KCD_HASH:
+			edtChar( data->edt, ecBack );
+			edtChar( data->edt, 'p' );
+		break;
+
+		case KCD_0:
+			edtChar( data->edt, ecBack );
+			edtChar( data->edt, '+' );
+		break;
+
+
+		default:
+		if (MODE EQ NAME)
+		{
+			
+			if (UPPER_CASE EQ FALSE)
+			{
+				TRACE_EVENT("UPPER_CASE EQ FALSE");
+				UPPER_CASE = TRUE;
+				upCase = FALSE;	
+				displaySoftKeys_edition (TxtLowercase, TxtNull ,TxtNull);														
+
+			}
+			else
+			{
+			    TRACE_EVENT("UPPER_CASE EQ TRUE");
+				UPPER_CASE = FALSE;		
+				upCase = TRUE;
+				displaySoftKeys_edition (TxtUppercase, TxtNull ,TxtNull);														
+			}
+			edtChar(data->edt, ecBack);
+		}
+			break;
+			
+	}
+
+	/* always handle the event
+	*/
+	return  MFW_EVENT_CONSUMED;
+}
+
+
+
+
+
+/*******************************************************************************
+
+ $Function:		bookInputCreate
+
+ $Description:	Create the input window and asociate it's handlers
+ 
+ $Returns:		handle of new window, or NULL if failure
+
+ $Arguments:	parent, handle of the parent window
+ 
+*******************************************************************************/
+
+static T_MFW_HND bookInputCreate( MfwHnd parent )
+{
+    T_MFW_WIN		*parent_win_data    = ( (T_MFW_HDR *) parent )->data;
+    tBookStandard   *parent_data        = (tBookStandard *) parent_win_data->user;
+	T_phbk			*phbk               = parent_data->phbk;
+	T_MFW_WIN		*win_data;
+	tBookStandard	*data;
+
+	TRACE_FUNCTION ("bookInputCreate()");
+
+	/* allocate memory for our control block
+	*/
+	if ( ( data = (tBookStandard *) ALLOC_MEMORY( sizeof( tBookStandard ) ) ) == NULL )
+		return NULL;
+
+	/* Create the window if we can
+	*/
+	if ( ( data->win = win_create( parent, 0, E_WIN_VISIBLE, (T_MFW_CB) bookInputWindowCB ) ) == NULL )
+	{
+		FREE_MEMORY( (void *)data, sizeof( tBookStandard ) );
+		return NULL;
+	}
+
+	/* Okay, we have created the control block and the window, so
+	   we now need to configure the dialog and data pointers
+	*/
+    data->mmi_control.dialog	= (T_DIALOG_FUNC) bookInputDialog;
+    data->mmi_control.data		= data;
+    win_data					= ((T_MFW_HDR *)data->win)->data;
+ 	win_data->user				= (void *) data;
+	data->phbk					= phbk;
+	data->parent_win			= parent;
+
+	/* create keyboards and menus for our window
+	*/
+	data->kbd		= kbdCreate( data->win, KEY_ALL,            (MfwCb) bookInputKbdCB );
+    data->kbd_long	= kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookInputKbdLongCB );
+
+	/* And return the handle of the newly created window
+	*/
+    return data->win;
+}
+
+
+
+
+
+/*******************************************************************************
+                                                                              
+                                Public Methods
+                                                                              
+*******************************************************************************/
+
+/*******************************************************************************
+
+ $Function:		bookInputStart
+
+ $Description:	Start the input handler
+ 
+ $Returns:		Handle of newly created window, or NULL if failure
+
+ $Arguments:	parent, parent window handle, properties, input window property
+				control block.
+ 
+*******************************************************************************/
+
+MfwHnd bookInputStart( MfwHnd parent,tInputSpecifics *properties )
+{
+	T_MFW_HND win;
+
+	TRACE_FUNCTION ("bookInputStart()");
+
+	/* allocate window, and if successful initialise it
+	*/
+	if ( ( win = bookInputCreate( parent ) ) != NULL )
+		SEND_EVENT( win, INPUT_INIT, 0, properties );
+	return win;
+}
+
+
+/*******************************************************************************
+
+ $Function:		bookInputStartNumberEditor
+
+ $Description:	Start the input handler using default properties
+ 
+ $Returns:		Handle of newly created window, or NULL if failure
+
+ $Arguments:	parent, parent window handle, buffer, input buffer
+ 
+*******************************************************************************/
+
+MfwHnd bookInputStartNumberEditor( MfwHnd parent, void *buffer )
+{
+    T_MFW_HND	    win         = parent;
+    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
+    tBookStandard   *data       = (tBookStandard *) win_data->user;
+    T_phbk          *Phbk       = data->phbk;
+    tInputSpecifics DefaultParameters;
+
+	TRACE_FUNCTION ("bookInputStartNumberEditor()");
+	MODE = NUMBER;
+	
+    /* Set up the default parameters for the input window
+    */
+	bookSetEditAttributes( NUMBER_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, 
+		(char *) buffer, NUMBER_LENGTH, &Phbk->edt_attr_number );
+
+	DefaultParameters.abc               = FALSE;
+	DefaultParameters.text              = TxtEnterNumber;
+	DefaultParameters.edt_attr_input    = &Phbk->edt_attr_number;
+	DefaultParameters.left_soft_key     = TxtSoftOK;
+	DefaultParameters.right_soft_key    = TxtDelete;//Changed text
+	// dunno if that changes softkey functionality
+	DefaultParameters.callback          = bookAddNumberCB;
+
+	/* allocate window, and if successful initialise it
+	*/
+    return bookInputStart( parent, &DefaultParameters );
+}
+
+
+
+/*******************************************************************************
+
+ $Function:		bookInputStartNameEditor
+
+ $Description:	Start the input handler using default properties
+ 
+ $Returns:		Handle of newly created window, or NULL if failure
+
+ $Arguments:	parent, parent window handle, buffer, input buffer
+ 
+*******************************************************************************/
+
+MfwHnd bookInputStartNameEditor( MfwHnd parent, void *buffer )
+{
+    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) parent )->data;
+    tBookStandard   *data       = (tBookStandard *) win_data->user;
+    T_phbk          *Phbk       = data->phbk;
+
+    tInputSpecifics DefaultParameters;
+
+	MODE = NAME;
+
+	TRACE_FUNCTION ("bookInputStartNameEditor()");
+
+    /* Set up the default parameters for the input window */
+
+    /*MC 1957, name strings should use MAX_ALPHA_LEN*/
+	bookSetEditAttributes( NUMBER_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, 
+		(char *) buffer, MAX_ALPHA_LEN, &Phbk->edt_attr_name );
+
+ /*SPR 1434*/
+
+ /*SPR 1526, changed #ifdef to #if*/
+#if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED)
+/*MC, the chinese editor MUST have a unicode string as input*/
+/*MC , SPR 1242 merged in from b-sample build*/
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+	{	T_CHINESE_DATA chinese_data;
+		chinese_data.TextString = (char*) Phbk->edt_buf_name;
+		if (chinese_data.TextString[0]== 0)//if, empty string
+		{	chinese_data.TextString[0] = 0x80;//give string Unicode tag
+			chinese_data.TextString[1] = 0x7F;
+		}
+		else
+		{	char l_name[MAX_ALPHA_LEN];
+			int ascii_len = strlen(chinese_data.TextString);
+			int i;
+			if (chinese_data.TextString[0]!= 0x80)/*If ASCII string*/
+			{	memset(l_name, '\0', MAX_ALPHA_LEN);
+				l_name[0] = 0x80;//give Unicode tag
+				l_name[1] = 0x7F;	
+				/*convert ascii string to unicode*/
+				{	for (i =0; i < (ascii_len); i++) 
+						{	if ((2+2*i+1)>=MAX_ALPHA_LEN)
+								break;
+							l_name[2+2*i] = 0x00; 
+							l_name[2+2*i+1] = chinese_data.TextString[i]; 
+						}
+						if ((2+2*i+1)<=MAX_ALPHA_LEN)
+						{	l_name[2+2*i] = 0x00;		//double null termination
+							l_name[2+2*i+1] = 0x00;
+						}
+				}
+				memcpy(chinese_data.TextString, l_name, MAX_ALPHA_LEN);
+			}
+		}
+		/*MC end*/
+
+		chinese_data.Callback = (T_EDIT_CB)bookAddNameCB;
+		chinese_data.Identifier = INPUT_LEFT ;
+		chinese_data.LeftSoftKey = TxtSave;
+		chinese_data.DestroyEditor = TRUE;
+		chinese_data.EditorSize = (USHORT)((MAX_ALPHA_LEN-4)/2);//i.e.8
+		return chinese_input(parent, &chinese_data);
+	}
+	else
+#endif
+	{
+		DefaultParameters.abc               = TRUE;
+		DefaultParameters.text              = TxtEnterName;
+		DefaultParameters.edt_attr_input    = &Phbk->edt_attr_name;
+		DefaultParameters.left_soft_key     = TxtSoftOK;
+		DefaultParameters.right_soft_key    = TxtDelete;//Changed text - MC
+		DefaultParameters.callback          = bookAddNameCB;
+
+		/* allocate window, and if successful initialise it
+		*/
+   		return bookInputStart( parent, &DefaultParameters );
+	}
+}
+
+
+
+/*******************************************************************************
+
+ $Function:		bookInputDestroy
+
+ $Description:	Destroy Input Window
+ 
+ $Returns:		None
+
+ $Arguments:	Handle of window to be destroyed
+ 
+*******************************************************************************/
+
+void bookInputDestroy( MfwHnd window )
+{
+	T_MFW_WIN     *win  = ((T_MFW_HDR *) window)->data;
+	tBookStandard *data = (tBookStandard *) win->user;
+
+	TRACE_FUNCTION ("bookInputDestroy()");
+
+	if (data)
+	{
+        editDeactivate();
+     
+		winDelete ( data->win );
+		FREE_MEMORY( (void *) data, sizeof( tBookStandard ) );
+	}
+}
+
+#endif /* NEW_EDITOR */
+
+/*******************************************************************************
+                                                                              
+                                End of File
+                                                                              
+*******************************************************************************/