FreeCalypso > hg > fc-magnetite
diff src/aci2/bmi/MmiEditor.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/MmiEditor.c Mon Sep 26 00:29:36 2016 +0000 @@ -0,0 +1,2343 @@ +/******************************************************************************* + + 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: MmiEditor.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 22/02/01 + +******************************************************************************** + + Description: + + + +******************************************************************************** + + $History: MmiMain.c + Nov 24, 2005 DR: OMAPS00045909 - Shashi Shekar B.S. + Description: Improve IMEI control mechanism + Solution : When MMI calls sAT_PLUSCFUN, if an IMEI invalid error is returned, + we will block on that screen & will not allow the user to browse menus further, + since the PS will not be booted at all!!! + + May 02, 2005 REF : LOCOSTO-ENH-30818 - xpradipg + Description: IMEI retreival by posting a call to ACI sAT_xx API + Solution: The direct call to cl_get_imeisv() is replaced with the + call to the callNUmber() which inturn calls sAT_Dn() and + retrieves the IMEI info + Aug 16, 2004 REF: CRR 24323 Deepa M.D + Bug:Clenup of sprintf used for tracing + Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX + + 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 "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_kbd.h" +#include "mfw_edt.h" +#include "mfw_tim.h" +#include "mfw_phb.h" +#include "mfw_sms.h" +#include "mfw_ss.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_lng.h" +#include "mfw_sat.h" +#include "mfw_kbd.h" +#include "mfw_nm.h" +#include "mfw_cm.h" + +#include "dspl.h" + +#include "ksd.h" +#include "psa.h" + +#include "MmiMain.h" +#include "MmiDummy.h" +#include "MmiMmi.h" + +#include "MmiDialogs.h" +#include "MmiLists.h" +#include "MmiMenu.h" +#include "MmiSoftKeys.h" + +#include "MmiIdle.h" +#include "MmiEditor.h" +#include "MmiEditor_i.h" + +#include "cus_aci.h" + +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + +#include "Mmiicons.h" +#include "MmiBookShared.h" +#include "mmiSmsMenu.h" +#include "mfw_ffs.h" +#ifdef EASY_TEXT_ENABLED +#include "MmiLatinPredText.h" +#include "MmiDictionary.h" +#endif /* EASY_TEXT_ENABLED */ + +#include "mmiColours.h" + +#ifndef MFW_EVENT_PASSED +#define MFW_EVENT_PASSED 0 +#endif + +/********************************************************************* +********************************************************************** + + DYNAMIC EDITOR WINDOW. DECLARATION + +********************************************************************* +**********************************************************************/ +/* + * Internal events + */ + + + +static T_MFW_HND editor_create (T_MFW_HND parent); +//SH - static void editor_destroy (T_MFW_HND window); +static void editor_exec_cb (T_MFW_HND win,USHORT event, SHORT value, T_EDITOR_DATA * editor_data); +static int editor_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); +static int editor_kbd_cb (T_MFW_EVENT event, T_MFW_KBD * keyboard); +static int editor_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc); + + +static char SymbolPrompt[40] = "123456789"; +static int DoNextLongPress = FALSE; + +static UBYTE UPPER_CASE = FALSE; +extern int upCase; +static UBYTE over_length_label = FALSE; + +static UBYTE AllowPredText = FALSE; +extern int SymbolChar; +static const unsigned char TextIconeZiTextSmall[] = +{ + 0x03, + 0x03, + 0x18, + 0x7c, + 0xcc, + 0x08, + 0x10, + 0x0c +}; + +/* internal used functions: */ +static void editor_hideInit(T_EDITOR_INFO *data); +static void editor_hideInsert(T_EDITOR_INFO *data, U8 key); +static void editor_hideClear(T_EDITOR_INFO *data); +static void editor_hideClearAll(T_EDITOR_INFO *data); +static void editor_hideTerminate(T_EDITOR_INFO *data); + + +/********************************************************************* +********************************************************************** + + DYNAMIC EDITOR WINDOW. IMPLEMENTATION + +********************************************************************* +**********************************************************************/ + +void editor_data_init( T_EDITOR_DATA* editor_info, T_EDIT_CB callback,USHORT lsk, USHORT rsk, USHORT txtId, USHORT min_num_char, UBYTE mode, ULONG timeout) +{ + + editor_info->LeftSoftKey = lsk; + editor_info->RightSoftKey = rsk; + editor_info->TextId = txtId; + editor_info->mode = mode; + editor_info->Callback = callback; + editor_info->min_enter = min_num_char; + editor_info->timeout = timeout; + + //Set-up default values + editor_info->AlternateLeftSoftKey = TxtNull; + editor_info->Identifier = 0; /* optional */ + + editor_info->FormatString = NULL; + editor_info->formatIndex = 0; + editor_info->fieldIndex = 0; + + //Set-up default values - the defaults may change depending on what other editors do + editor_info->hide = FALSE; + editor_info->TextString = NULL; + editor_info->destroyEditor = TRUE; + +} + +/******************************************************************************* + + $Function: calculateWindow + + $Description: initialises the size of the editor based on the screen size and the 'zone_id' + which controls what part of the screen the editor should be in. + + $Returns: An updated 'attr' with values for the editor window position and size + + $Arguments: zone_id - bitmapped word which defines the editor size and position + The definitions are in MMIEditor.h + The most common sizes are + full screen + full screen with softkkeys + full screen with title and softkeys + but the macros also support part screens (with/without icons/titles/softkeys) eg. + left screen :- middle width screen right screen + xxxx---- --xxxx-- ----xxxx + xxxx---- --xxxx-- ----xxxx + xxxx---- --xxxx-- ----xxxx + xxxx---- --xxxx-- ----xxxx + top screen :- middle ht screen bottom screen + xxxxxxxx -------- --------- + xxxxxxxx xxxxxxxx --------- + -------- xxxxxxxx xxxxxxxxx + -------- -------- xxxxxxxxx + or any combination of width/height. + An Id of 0 is assumed to be undefined and is treated as full screen plus softkeys. +*******************************************************************************/ +#ifndef LSCREEN +//Sizes defined for CSAMPLE editore +#define BOOKDETAILS_EDITOR_SIZE 0, 0, SCREEN_SIZE_X-4, Mmi_layout_line(LAST_LINE_TOP) +#define NUMBER_EDITOR_SIZE 0, 12, SCREEN_SIZE_X , MNU3LINE +#define PHONEBOOK_DLG_EDITOR_SIZE 4, Mmi_layout_line(3)+2, SCREEN_SIZE_X-4, SCREEN_SIZE_Y-(Mmi_layout_line(3)+2) +#define BOOKSDN_EDITOR_SIZE 34, Mmi_layout_line(3)+2, 50, Mmi_layout_line(1)+2 + +//MMICall +#define CALL_EDITOR_SIZE 4,28,SCREEN_SIZE_X-4, 20 +#define CALLSCRATCHPAD_EDITOR_SIZE 6, Mmi_layout_line(2),SCREEN_SIZE_X-6, 16 + +//MMIServices +#define SERVICE_CREATE_EDITOR_SIZE 4,Mmi_layout_line(1)+2,SCREEN_SIZE_X-4, MNU3LINE +#define PASSWORD_EDITOR_SIZE 0, 12, SCREEN_SIZE_X , 13 + +//From MMIIdle +//GW Changed window height from 30 (27?) to 24. +#define WIN_DIALLING_SIZE 0,Mmi_layout_line_icons(2), SCREEN_SIZE_X,24 +#define WIN_DIALLING_C_SIZE 0,Mmi_layout_line_icons(1),SCREEN_SIZE_X,32 + +//Positions for editor windows in mmismssend +#define PHNO_EDITOR_SIZE 0, (Mmi_layout_line(1)+2), SCREEN_SIZE_X, 20 + +//NB defines below used twice, second time START/SIZE_Y was same as START/SIZE_Y above +#define CENTRE_EDITOR_SIZE 0, Mmi_layout_line(1), SCREEN_SIZE_X, MNU3LINE+3 + +//And for MMIServices - moved here from mmiservices.c +#define SAT_EDITOR_SIZE 6,30,SCREEN_SIZE_X-6, 20 + +#define RPWD_EDITOR_SIZE 0,12,SCREEN_SIZE_X,13 + +//MMIBookCallDetails +#define PHB_EDITOR_SIZE 4,0,SCREEN_SIZE_X-4, ALLBUT2LINE + +//MMIPins +#define PIN_EDIT_RESET_SIZE 12,20,84-12,16 + +//MMITimeDate +#define TIMEDATE_EDITOR_AREA_SIZE 0,10,70,10 +#endif +void setSize(MfwRect *win, int px, int py, int sx, int sy) +{ + win->px = px; win->py = py; + win->sx = sx; win->sy = sy; +} + +void getSpecificWindowSize(MfwEdtAttr* attr, int zone_id ) +{ + switch (zone_id) + { + case ZONE_SMALL_EDITOR: + attr->win.px = 6; + attr->win.py = Mmi_layout_IconHeight()*2; + attr->win.sx = SCREEN_SIZE_X-attr->win.px; + attr->win.sy = Mmi_layout_line_height()*2+4; + break; + case ZONE_BOTTOM_LINE: + attr->win.px = 0; + attr->win.py = SCREEN_SIZE_Y - Mmi_layout_line_height() - Mmi_layout_softkeyHeight(); + attr->win.sx = SCREEN_SIZE_X-attr->win.px; + attr->win.sy = Mmi_layout_line_height(); + break; + case ZONE_BOTTOM_LINE_FIND: //used for phonebook search + attr->win.px = dspl_GetTextExtent(MmiRsrcGetText(TxtFind),0); + attr->win.py = SCREEN_SIZE_Y - Mmi_layout_line_height() - Mmi_layout_softkeyHeight(); + attr->win.sx = SCREEN_SIZE_X-attr->win.px; + attr->win.sy = Mmi_layout_line_height(); + break; + +#ifndef LSCREEN + case BOOKDETAILS_EDITOR: setSize(&attr->win,BOOKDETAILS_EDITOR_SIZE); break; + case NUMBER_EDITOR: setSize(&attr->win,NUMBER_EDITOR_SIZE); break; + case PHONEBOOK_DLG_EDITOR: setSize(&attr->win,PHONEBOOK_DLG_EDITOR_SIZE); break; + case BOOKSDN_EDITOR: setSize(&attr->win,BOOKSDN_EDITOR_SIZE); break; + case CALL_EDITOR: setSize(&attr->win,CALL_EDITOR_SIZE); break; + case CALLSCRATCHPAD_EDITOR: setSize(&attr->win,CALLSCRATCHPAD_EDITOR_SIZE); break; + case SERVICE_CREATE_EDITOR: setSize(&attr->win,SERVICE_CREATE_EDITOR_SIZE); break; + case PASSWORD_EDITOR: setSize(&attr->win,PASSWORD_EDITOR_SIZE); break; + + case WIN_DIALLING: + case WIN_DIALLING_CB: + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + setSize(&attr->win,WIN_DIALLING_C_SIZE); + else + setSize(&attr->win,WIN_DIALLING_SIZE); + break; + case WIN_DIALLING_SMS: + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { + setSize(&attr->win,0,Mmi_layout_line_icons(1),84,24); + } + else + setSize(&attr->win,WIN_DIALLING_SIZE); + break; + case WIN_DIALLING_SAT: + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + setSize(&attr->win,WIN_DIALLING_C_SIZE); + else + setSize(&attr->win,WIN_DIALLING_SIZE); + break; + + case PHNO_EDITOR: setSize(&attr->win,PHNO_EDITOR_SIZE); break; + case CENTRE_EDITOR: setSize(&attr->win,CENTRE_EDITOR_SIZE); break; + case SAT_EDITOR : setSize(&attr->win,SAT_EDITOR_SIZE); break; + case RPWD_EDITOR: setSize(&attr->win,RPWD_EDITOR_SIZE); break; + case PHB_EDITOR: setSize(&attr->win,PHB_EDITOR_SIZE); break; + case PIN_EDIT_RESET: setSize(&attr->win,PIN_EDIT_RESET_SIZE); break; + case TIMEDATE_EDITOR_AREA: setSize(&attr->win,TIMEDATE_EDITOR_AREA_SIZE); break; +#endif + default: + break; + } +} + +void calculateWindow(MfwEdtAttr* attr, int zone_id ) +{ + attr->win.px = 0; + attr->win.py = 0; + attr->win.sx = SCREEN_SIZE_X; + attr->win.sy = SCREEN_SIZE_Y; + if (zone_id == ZONE_BORDER_EDITOR) + { //Leave border on left/right of screen. + attr->win.px = 4; + attr->win.sx = attr->win.sx - 2*attr->win.px; + zone_id = ZONE_FULLSOFTKEYS; + } + else if ((zone_id != 0x0000) && ((zone_id &0xF000)==0xF000)) + { + getSpecificWindowSize(attr,zone_id); + return; + } + else if (zone_id == 0) + zone_id = ZONE_FULLSOFTKEYS; + + if (zone_id & ZONE_ICONS) + attr->win.py = attr->win.py + Mmi_layout_IconHeight(); + + if (zone_id & ZONE_SOFTKEYS) + attr->win.sy = attr->win.sy - Mmi_layout_softkeyHeight(); + + if (zone_id & ZONE_TITLE) + attr->win.py = attr->win.py + Mmi_layout_TitleHeight(); + + if (zone_id & ZONE_CASE_ABC) + attr->win.sy = attr->win.sy - Mmi_layout_line_height(); + + attr->win.sy = attr->win.sy - attr->win.py; + + if ((zone_id & ZONE_FULLSCREEN) == ZONE_FULLSCREEN) + return; + + //Else window is not entire screen + switch (zone_id & ZONE_FULL_HEIGHT) + { + case ZONE_FULL_HEIGHT: + break; + case ZONE_TOPHALF_HEIGHT: + attr->win.sy = attr->win.sy/2; + break; + case ZONE_MIDDLE_HEIGHT: + attr->win.sy = attr->win.sy/2; + attr->win.py = attr->win.py+attr->win.sy/2; + break; + case ZONE_BOTTOMHALF_HEIGHT: + attr->win.sy = attr->win.sy/2; + attr->win.py = attr->win.py+attr->win.sy; + break; + default: + //No action + break; + } + switch (zone_id & ZONE_FULL_WIDTH) + { + case ZONE_FULL_WIDTH: + break; + case ZONE_LEFTHALF_WIDTH: + attr->win.sx = attr->win.sx/2; + break; + case ZONE_MIDDLE_WIDTH : + attr->win.sx = attr->win.sx/2; + attr->win.px = attr->win.px+attr->win.sx/2; + break; + case ZONE_RIGHTHALF_WIDTH: + attr->win.sx = attr->win.sx/2; + attr->win.px = attr->win.px+attr->win.sx; + break; + default: + //No action + break; + } +} + +void getTitlePosition(MfwEdtAttr* attr, int zone_id ) +{ + if (zone_id & 0xFFFF0000) + { + //title is on top line/LHS + + } +} +#define EDITOR_FONT 0 +#define EDITOR_CONTROLS 0 +/******************************************************************************* + + $Function: editor_attr_init + + $Description: initialize parameters in the edit buffer + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +void editor_attr_init(MfwEdtAttr* attr, int zone_id, U8 mode, U8 *controls, char *text, U16 size, int colour ) +{ + calculateWindow(attr, zone_id); + getTitlePosition(attr, zone_id); + attr->edtCol = colour; + attr->font = EDITOR_FONT; + attr->mode = mode; + attr->controls = controls; + attr->text = text; + attr->size = size; + AllowPredText = FALSE; +} +#ifdef EASY_TEXT_ENABLED +/******************************************************************************* + + $Function: editor_attr_init_pred + + $Description: initialize parameters in the predictive text editor buffer + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +void editor_attr_init_pred(MfwEdtAttr* attr, int zone_id, U8 mode, U8 *controls, char *text, U16 size, int colour) +{ + calculateWindow(attr, zone_id); + attr->edtCol = colour; + attr->font = EDITOR_FONT; + attr->mode = mode; + attr->controls = controls; + attr->text = text; + attr->size = size; + AllowPredText = TRUE; +} + +//returns true if next word after cursor ought to be capitalised +UBYTE capitalise_word(T_MFW_HND editor_handle) +{ char LastChar; + char CharBefore; + + LastChar = getCursorChar(editor_handle, -1); + CharBefore = getCursorChar(editor_handle, -2); + + if (LastChar == '.' || LastChar == '!' || LastChar == '?' || LastChar == 0) + return TRUE; + if (LastChar == ' ') + if(CharBefore == '.' || CharBefore == '!' || CharBefore == '?' ) + return TRUE; + return FALSE; +} + + +#endif + + +/******************************************************************************* + + $Function: editor_start + + $Description: Common editor. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +T_MFW_HND editor_start (T_MFW_HND parent, T_EDITOR_DATA * editor_data) +{ + T_MFW_HND win; + + TRACE_FUNCTION ("editor_start()"); + + win = editor_create (parent); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_EDITOR_INIT, 0, editor_data); + } + return win; +} + +/******************************************************************************* + + $Function: editor_create + + $Description: Creation of an editor. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static T_MFW_HND editor_create (T_MFW_HND parent) +{ + T_EDITOR_INFO * data = (T_EDITOR_INFO *)ALLOC_MEMORY (sizeof (T_EDITOR_INFO)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("editor_create()"); + + /* + * Create window handler + */ + + data->edt_win = win_create (parent, 0, E_WIN_VISIBLE, (T_MFW_CB)editor_win_cb); + + if (data->edt_win EQ NULL) + { + return NULL; + } + + /* + * connect the dialog data to the MFW-window + */ + + + data->mmi_control.dialog = (T_DIALOG_FUNC)editor_exec_cb; + data->mmi_control.data = data; + data->parent = parent; + win = ((T_MFW_HDR *)data->edt_win)->data; + win->user = (void *)data; + + + /* + * return window handle + */ + + return data->edt_win; +} +/******************************************************************************* + + $Function: editor_destroy + + $Description: Destroy the editor. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +void editor_destroy (T_MFW_HND window) +{ + T_MFW_WIN * win = ((T_MFW_HDR *)window)->data; + T_EDITOR_INFO * data = (T_EDITOR_INFO *)win->user; + + TRACE_FUNCTION ("editor_destroy()"); + + if (window == NULL) + { + TRACE_EVENT ("Error : Called with NULL Pointer"); + return; + } + + if (data) + { + AllowPredText = FALSE; //prevent any problems with new editors + /* end KGT */ + + /* + * Delete WIN Handler + */ + editDeactivate(); + win_delete (data->edt_win); + /* + * Free Memory + */ + FREE_MEMORY ((void *)data, sizeof (T_EDITOR_INFO)); + } + else + { + TRACE_FUNCTION ("editor_destroy() called twice"); + return ; + } +} + +/******************************************************************************* + + $Function: editor_exec_cb + + $Description: Dialog function for editor. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static void editor_exec_cb (T_MFW_HND win, USHORT event, SHORT value, T_EDITOR_DATA * editor_data) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_EDITOR_INFO * data = (T_EDITOR_INFO *)win_data->user; + + T_MFW_HND parent_win = data->parent; + USHORT Identifier = data->editor_data.Identifier; + T_EDIT_CB Callback = data->editor_data.Callback; + + T_EDITOR_DATA editor_label; + + TRACE_EVENT ("editor_exec_cb()"); + + + switch (event) + { + case E_EDITOR_INIT: + /* + * Store data + */ + data->editor_data = *editor_data; + if (data->editor_data.TextString NEQ NULL) + { + memcpy (data->LabelText, data->editor_data.TextString, sizeof(data->LabelText)); + } + /* Note that we do not copy the edited buffer here */ + data->editor_data.editor_attr.predText[0] = '\0'; + /* + * Create the handler + */ + data->edt_kbd = kbd_create (data->edt_win, KEY_ALL, (T_MFW_CB)editor_kbd_cb); + data->edt_kbd_long = kbd_create (data->edt_win, KEY_ALL|KEY_LONG,(T_MFW_CB)editor_kbd_cb); + data->edt_edt = edtCreate (data->edt_win, &data->editor_data.editor_attr,MfwEdtVisible,0); + + /* + * Set the mode for the editor + */ + data->destroyEditor = editor_data->destroyEditor; + editActivate(data->edt_edt,data->editor_data.mode); + + // SH - format mode with *M or *m is just alpha mode with case preference + + if (data->editor_data.mode == FORMAT_MODE) + { + if (strcmp(data->editor_data.FormatString, "*M")==0) + { + upCase = TRUE; + UPPER_CASE = FALSE; + } + if (strcmp(data->editor_data.FormatString, "*m")==0) + { + upCase = FALSE; + UPPER_CASE = TRUE; + } + } + + // SH - end of format mode modification + + switch (data->editor_data.mode) + { + case READ_ONLY_MODE: + data->editor_data.hide = FALSE; /* don't allow hide for other modes than DIGITS_MODE. */ + data->edt_mode = E_NORMAL_MODE; /* if editor is not called in T9 mode, set the normal */ + data->editor_data.editor_attr.mode = 0; // sbh - read only mode has no cursor + win_show(data->edt_win); + edtChar(data->edt_edt,ecTop); /* in read-only mode set cursor to begin */ + break; /* editor mode */ + + case ALPHA_MODE: + +#ifdef EASY_TEXT_ENABLED + FFS_flashData.PredTextAvailable = TRUE; + Initialize_Dict(Mmi_getCurrentLanguage()/*MC, SPR 1319*/, 0); + ResetDictSearch(); +#endif + + if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */ + { + editor_hideInit(data); /* initialize editor for hide */ + editHiddenActivate(data->tmpBuf); /* initialise multi-tap for hide */ + data->editor_data.editor_attr.mode |= edtModOverWr; // Must be overwrite mode + } + data->edt_mode = E_NORMAL_MODE; /* if editor is not called in T9 mode, set the normal */ + win_show(data->edt_win); + edtChar(data->edt_edt,ecBottom); /* in read-only mode set cursor to begin */ + break; /* editor mode */ + case DIGITS_MODE: + if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */ + editor_hideInit(data); /* initialize editor for hide */ + data->edt_mode = E_NORMAL_MODE; /* if editor is not called in T9 mode, set the normal */ + win_show(data->edt_win); + edtChar(data->edt_edt,ecBottom); /* in read-only mode set cursor to begin */ + break; /* editor mode */ + case CALC_MODE: + data->editor_data.hide = FALSE; /* don't allow hide for other modes than DIGITS_MODE. */ + data->edt_mode = E_NORMAL_MODE; /* if editor is not called in T9 mode, set the normal */ + win_show(data->edt_win); + edtChar(data->edt_edt,ecBottom); + break; + case PIN_SECURITY: + if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */ + editor_hideInit(data); /* initialize editor for hide */ + data->edt_mode = E_PIN_SECURITY; /* spec. handling for PIN entering */ + data->emergency_call = FALSE; + data->ss_string = FALSE; + win_show(data->edt_win); + edtChar(data->edt_edt,ecBottom); + break; + case FORMAT_MODE: + if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */ + { + editor_hideInit(data); /* initialize editor for hide */ + editHiddenActivate(data->tmpBuf); /* initialise multi-tap for hide */ + } + data->editor_data.editor_attr.mode |= edtModOverWr; // Must be overwrite mode + data->edt_mode = E_NORMAL_MODE; + win_show(data->edt_win); + edtChar(data->edt_edt,ecTop); // Cursor is at start of string + data->editor_data.formatIndex = -1; // Current format character. -1; increased to 0 in editCharFindNext below. + data->editor_data.fieldIndex = 0; + + // Skip over any fixed characters that may be at start + setFormatPointers (data->editor_data.FormatString, &(data->editor_data.formatIndex), &(data->editor_data.fieldIndex)); + TRACE_EVENT("Starting format mode"); + editCharFindNext(NULL); + break; + } + // end KGT + + // c015 rsa + /* create the timer handler */ + if ( data->editor_data.timeout && (data->editor_data.timeout NEQ FOREVER)) + { + data->edt_tim = tim_create (data->edt_win, data->editor_data.timeout, (T_MFW_CB)editor_tim_cb); + tim_start (data->edt_tim); + } + else + { + data->edt_tim = NULL; + } + + //GW-SPR#1035-Added SAT changes from 33x build. + /*NM, 090702 + why ? : for SAT application + this checks does the label fit on the first screen line ( <14chars) ; + if not so open a second editor and show up the whole + label (in Read_only_mode). + Pressing any key returns back to the main editor + */ + if ( strlen(data->LabelText) >= MAX_LINE ) + { + /* need this flag later in the callback of key_handler */ + over_length_label = TRUE; + + editor_attr_init(&editor_label.editor_attr, NULL, edtCurBar1, 0, (char *)data->LabelText, strlen(data->LabelText), COLOUR_EDITOR); + editor_data_init(&editor_label, NULL, TxtNull, TxtNull, 0, 1, READ_ONLY_MODE, FOREVER); + + editor_start(win,&editor_label); /* start the editor */ + } + /*NM, 090702 END */ + + break; + + case E_EDITOR_DEINIT: + /* on DEINIT => selfdestroy; sendevent <value> */ + + if (Callback) + (Callback) (parent_win, Identifier, value); + + over_length_label = FALSE; //GW-SPR#1035 + + // MZ Destroy the text edit window after creating the number editor. + if(data->destroyEditor == TRUE) + editor_destroy (data->edt_win); + break; + +#ifdef EASY_TEXT_ENABLED + case E_EDITOR_UPDATE: + if (SymbolChar != '\0') + { + edtShow(data->edt_edt); + edtChar(data->edt_edt, SymbolChar); + if ((SymbolChar == '.') ||(SymbolChar == '!') || (SymbolChar == '?')) + { + edtChar(data->edt_edt, ' '); + } + + win_show(data->edt_win); + } + break; +#endif + /*SPR 1392, move cursor to end of editor string*/ + case E_EDITOR_CURSOR_END: + edtChar(data->edt_edt, ecBottom); + break; + default: + break; + } +} +/******************************************************************************* + + $Function: editor_win_cb + + $Description: Editor window event handler. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static int editor_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + T_EDITOR_INFO * data = (T_EDITOR_INFO *)win->user; + int xPos,yPos; + { + /***************************Go-lite Optimization changes Start***********************/ + + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1 ("editor_win_cb()-event=%d",event); + /***************************Go-lite Optimization changes end***********************/ + + } + + + if (data->edt_edt!=activeEditor()) + editActivate(data->edt_edt,data->editor_data.mode); + + // SH - hidden mode + if (data->editor_data.hide) + editHiddenActivate(data->tmpBuf); + // end hidden mode + + if (data EQ 0) + { + TRACE_FUNCTION ("editor_win_cb()-no data"); + return MFW_EVENT_CONSUMED; + } + switch (event) + { + case E_WIN_VISIBLE: /* window is visible */ + if (win->flags & E_WIN_VISIBLE) + { + /* + * Clear Screen + */ + dspl_ClearAll(); + + /* + * Print the information + */ +#ifdef EASY_TEXT_ENABLED + if(AllowPredText == TRUE && FFS_flashData.PredTextSelected == TRUE) + { + dspl_BitBlt(SCREEN_SIZE_X-9,0,8,8,0,(char*)TextIconeZiTextSmall,0); + } +#endif + + edtShow(data->edt_edt); + /* + * Print the label + */ + //GW Removed T9 reference + //GW Actually remove T9 ref, not code executed when T9 not enabled. + if (data->editor_data.editor_attr.win.px > 0) + xPos = data->editor_data.editor_attr.win.px; + else + xPos = editor_menuArea.px; + if (data->editor_data.editor_attr.win.py > Mmi_layout_TitleHeight()) + yPos = data->editor_data.editor_attr.win.py-Mmi_layout_TitleHeight(); + else + yPos = editor_menuArea.py; + + if (data->editor_data.TextId NEQ 0) + { + dspl_TextOut(xPos,yPos,DSPL_TXTATTR_CURRENT_MODE, (char*)MmiRsrcGetText(data->editor_data.TextId)); + } + else if (data->editor_data.TextString NEQ NULL) + { + dspl_TextOut(xPos,yPos,0,data->LabelText); + } + /* + * Print the softkeys + */ + if (data->edt_mode != E_PIN_SECURITY) + { +#ifdef EASY_TEXT_ENABLED + if (data->editor_data.editor_attr.predText[0] != '\0' && FFS_flashData.PredTextSelected == TRUE) + softKeys_displayId(TxtSoftOK, TxtDelete,0,COLOUR_EDITOR_XX); + else +#endif + { + if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter) + { + /* entered less than the required number of chars: Alternate Softkey appears */ + softKeys_displayId(data->editor_data.AlternateLeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX); + } + else + { + /* entered sufficient number of chars: Normal Softkey appears */ + softKeys_displayId(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX); + } + } + } + else + { + if (data->emergency_call EQ TRUE) + { + softKeys_displayId(TxtSoftCall, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX); + TRACE_EVENT ("softkeys , call, delete"); + } + else + { + //no emergency_call + if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter) + { + + + if (strlen(data->editor_data.editor_attr.text) EQ 0) + softKeys_displayId(data->editor_data.AlternateLeftSoftKey, TxtNull,0,COLOUR_EDITOR_XX); + else + softKeys_displayId(data->editor_data.AlternateLeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX); + + TRACE_EVENT ("softkeys , altern, delete"); + } + else + { + if (strlen(data->editor_data.editor_attr.text) EQ 0) + softKeys_displayId(data->editor_data.AlternateLeftSoftKey, TxtNull,0,COLOUR_EDITOR_XX); + else + softKeys_displayId(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX); + + TRACE_EVENT ("softkeys , ok, delete"); + } + } + } + + } + break; + default: + return MFW_EVENT_PASSED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: editor_kbd_cb + + $Description: Editor keyboard event handler + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static int editor_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + T_MFW_HND win = mfw_parent (mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_EDITOR_INFO * data = (T_EDITOR_INFO *)win_data->user; + char* PredText = data->editor_data.editor_attr.predText; + unsigned int editMode; + char temp[80]; + int sim_status; + + TRACE_FUNCTION("editor_kbd_cb"); + +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + sim_status = sim_status_check(); + + + /* subpress unwanted longpresses (mfw throws more than one long press event for one long press on a key)*/ + if ( !( event & KEY_LONG )) + DoNextLongPress = TRUE; /* next Key_long event is correct */ + else if ( DoNextLongPress ) + DoNextLongPress = FALSE; /* mark Key_long event as consumed but do current long press */ + else if ( !DoNextLongPress ) + return MFW_EVENT_CONSUMED; /* don't do current long press */ + + + // c015 rsa + if (data->edt_tim NEQ NULL) + { + /* restart the timer for no response */ + tim_stop (data->edt_tim); + tim_start (data->edt_tim); + } + // end c015 rsa + + editMode = data->edt_mode; + + sprintf(temp, "Editor mode: %d", editMode); + TRACE_EVENT(temp); + +#ifdef EASY_TEXT_ENABLED + if (FFS_flashData.PredTextSelected == FALSE || data->editor_data.mode != ALPHA_MODE) +#else + if (1) +#endif + { TRACE_EVENT("Not in predictive mode"); + /***************************Go-lite Optimization changes Start***********************/ + + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("Key: %d", keyboard->code); + /***************************Go-lite Optimization changes end***********************/ + + switch (editMode) + { + + case E_NORMAL_MODE: + + + + if (event & KEY_LONG) + { + TRACE_EVENT("event and long key"); + + switch (keyboard->code) + { + case KCD_CALL: + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL); + break; + case KCD_LEFT: + break; + case KCD_MNURIGHT: + case KCD_MNUUP: + if (data->editor_data.mode NEQ READ_ONLY_MODE && + !data->editor_data.hide ) + break; + case KCD_RIGHT: + TRACE_EVENT("KCD_RIGHT"); + // SH - special clear all for format mode + + if (data->editor_data.mode EQ FORMAT_MODE) + { + editClear(); + } + + // SH - End of format mode modification + + else if(data->editor_data.editor_attr.text[0] NEQ '\0') + { + /* clear the whole buffer */ + if ( data->editor_data.hide ) + editor_hideClearAll(data); + else + { + data->editor_data.editor_attr.text[0] = '\0'; + edtChar(data->edt_edt, ecTop); + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + else + { + /* leave editor if buffer already empty */ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + } + break; + + case KCD_0: /* '+' key */ + if (data->editor_data.mode NEQ READ_ONLY_MODE) /* ignore normal keys if in read-only mode */ + { + if (data->editor_data.hide) + { + /* in hidden mode do not allow entering of '+' */ + editor_hideClear(data); /* remove the '0' */ + } + else + { + edtChar(data->edt_edt,ecBack); /* remove the '0' */ + edtChar(data->edt_edt,'+'); /* insert the '+' */ + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + break; + + default: + { + // change the Lowercase to Uppercase and visa-versa + //only possible in Alpha mode (SH - or format mode) + if (data->editor_data.mode EQ ALPHA_MODE || data->editor_data.mode EQ FORMAT_MODE) + { + 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); + } + if (data->editor_data.mode NEQ FORMAT_MODE) // SH - for format mode, don't erase the character + edtChar(data->edt_edt,ecBack); + } + + + } + return MFW_EVENT_CONSUMED; /* we don't handle other long presses here */ + + + } + } + else + { + switch (keyboard->code) + { + case KCD_CALL: + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL); + break; + case KCD_MNURIGHT: + case KCD_MNUUP: + if (data->editor_data.mode EQ READ_ONLY_MODE) + edtChar(data->edt_edt,ecUp); + else if (!data->editor_data.hide) // SH - key not available in hide mode + { + + /* SH - format mode, skip over fixed characters */ + + if (data->editor_data.mode EQ FORMAT_MODE) // formatted input + { + TRACE_EVENT("MNUUP"); + editCharFindNext(ecRight); // Insert character & move cursor forward once + } + + /* end of format mode modification */ + + else + { + edtChar(data->edt_edt,ecRight); + } + } + + edtShow(data->edt_edt); + break; + case KCD_MNULEFT: + case KCD_MNUDOWN: + if (data->editor_data.mode EQ READ_ONLY_MODE) + edtChar(data->edt_edt,ecDown); + else if (!data->editor_data.hide) // SH - key not available in hide mode + { + /* SH - format mode, skip over fixed characters */ + if (data->editor_data.mode EQ FORMAT_MODE) // formatted input + editFindPrev(); // find previous non-fixed character + + /* end of format mode modification */ + else + { + edtChar(data->edt_edt,ecLeft); + } + } + edtShow(data->edt_edt); + break; + + case KCD_MNUSELECT: + case KCD_LEFT: + if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter) + { + /* entered less than the required number of chars */ + if (data->editor_data.AlternateLeftSoftKey NEQ TxtNull) + { + /* an alternate softkey were defined: execute it*/ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_ALTERNATELEFT, NULL); + } + } + else if (data->editor_data.LeftSoftKey NEQ TxtNull) + { + /* left Softkey is enabled (and entered sufficient number of chars): execute it */ + //KGT + /* get the orginal text back into the editor instead of the + hide buffer ( only filled with '*') */ + if (data->editor_data.hide) + editor_hideTerminate(data); + //end KGT + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL); + } + else + { + //GW-SPR#1035-Added SAT changes from 33x build. + /*NM, 090702 + in case of long labels (>14chars; when it doesnt fit on the first line) + so we open a second editor and return by any keypress + */ + if (over_length_label EQ TRUE) + { + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + } + } + break; + + case KCD_HUP: + if (data->editor_data.RightSoftKey NEQ TxtNull) + { + /* Right softkey is enabled: execute it */ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_HUP, NULL); + } + break; + + case KCD_RIGHT: + if (data->editor_data.mode NEQ READ_ONLY_MODE) /* ignore clear key if in read-only mode */ + { + if(data->editor_data.editor_attr.text[0] NEQ '\0') + { + /* buffer is not empty, delete the char before the cursor */ + //KGT + if ( data->editor_data.hide ) + editor_hideClear(data); + else + //end KGT + { + + /* SH - format mode, skip over fixed characters */ + + if (data->editor_data.mode EQ FORMAT_MODE) // SH - formatted input + { + switch (editFindPrev()) // Skip over fixed characters + { + case 1: + edtChar(data->edt_edt,' '); // overwrite with space + edtChar(data->edt_edt,ecLeft); // Move cursor left again + break; + case 2: + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); // Exit editor + break; + case 3: + edtChar(data->edt_edt,ecRight); // Last character - shorten string + edtChar(data->edt_edt,ecBack); + break; + } + + } + + /* end of format mode modification */ + + else + { + edtChar(data->edt_edt,ecBack); + } + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + else + { + /* leave editor if buffer already empty */ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + } + } + else + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + + break; +#ifdef EASY_TEXT_ENABLED + case (KCD_HASH): + { if (AllowPredText == TRUE) + if (FFS_flashData.PredTextAvailable == TRUE) + { + FFS_flashData.PredTextSelected = TRUE; + win_show(data->edt_win); + break; + } + + { + editEventKey(event,keyboard); + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + break; +#endif + default: /* any key */ + if (data->editor_data.mode NEQ READ_ONLY_MODE) /* ignore normal keys if in read-only mode */ + { + { + /* SH - format mode, setup pointers to format string & index */ + + if (data->editor_data.mode EQ FORMAT_MODE) + { + setFormatPointers (data->editor_data.FormatString, &(data->editor_data.formatIndex), + &(data->editor_data.fieldIndex)); + } + + /* End of format mode modification */ + + editEventKey(event,keyboard); + + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + /*NM, 090702 + in case of long labels (>14chars; when it doesnt fit on the first line) + so we open a second editor and return by any keypress + */ + else + { + if (over_length_label EQ TRUE) + { + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + } + } + break; + } + } + + break; + //GW Removed T9 code. + + /* E_PIN_SECURITY entering + * + */ + + case E_PIN_SECURITY: + + switch (keyboard->code) + { + case KCD_MNUUP: + break; + + case KCD_MNUDOWN: + break; + + case KCD_STAR: + + //only possible when the first digit is a '*' + if (strlen(data->editor_data.editor_attr.text) EQ 0 && data->editor_data.hide) + { + data->ss_string = TRUE; + //the string should be visible on screen + data->editor_data.hide = FALSE; + + editEventKey(event,keyboard); + } + + + break; + + case KCD_HASH: + + if(data->ss_string) + { + T_MFW_SS_RETURN ssRes; + + editEventKey(event,keyboard); + + ssRes = ss_check_ss_string((UBYTE*)data->editor_data.editor_attr.text); + switch (ssRes) + { + case MFW_SS_MMI: +// May 02, 2005 REF : LOCOSTO-ENH-30818 - xpradipg +// replace the call to get_imei() with callNumber() -> sAT_Dn() +#ifdef FF_MMI_ATC_MIGRATION + mmi_imei_retrieve(); +#else + get_imei((char*)data->imei); + showIMEI(win,(char*)data->imei); +#endif + editor_hideClearAll(data); + + //set back to the default + data->ss_string = FALSE; + + // go back in the hide mode + data->editor_data.hide = TRUE; + + return MFW_EVENT_CONSUMED; + } + + } + else if (strlen(data->editor_data.editor_attr.text) >= data->editor_data.min_enter) + { + if (data->editor_data.hide) + editor_hideTerminate(data); + + + TRACE_EVENT("press hash"); + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL); + } + + + break; + case KCD_LEFT: + if ( data->emergency_call EQ TRUE ) + { + TRACE_EVENT("press left < min"); + + /* get the orginal text back into the editor instead of the + hide buffer ( only filled with '*') */ + if (data->editor_data.hide) + editor_hideTerminate(data); + + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_EMERGENCY, NULL); + + } + else if (strlen(data->editor_data.editor_attr.text) >= data->editor_data.min_enter) + { + /* left Softkey is enabled (and entered sufficient number of chars): execute it */ + //KGT + /* get the orginal text back into the editor instead of the + hide buffer ( only filled with '*') */ + if (data->editor_data.hide) + editor_hideTerminate(data); + //end KGT + + TRACE_EVENT("press left"); + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL); + } + else + { + /* NOP */ + TRACE_EVENT("NOP"); + } + break; + + case KCD_HUP: + /* API - 15/10/02 - 1162 - Update the Editor TextId after Deleting a value + from the text editor. + */ + if(cm_check_emergency((U8*)data->tmpBuf)) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEmergency; + data->emergency_call = TRUE; + } + else + { + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + break; + + case KCD_CALL: + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL); + break; + + if ( data->emergency_call EQ TRUE ) { + TRACE_EVENT("press left < min"); + + /* get the orginal text back into the editor instead of the + hide buffer ( only filled with '*') */ + if (data->editor_data.hide) + editor_hideTerminate(data); + + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_EMERGENCY, NULL); + } + break; + + case KCD_RIGHT: + /* API - 15/10/02 - 1162 - Update the Editor TextId after Deleting a value + from the text editor. + */ + TRACE_EVENT("Delete key pressed!"); + if(cm_check_emergency((U8*)data->tmpBuf)) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEmergency; + data->emergency_call = TRUE; + + } + else + { + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + + if(data->editor_data.editor_attr.text[0] NEQ '\0') + { + /* buffer is not empty, delete the char before the cursor */ + //KGT + if ( data->editor_data.hide ) + { + U8 uMode; + + editor_hideClear(data); + /* API - 15/10/02 - 1162 - Update the Editor TextId after Deleting a value + from the text editor. + */ + if(cm_check_emergency((U8*)data->tmpBuf)) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEmergency; + data->emergency_call = TRUE; + } + else + { + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + + if (data->editor_data.min_enter > 0 || data->emergency_call) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + + + } + else + //end KGT + { + edtChar(data->edt_edt,ecBack); + + // this is for the ss_string + if (strlen(data->editor_data.editor_attr.text) EQ 0 && data->ss_string) + { + data->ss_string = FALSE; + //the string should be visible on screen + data->editor_data.hide = TRUE; + + } + /* is it a emergency call number ?!*/ + /* API - 15/10/02 - 1162 - Update the Editor TextId after Deleting a value + from the text editor. + */ + if(cm_check_emergency((U8*)data->tmpBuf)) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEmergency; + data->emergency_call = TRUE; + } + else + { + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + + if (data->editor_data.min_enter > 0 ) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + break; + + default: /* any key */ + if (data->editor_data.mode NEQ READ_ONLY_MODE) /* ignore normal keys if in read-only mode */ + { + if ( data->editor_data.hide ) + { + U8 uMode; + TRACE_EVENT(" hide mode"); + + editor_hideInsert(data,keyboard->code); + /* API - 15/10/02 - 1162 - Check to see if the inputed value into the PIN editor is + an emergency number. + */ + if((strlen((char*)data->tmpBuf) > 1) && (strlen((char*)data->tmpBuf) < 4)) + { + if(cm_check_emergency((UBYTE*)data->tmpBuf)) + { + TRACE_EVENT(" it is a emergency number !"); + data->emergency_call = TRUE; + //Clear the TextId string before adding + data->editor_data.TextId = '\0'; + //Change the TextId to display Emergency ? + data->editor_data.TextId = TxtEmergency; + displaySoftKeys(TxtSoftCall, data->editor_data.RightSoftKey); + } + else + { + TRACE_EVENT("data->emergency_call = FALSE"); + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + } + else + { + TRACE_EVENT("data->emergency_call = FALSE"); + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + + if (data->editor_data.min_enter > 0 || data->emergency_call) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + TRACE_EVENT(" edtShow"); + } + + + } + else + { + TRACE_EVENT(" unhide mode"); + editEventKey(event,keyboard); + + /* API - 15/10/02 - 1162 - Check to see if the inputed value into the PIN editor is + an emergency number. + */ + if((strlen((char*)data->editor_data.editor_attr.text) > 1) && (strlen((char*)data->editor_data.editor_attr.text) < 4)) + { + TRACE_EVENT("EMERGENCY CHECK POINT!"); + if(cm_check_emergency((U8*)data->editor_data.editor_attr.text)) + { + TRACE_EVENT(" it is a emergency number !"); + data->emergency_call = TRUE; + //Clear the TextId string before adding + data->editor_data.TextId = '\0'; + //Change the TextId to display Emergency ? + data->editor_data.TextId = TxtEmergency; + } + else + { + TRACE_EVENT("data->emergency_call = FALSE"); + if (sim_status == SIM_NOT_ACTIVE) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtNoCard; + } +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + else if (sim_status == IMEI_NOT_VALID) + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtInvalidIMEI; + } + else + { + data->editor_data.TextId = '\0'; + data->editor_data.TextId = TxtEnterPin1; + } + data->emergency_call = FALSE; + } + } + else + { + TRACE_EVENT("data->emergency_call = FALSE"); + data->emergency_call = FALSE; + } + + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + break; + } + break; + } +} +#ifdef EASY_TEXT_ENABLED + else + if(FFS_flashData.PredTextAvailable == TRUE) + {TRACE_EVENT("In predictive mode"); + /***************************Go-lite Optimization changes Start***********************/ + + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("Key: %d", keyboard->code); + /***************************Go-lite Optimization changes end***********************/ + + if (event & KEY_LONG) + { + switch (keyboard->code) + { + case KCD_CALL: + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL); + break; + case KCD_RIGHT: //empty predictive text string + if(PredText[0] NEQ '\0') + { + PredText[0]= '\0'; + ResetDictSearch(); + + } + else //empty whole editor + { + if(data->editor_data.editor_attr.text[0] NEQ '\0') + { + data->editor_data.editor_attr.text[0] = '\0'; + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + + } + else + { + /* leave editor if buffer already empty */ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + } + } + break; + + case KCD_0: /* '+' key */ + if(PredText[0] == '\0') + { + + + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + + break; + + case(KCD_STAR): + { char symbol; + SymbolScreenstart (data->edt_win, &symbol); + } + break; + + default: //change case + { if(PredText[0] == '\0') + { + // change the Lowercase to Uppercase and visa-versa + //only possible in Alpha mode + if (data->editor_data.mode EQ ALPHA_MODE) + { + 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); + } + } + } + } + return MFW_EVENT_CONSUMED; /* we don't handle other long presses here */ + + + } + } + else + { + switch (keyboard->code) + { + case KCD_CALL: + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL); + break; + case KCD_MNURIGHT: + case KCD_MNUUP: + if(PredText[0] == '\0') + { + edtChar(data->edt_edt,ecRight); + edtShow(data->edt_edt); + } + break; + case KCD_MNULEFT: + case KCD_MNUDOWN: + if(PredText[0] == '\0') + { + + edtChar(data->edt_edt,ecLeft); + edtShow(data->edt_edt); + } + break; + + case KCD_LEFT: + if(PredText[0] == '\0') + { + + if (data->editor_data.LeftSoftKey NEQ TxtNull) + { + + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL); + } + } + else + { char TempString[16]; + char LastChar; + + if ((strlen(data->editor_data.editor_attr.text) + strlen(PredText)) < MAX_MSG_LEN) + if (PredText[0] != '*') + { if (capitalise_word(data->edt_edt) == TRUE|| (strlen(PredText)== 1 && PredText[0] == 'i')) + { PredText[0] -= 0x20; + } + LastChar = getCursorChar(data->edt_edt, -1); + if ( LastChar != ' ' && LastChar != 0) + { + sprintf(TempString, " %s", PredText); + edtInsertString(data->edt_edt, TempString); + } + else + edtInsertString(data->edt_edt,PredText); + } + PredText[0] = '\0'; + ResetDictSearch(); + win_show(data->edt_win); + } + + break; + + case KCD_HUP: + if (data->editor_data.RightSoftKey NEQ TxtNull) + { + /* Right softkey is enabled: execute it */ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_HUP, NULL); + } + break; + + case KCD_RIGHT: + if(PredText[0] == '\0') + { + if(data->editor_data.editor_attr.text[0] NEQ '\0') + { + + { + edtChar(data->edt_edt,ecBack); + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + else + { + /* leave editor if buffer already empty */ + SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL); + } + } + else + { + if (strlen(PredText) == 1) + { + DictBackSpace(data->editor_data.editor_attr.predText); + PredText[0] = '\0'; + } + else + DictBackSpace(data->editor_data.editor_attr.predText); + + win_show(data->edt_win); + } + + break; + case (KCD_2): + case (KCD_3): + case (KCD_4): + case (KCD_5): + case (KCD_6): + case (KCD_7): + case (KCD_8): + case (KCD_9): + { + DictAlphaKeyPress(keyboard->code,PredText); + win_show(data->edt_win); + } + break; + + case (KCD_HASH): + { FFS_flashData.PredTextSelected = FALSE; + PredText[0] = '\0'; + win_show(data->edt_win); + } + break; + + case (KCD_STAR): + if (PredText[0] == '\0') + { char symbol; + SymbolScreenstart (data->edt_win, &symbol); + } + else + { int i; + MoreCandidates(PredText, &i); + win_show(data->edt_win); + } + break; + + case KCD_0: + case KCD_1: + if (PredText[0] != '\0') + { char TempString[16]; + char LastChar; + + if ((strlen(data->editor_data.editor_attr.text) + strlen(PredText)) < MAX_MSG_LEN) + { + //if char b4 cursor full stop/question/exclamation + //(or last char space and char b4 full stop) + if (capitalise_word(data->edt_edt) == TRUE || (strlen(PredText)== 1 && PredText[0] == 'i')) + { PredText[0] -= 0x20; + + } + //capitalise first letter of char + //if char b4 cursor not space + //insert spac + LastChar = getCursorChar(data->edt_edt, -1); + + if (PredText[0] != '*') + { if (keyboard->code == KCD_1) + { if ( LastChar != ' ' && LastChar != 0) + sprintf(TempString, " %s ", PredText); + else + sprintf(TempString, "%s ", PredText); + } + else + { if ( LastChar != ' ' && LastChar != 0) + sprintf(TempString, " %s. ", PredText); + else + sprintf(TempString, "%s. ", PredText); + } + edtInsertString(data->edt_edt, TempString); + } + } + PredText[0] = '\0'; + ResetDictSearch(); + win_show(data->edt_win); + break; + } + + default: + /* any key */ + if (data->editor_data.mode NEQ READ_ONLY_MODE) /* ignore normal keys if in read-only mode */ + { + { + editEventKey(event,keyboard); + if (data->editor_data.min_enter > 0) + { + win_show(data->edt_win); /* in order to update the Softkeys */ + } + else + { + edtShow(data->edt_edt); + } + } + } + break; + } + } + } +#endif + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: editor_tim_cb + + $Description: Callback function for the editor info timer. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static int editor_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc) +{ + T_MFW_HND win = mfw_parent (mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_EDITOR_INFO * data = (T_EDITOR_INFO *)win_data->user; + + T_MFW_HND parent_win = data->parent; + USHORT Identifier = data->editor_data.Identifier; + T_EDIT_CB Callback = data->editor_data.Callback; + + /* timer elapsed => selfdestroy; sendevent INFO_TIMEOUT */ + editor_destroy (data->edt_win); + + if (Callback) + (Callback) (parent_win, Identifier, INFO_TIMEOUT); + + return MFW_EVENT_CONSUMED; +} + +T_MFW_HND editor_start_common(T_MFW_HND win, char * buffer, U16 len, T_EDITOR_DATA * editor_info, T_EDIT_CB editor_cb) +{ + editor_attr_init( &editor_info->editor_attr, ZONE_BORDER_EDITOR, edtCurBar1, EDITOR_CONTROLS, buffer, len, COLOUR_EDITOR); + editor_info->hide = FALSE; + editor_info->destroyEditor = TRUE; + editor_info->Callback = editor_cb; + + /* create the dialog handler */ + return editor_start(win, editor_info); /* start the common editor */ +} + +/******************************************************************************* + + $Function: editor_hideInit + + $Description: the editor hides letters and numbers behind '*'. + Initialize editor for hide. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static void editor_hideInit(T_EDITOR_INFO *data) +{ + USHORT len = strlen(data->editor_data.editor_attr.text); + + TRACE_FUNCTION("MmiEditor.editor_hideInit"); + + /* get memory for the tempory buffer */ + data->tmpBuf = (char *) ALLOC_MEMORY(data->editor_data.editor_attr.size); + + /* copy text to the tempory buffer */ + strcpy(data->tmpBuf, data->editor_data.editor_attr.text); + + /* overwrite the string in the editor buffer with stars */ + memset(data->editor_data.editor_attr.text,'\0',sizeof(data->editor_data.editor_attr.text)); + edtReset(data->edt_edt); + + while ( strlen(data->editor_data.editor_attr.text) < len ) + edtChar(data->edt_edt,'*'); + + /* show editor with hide buffer */ + if (data->editor_data.min_enter > 0) + win_show(data->edt_win); /* in order to update the Softkeys */ + else + edtShow(data->edt_edt); + + return; +} + +/******************************************************************************* + + $Function: editor_hideInsert + + $Description: Insert the typed letter/number with editEventKey into the + original editor buffer and insert a '*' into the hide buffer + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static void editor_hideInsert(T_EDITOR_INFO *data, U8 key) +{ + USHORT i; + MfwEdt *edt = ((T_MFW_HDR *)(data->edt_edt))->data; + + TRACE_FUNCTION("MmiEditor.editor_hideInsert"); + + /* check if no more space in buffer */ + if ((int) strlen(data->editor_data.editor_attr.text) >= + data->editor_data.editor_attr.size - 1) + return; + + /* do insert on original editor buffer without cursor move: */ + if (!data->editor_data.editor_attr.mode) + return; + else + /* if not in overwrite mode, move text behind cursor position 1 position + to the right */ + if (!(data->editor_data.editor_attr.mode & edtModOverWr)) + + for (i = strlen(data->tmpBuf); i > edt->cp; i--) + data->tmpBuf[i] = data->tmpBuf[i-1]; + + /* insert the character */ + data->tmpBuf[edt->cp] = (char) (key + '0'); + + /* do insert on hide buffer with cursor move */ + edtChar(data->edt_edt,'*'); + + /* show editor with hide buffer */ + if (data->editor_data.min_enter > 0) + win_show(data->edt_win); /* in order to update the Softkeys */ + else + edtShow(data->edt_edt); + + return; +} + +/******************************************************************************* + + $Function: editor_hideClear + + $Description: clears a character at the cursor position inthe original editor + buffer and the hide buffer + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static void editor_hideClear(T_EDITOR_INFO *data) +{ + MfwEdt *edt = ((T_MFW_HDR *)(data->edt_edt))->data; + + TRACE_FUNCTION("MmiEditor.editor_hideClear"); + + /* check if at beginning of buffer */ + if (edt->cp == 0) + return; + + /* do delete on original editor buffer without cursor move */ + strcpy(data->tmpBuf + edt->cp - 1, data->tmpBuf + edt->cp); + + /* do delete on hide buffer with cursor move */ + edtChar(data->edt_edt,ecBack); + + /* show editor with hide buffer */ + if (data->editor_data.min_enter > 0) + win_show(data->edt_win); /* in order to update the Softkeys */ + else + edtShow(data->edt_edt); + + return; +} + +/******************************************************************************* + + $Function: editor_hideClearAll + + $Description: clears hole original editor buffer and hole hide buffer + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static void editor_hideClearAll(T_EDITOR_INFO *data) +{ + TRACE_FUNCTION("MmiEditor.editor_hideClearAll"); + + /* clear the original editor buffer and the hide buffer */ + memset(data->tmpBuf,'\0',sizeof(data->tmpBuf)); + memset(data->editor_data.editor_attr.text,'\0',sizeof(data->editor_data.editor_attr.text)); + edtReset(data->edt_edt); + + /* show editor with hide buffer */ + if (data->editor_data.min_enter > 0) + win_show(data->edt_win); /* in order to update the Softkeys */ + else + edtShow(data->edt_edt); + + return; +} + +/******************************************************************************* + + $Function: editor_hideTerminate + + $Description: switchs the normal editor buffer with the tempory buffer in + T_EDITOR_INFO + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ +static void editor_hideTerminate(T_EDITOR_INFO *data) +{ + TRACE_FUNCTION("MmiEditor.editor_hideTerminate"); + + /* overwrite the stars with the original typed text */ + strcpy(data->editor_data.editor_attr.text, data->tmpBuf); + + /* free the memory for the tempory buffer */ + FREE_MEMORY ((void *)data->tmpBuf, data->editor_data.editor_attr.size); + + return; +}