FreeCalypso > hg > fc-magnetite
diff src/aci2/bmi/mmiBookSearchWindow.c @ 120:3c2acfa1a72f
src/aci2/bmi: file renames to make filename case consistent
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 07 Oct 2016 03:46:05 +0000 |
parents | src/aci2/bmi/MmiBookSearchWindow.c@93999a60b835 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/aci2/bmi/mmiBookSearchWindow.c Fri Oct 07 03:46:05 2016 +0000 @@ -0,0 +1,1360 @@ +/******************************************************************************* + + 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: MmiSearchWindow.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 25/10/00 + +******************************************************************************** + + Description: + + This module provides the phone book search window functionality for the + phone book module of the basic MMI + +******************************************************************************** + $History: MmiSearchWindow.c + + Jan 22, 2006 REF: OMAPS00061930 x0039928 + Bug:PhoneBook -Change entry and view entry through Change option-failed + Fix: Phonebook is populated with phone numbers after some time and not immediately while saving the changed entries. + + CRR: 25302 - xpradipg 10 Nov 2004 + Description: Should be able to select the number fro the phonebook while + sending MMS/EMS. + Solution: The new feature to select the number from phonebook while sending + MMS/EMS is added + + Oct 26, 2004 REF: CRR 25354 xkundadu + Description: Phonebook: After entering precise name to search and then + trying to delete using RSK, first character is not deleted + Fix: If only one character is present in the editor and delete key is pressed, + delete the editor buffer and update the editor view. + + 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. + 20/02/02 Reinstated editor when in Chinese language by removing + "if not Chinese" conditions SPR 1742 + + $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 "mfw_cnvt.h" //mfw_Gsm2SIMStr prototype + +#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" +#include "mmiSmsMenu.h" +#include "mmismssend.h" +#include "MmiLists.h" +#include "mmiSmsRead.h" +/* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#include "AUITextEntry.h" + +#endif + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND chinese_search_win; /* MFW win handler */ + T_MFW_HND parent; + ListMenuData * menu_list_data; +} T_CHINESE_SEARCH_INFO; +#include "mmiColours.h" + +//CRR: 25302 - xpradipg 10 Nov 2004 +//extern MmsSend_PHBK_exec_cb(T_MFW_HND win, USHORT event, void *parameter); + + +/******************************************************************************* + + Private Methods + +*******************************************************************************/ +//#define TIME_TRACE_EVENT TRACE_EVENT +#ifndef TIME_TRACE_EVENT +#define TIME_TRACE_EVENT +#endif + +/******************************************************************************* + + $Function: bookSearchDialog + + $Description: dialog handler for the search window functionality + + $Returns: None + + $Arguments: win, window handle + event, event to be handled + value, not used + parameter, not used + +*******************************************************************************/ + +void bookSearchDialog( 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; + tMmiPhbData *Current = &data->phbk->current; + MfwMnu *mnu; +//Jan 22, 2006 REF: OMAPS00061930 x0039928 +// Fix : Add a local variable search_string + char search_string[MAX_ALPHA_LEN]; + + TRACE_FUNCTION( "bookSearchDialog()" ); + + switch( event ) + { + case SEARCH_INIT: + { + /* No initialisation required + */ + } + break; + + case SEARCH_SCROLL_UP: + { /*MC SPR 1541, flag to show whether we've scrolled off-screen and need to + update the portion of the list displayed*/ + BOOL get_new_screen = FALSE; + + + /* Scroll up + */ + if ( ( Current->index == 1 ) && ( Current->selectedName == 0 ) ) + { + if ( Current->status.used_entries < MAX_SEARCH_NAME ) + Current->selectedName = Current->status.used_entries - 1; + else + { Current->selectedName = MAX_SEARCH_NAME - 1; + /*SPR 1541, we're scrolling up from the first item in the list and are to go to + the end*/ + get_new_screen = TRUE; + } + Current->index = Current->status.used_entries - Current->selectedName; + + } + else + { + if (Current->selectedName == 0) + { Current->index--; + /*SPR 1541, we've just come off the top of the screen*/ + get_new_screen = TRUE; + } + else + Current->selectedName--; + } + + mnu = (MfwMnu *) mfwControl( data->menu ); + mnu->lCursor[mnu->level] = Current->selectedName; + + /*SPR 1541, only update the list if flag set*/ + if (get_new_screen == TRUE) + bookFindName( MAX_SEARCH_NAME, &data->phbk->current ); + } + break; + + case SEARCH_SCROLL_DOWN: + { /*MC SPR 1541, flag to show whether we've scrolled off-screen and need to + update the portion of the list displayed*/ + BOOL get_new_screen = FALSE; + + /* Scroll Down + */ + if ( ( Current->index + Current->selectedName ) == Current->status.used_entries ) + { + Current->index = 1; + Current->selectedName = 0; + /*SPR 1541, we've come off the end of the list and are to go back to + the beginning*/ + get_new_screen = TRUE; + } + else + { + if ( Current->selectedName == MAX_SEARCH_NAME - 1 ) + { Current->index++; + /*SPR 1541, we've just come off the bottom of the screen*/ + get_new_screen = TRUE; + } + else + Current->selectedName++; + } + + mnu = (MfwMnu *) mfwControl( data->menu ); + mnu->lCursor[mnu->level] = Current->selectedName; + /*SPR 1541, only update the list if flag set*/ + if (get_new_screen == TRUE) + bookFindName( MAX_SEARCH_NAME, &data->phbk->current ); + } + break; + + case SEARCH_STRING: + { + { + //Jan 22, 2006 REF: OMAPS00061930 x0039928 + //Fix : Copy the number to be searched into the search_string variable and give a search for it + if ( value == TRUE) + strcpy(search_string,(char*)data->phbk->edt_buf_name); + else + strcpy(search_string,(char*)data->edtBuf); + + /* Find name + */ + Current->index = Current->index + Current->selectedName; + if ( bookSearchName( search_string, MAX_SEARCH_NAME, Current ) == MFW_PHB_OK ) + { + if ( Current->index > ( Current->status.used_entries + 1 - MAX_SEARCH_NAME ) ) + { + if ( Current->status.used_entries > MAX_SEARCH_NAME ) + { + Current->selectedName = Current->index - Current->status.used_entries + MAX_SEARCH_NAME - 1; + Current->index = Current->index - Current->selectedName; + } + else + { + Current->selectedName = Current->index - 1; + Current->index=1; + } + + /* go find the name + */ + + bookFindName(MAX_SEARCH_NAME,&data->phbk->current); + } + else + { + Current->selectedName =0; + + } + + /* update the menu */ + /* SPR881 - SH - Move name find to below */ + } + else + {/*SPR 2233, if no name found, go to beginning of list*/ + Current->index = 1; + Current->selectedName = 0; + } + + /* update the menu + */ + /* SPR881 - SH - is necessary even when BookSearchName, above, fails */ + + mnu = (MfwMnu *) mfwControl( data->menu ); + mnu->lCursor[mnu->level] = Current->selectedName; + TRACE_EVENT_P1("Current->selectedName: %d", Current->selectedName); + /* go find the name + */ + bookFindName(MAX_SEARCH_NAME,&data->phbk->current); + } + } + break; + + case SEARCH_UPDATE: + { + /* Update, actually an initialisation/reset phase + */ + Current->index = 1; + Current->selectedName = 0; + + { + memset( data->edtBuf, '\0', sizeof( data->edtBuf ) ); + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + ATB_edit_Reset( data->editor ); +#else /* NEW_EDITOR */ + edtReset( data->edt ); +#endif /* NEW_EDITOR */ + SEND_EVENT( win, SEARCH_STRING, 0, 0 ); + } + } + break; + +/* SPR#1428 - SH - New Editor: Add this to allow redraw of + * window on request. */ + +#ifdef NEW_EDITOR + case SEARCH_REDRAW: + /*SPR 2104, TRACE seems to fix timing probs :/ */ + TRACE_EVENT("UPDATE SEARCH REDRAW"); + SEND_EVENT(data->win, SEARCH_STRING, 0, 0); + win_show(data->win); + break; +#endif /* NEW_EDITOR */ + + default: + { + /* + */ + } + break; + } +} + + + + + + +/******************************************************************************* + + $Function: bookSearchWindowCB + + $Description: Window call back function + + $Returns: MFW_EVENT_CONSUMED, or MFW_EVENT_PASSED + + $Arguments: e, event, w, window handle + +*******************************************************************************/ + +static int bookSearchWindowCB( MfwEvt e, MfwWin *w ) +{ + tBookStandard *data = (tBookStandard *) w->user; + tMmiPhbData *Current = &data->phbk->current; + int index; + char *pchr; + char pchr2[PHB_MAX_LEN*2 +4];/*mc, SPR 1442*/ + TRACE_FUNCTION( "bookSearchWindowCB()" ); + + // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) + // When FDN is disabled we need to display only ADN entries in the phonebook menu. + // We just use the preset PHB_ADN as the current book. + //if(data->phbk->current.status.book == PHB_ADN) + // data->phbk->current.status.book = PHB_ADN_FDN; + + + /* Deal with the visible event + */ + switch (e) + { + case MfwWinVisible: + { + /* Deal with the window visible event + */ + MmiBookShowDefault(); + + { + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + ATB_edit_Show( data->editor ); +#else /* NEW_EDITOR */ + edtShow( data->edt ); +#endif /* NEW_EDITOR */ + } + + /* SPR#1428 - SH - New Editor: Only update the list if we're not in multi-tap */ +#ifdef NEW_EDITOR + if (!data->editor->multitap) + { +#endif /* NEW_EDITOR */ + + for ( index = 0; index < MAX_SEARCH_NAME; index++ ) + { +TIME_TRACE_EVENT( "bookSearchWindowCB()-loopstart" ); + + pchr = (char *) MmiBookCallList( index ); + + memset( pchr, '\0', NAME_SCREEN_MAX ); + + /* SPR#1428 - SH - remove extraneous call to edtShow*/ + /*SPR 2123, using new macro PHONEBOOK_ITEM_LENGTH*/ +#ifdef NO_ASCIIZ + /*if current language chinese*/ + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { /*SPR 2653, this check should be here too*/ + if (!Current->list.entry == NULL) + { if ( Current->entry[ index ].name.len NEQ 0) //if name not empty + { + if (Current->entry[ index ].name.data[0] != 0x80)//if not unicode + {/*we have to convert to unicode*/ + pchr2[0]= 0x80;/*SPR 1442, add unicode tag*/ + pchr2[1]= 0x7f; + /*SPR2175, use new function*/ + ATB_convert_String((char*)Current->entry[ index ].name.data, MFW_ASCII, + (UBYTE)strlen((char*)Current->entry[ index ].name.data), &pchr2[2], MFW_DCS_UCS2, PHONEBOOK_ITEM_LENGTH-2, FALSE); + /*SPR 1442 and now truncate the string*/ + resources_truncate_to_screen_width((char *) pchr2, Current->entry[ index ].name.len*2+2, pchr,PHONEBOOK_ITEM_LENGTH , SCREEN_SIZE_X, TRUE); + } + else /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ + { + /*SPR 1442 truncate the string*/ + resources_truncate_to_screen_width((char *) Current->entry[index].name.data, Current->entry[index].name.len, pchr, MAX_ALPHA_LEN, SCREEN_SIZE_X, TRUE); + } + } + else /*we convert number string into unicode*/ + { pchr2[0]= 0x80;/*SPR 1442, add unicode tag*/ + pchr2[1]= 0x7f; + /*SPR 2175, use new function*/ + ATB_convert_String((char*)Current->entry[ index ].number, MFW_ASCII, + (UBYTE)strlen((char*)Current->entry[ index ].number), &pchr2[2], MFW_DCS_UCS2, PHONEBOOK_ITEM_LENGTH-2, FALSE); + /*SPR 1442 and now truncate the string*/ + resources_truncate_to_screen_width((char *) pchr2, strlen((char*)Current->entry[ index ].number)*2+2, pchr,PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X, TRUE); + } + } + + } + + else + { /*if current language a latin language*/ +/*SPR 2653, removed consitional compilation, this check applies whether we're in simulation mode or target hardware*/ + // EF check for null pointer first + if (!Current->list.entry == NULL) + /*SPR 2104, don't need this test*/ + + if ( Current->entry[ index ].name.len NEQ 0&&Current->entry[ index ].name.data[0] != 0x80/*mc*/) //Should check to see if null name + { /*mc, SPR 1442, replaced old truncation function with new one*/ + resources_truncate_to_screen_width((char *) Current->entry[index].name.data, Current->entry[index].name.len, pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X, FALSE); + } + else + {/*mc, SPR 1442, replaced old truncation function with new one*/ + resources_truncate_to_screen_width((char *) Current->entry[index].number, strlen((char*)Current->entry[index].number), pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X,FALSE); + } + +#else + if ( Current->entry[ index ].name[ 0 ] != NULL) //Should check to see if null name + { /*mc, SPR 1442, replaced old truncation function with new one*/ + resources_truncate_to_screen_width((char *) Current->entry[index].name, 0, pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X, FALSE); + } + else + { /*mc, SPR 1442, replaced old truncation function with new one*/ + resources_truncate_to_screen_width((char *) Current->entry[index].number, strlen((char*)Current->entry[index].number), pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X,FALSE); + } + /*SPR 2123 end*/ +#endif +#ifdef NO_ASCIIZ/*MC SPR 975, opening bracket only exists when NO_ASCIIZ defined*/ + } +#endif + } + +TIME_TRACE_EVENT( "bookSearchWindowCB()-end of loop" ); + mnuShow(data->menu); + /* SPR#1428 - SH - End of condition to check if we're in multi-tap */ +#ifdef NEW_EDITOR + } +#endif + + /* special case if invoked from SMS or using SDN book + */ + if ( ( data->phbk->fromSMS )|| + ( data->phbk->fromSMSSC ) || /* SPR#1428 - SH - New event for service centre editor */ + ( data->phbk->fromDivert ) || + ( data->phbk->fromDeflect )|| + //CRR: 25302 - xpradipg 10 Nov 2004 + //check if it was invoked from MMS/EMS + ( data->phbk->fromMmsEms)|| + ( Current->status.book == PHB_SDN ) ) + { + //displaySoftKeys( TxtSoftSelect, TxtSoftBack ); +// Jun 07, 2004 REF: CRR MMI-SPR-12818 Rashmi C N(Sasken) +// when the editor is empty, we need to display BACK softkey +// Delete softkey is displayed when it contains some characters + if (data->editor_attr.text.len==0) + { + displaySoftKeys( TxtSoftSelect, TxtSoftBack ); + } + else + { + displaySoftKeys( TxtSoftSelect, TxtDelete ); + } + } + else + { + //displaySoftKeys( TxtSoftOptions, TxtSoftBack ); +// Jun 07, 2004 REF: CRR MMI-SPR-12818 Rashmi C N(Sasken) +// when the editor is empty, we need to display BACK softkey +// Delete softkey is displayed when it contains some characters + if (data->editor_attr.text.len==0) + { + displaySoftKeys( TxtSoftOptions, TxtSoftBack ); + } + else + { + displaySoftKeys( TxtSoftOptions, TxtDelete ); + } + } + + } +TIME_TRACE_EVENT( "bookSearchWindowCB()-sk display end" ); + break; + + default: + { + /* default is to pass event back for further handling + */ + return MFW_EVENT_PASSED; + } +// break; // RAVI + + } + + /* consume the event + */ + return MFW_EVENT_CONSUMED; +} + + + + + + + + +/******************************************************************************* + + $Function: bookSearchKbdCB + + $Description: Keyboard handler + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, k, key handle + +*******************************************************************************/ + +static int bookSearchKbdCB( 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; + tMmiPhbData *Current = &data->phbk->current; + + TRACE_FUNCTION ("bookSearchKbdCB()"); + + /* SPR#1428 - SH - New editor doesn't require editActivate */ + #ifndef NEW_EDITOR + /* Set our editor active if it isn't already + */ + if ( activeEditor() != data->edt ) + editActivate( data->edt, TRUE); + #endif + + /* Deal with the key and event combinatino + */ + + + switch( k->code ) + { + case KCD_MNUUP: + { + /* scroll up + */ + SEND_EVENT( data->win, SEARCH_SCROLL_UP, 0, 0 ); + winShow( data->win ); + } + break; + + case KCD_MNUDOWN: + { + /* scroll down + */ + SEND_EVENT( data->win, SEARCH_SCROLL_DOWN, 0, 0 ); + winShow( data->win ); + } + break; + + + + case KCD_CALL: + if ( data->phbk->fromSMS ) + SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, PHBK_ID, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + else if ( data->phbk->fromSMSSC ) + SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, PHBK_ID, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + else + { if (data->phbk->fromDeflect /*SPR 1392, select number don't call it*/ ) + SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, PHBK_ID, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + else + callNumber( Current->entry[ Current->selectedName ].number ); + } + bookPhonebookDestroy(data->phbk->win); + break; +/* JVJ #1743 Right key deletes the characters, HUP destroys the window */ +#ifdef NEW_EDITOR + case KCD_HUP: +#else /* NEW_EDITOR */ + case KCD_HUP: +#endif /* NEW_EDITOR */ + { + if ( data->phbk->fromSMS ){ /* Send empty string so that ptr can be set 0*/ + SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, PHBK_ID, + "" ); + bookPhonebookDestroy(data->phbk->win); + } + else if ( data->phbk->fromSMSSC ){ + SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, PHBK_ID, + NULL ); + bookPhonebookDestroy(data->phbk->win); + } + /* Marcus (mk): Issue 1010: 2002-08-22: Start */ + else if (data->phbk->fromDivert) + { + bookPhonebookDestroy(data->phbk->win); + } + else if (data->phbk->fromDeflect)/*MC SPR 1392*/ + { /*Send empty string so that pointer to this window can be set to 0*/ + SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, PHBK_ID,""); + bookPhonebookDestroy(data->phbk->win); + } + //CRR: 25302 - xpradipg 10 Nov 2004 + //also handle if invoked by MMS/EMS + else if ( data->phbk->fromMmsEms ) + { /* Send empty string so that ptr can be set 0*/ + SEND_EVENT( data->phbk->parent_win, MMS_EMS_PHBK_NUMBER, PHBK_ID,"" ); + bookPhonebookDestroy(data->phbk->win); + } + /* Marcus (mk): Issue 1010: 2002-08-22: End */ + else + bookSearchDestroy(data->win); + + } + break; + + case KCD_MNUSELECT: + case KCD_LEFT: + + { + /* if in SMS send the event to it + */ + if ( data->phbk->fromSMS ) + { SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, PHBK_ID /*MZ 6/2/01 */, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + bookPhonebookDestroy(data->phbk->win); + } + else if ( data->phbk->fromSMSSC ) + { SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, PHBK_ID /*MZ 6/2/01 */, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + bookPhonebookDestroy(data->phbk->win); + } + else if(data->phbk->fromDivert ) //MZ 26/02/01 check for divert If in Divert send event. + { + SEND_EVENT( data->phbk->parent_win, DIVERT_PHBK_NUMBER, PHBK_ID /*MZ 28/2/01 */, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + bookPhonebookDestroy(data->phbk->win); + } + else if(data->phbk->fromDeflect ) /*SPR 1392*/ + { + TRACE_EVENT_P1("<< API deflection no. = %s", (char*) Current->entry[ Current->selectedName ].number); + SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, PHBK_ID, + (UBYTE *) Current->entry[ Current->selectedName ].number ); + bookPhonebookDestroy(data->phbk->win); + } + //CRR: 25302 - xpradipg 10 Nov 2004 + //send the number to the MMS/EMS window + else if(data->phbk->fromMmsEms) + { + TRACE_EVENT_P1("the value if win from MMS is %x",data->phbk->parent_win); + SEND_EVENT( data->phbk->parent_win, MMS_EMS_PHBK_NUMBER,PHBK_ID,(void *) Current->entry[ Current->selectedName ].number ); + bookPhonebookDestroy(data->phbk->win); + } + else + /* Start a new options menu + */ + /*check for UPN SPR 1327*/ + if (Current->status.book != PHB_UPN) + data->phbk->menu_options_win = bookMenuStart( data->phbk->win, bookNameMenuAttributes(),0); + else + data->phbk->menu_options_win = bookMenuStart( data->phbk->win, bookUPNMenuAttributes(),0); + } + break; + + /* JVJ #1743 Right key deletes search character*/ +#ifdef NEW_EDITOR + case KCD_RIGHT: +#else /* NEW_EDITOR */ + case KCD_HUP: +#endif /* NEW_EDITOR */ + { + + + + /* If we have any characters in the buffer, step back, otherwise + destroy the window + */ + + if ( data->edtBuf[0]) + { + +// Oct 26, 2004 REF: CRR 25354 xkundadu +// Description: Phonebook: After entering precise name to search and then +// trying to delete using RSK, first character is not deleted. +// Fix: If only one character is present in the editor and delete key is +// pressed, delete the editor buffer and update the editor view. + + // Find out the length of the buffer. + if(strlen((char*)data->edtBuf) == 1) + { + //If only one character is present, delete and set the buffer + //to NULL. + data->edtBuf[0] = '\0'; + data->editor_attr.text.len = 0; + //Move the cursor accordingly. + ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE); + data->editor->update = ED_UPDATE_TRIVIAL; + SEND_EVENT( data->win, SEARCH_STRING, 0, 0); + //Update the window. + winShow( data->win ); + break; + } + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + /* SPR#2174 - SH - If multitap is in progress, delete current character + * rather than previous character */ + + if (data->editor->multitap) + { + AUI_entry_StopMultitap(data->entry_data); /* Cancel multitap */ + ATB_edit_DeleteRight(data->editor, TRUE); /* SPR#2342 - SH */ + } + else + { + ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 - SH */ + } +#else /* NEW_EDITOR */ + edtChar( data->edt,ecBack ); +#endif /* NEW_EDITOR */ + + SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); + winShow( data->win ); + } + else + { + /*API - 12/08/03 - CQ11268 - Add this so the phonebbok is destoryed on right key press*/ + if ( data->phbk->fromSMS ) + { /* Send empty string so that ptr can be set 0*/ + bookPhonebookDestroy(data->phbk->win); + } + else if ( data->phbk->fromSMSSC ) + { + bookPhonebookDestroy(data->phbk->win); + } + /* Marcus (mk): Issue 1010: 2002-08-22: Start */ + else if (data->phbk->fromDivert) + { + bookPhonebookDestroy(data->phbk->win); + } + else if (data->phbk->fromDeflect)/*MC SPR 1392*/ + { /*Send empty string so that pointer to this window can be set to 0*/ + bookPhonebookDestroy(data->phbk->win); + } + //CRR: 25302 - xpradipg 10 Nov 2004 + //Handle if invoked from MMS/EMS + else if(data->phbk->fromMmsEms) + { + bookPhonebookDestroy(data->phbk->win); + } + /* Marcus (mk): Issue 1010: 2002-08-22: End */ + else + bookSearchDestroy(data->win); + /*API - 12/08/03 - CQ11268 - END*/ + } + } + break; + + case KCD_HASH: + { + + { + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + ATB_edit_DeleteLeft( data->editor, TRUE); /* SPR#2342 - SH */ +#else /* NEW_EDITOR */ + edtChar( data->edt,ecBack ); +#endif /* NEW_EDITOR */ + } + + /*NM, p016 + even updating when deleting characters + */ + SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); + winShow( data->win ); + } + break; + + default: + { + + { + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_entry_EventKey( data->entry_data, e, k ); + + /* send the search event to ourselves, + * but only when a character is finished in multi-tap + */ + if (!data->editor->multitap) + { + SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); + } +#else /* NEW_EDITOR */ + editEventKey( e, k ); + /* send the search event to ourselves, + */ + SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); +#endif /* NEW_EDITOR */ + winShow( data->win ); + } + } + break; + + } + + /* always consume the event + */ + return MFW_EVENT_CONSUMED; +} + + + + + + + +/******************************************************************************* + + $Function: bookSearchKbdLongCB + + $Description: long keypress event handler, handles long clear event only + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, k, key handle + +*******************************************************************************/ + +static int bookSearchKbdLongCB( 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 ("bookSearchKbdLongCB()"); + + /* deal with the clear event + */ + if ( ( e & KEY_CLEAR ) && ( e & KEY_LONG ) ) + { + bookSearchDestroy( win ); + data->phbk->search_win = 0; + } + + /* consume the event + */ + return MFW_EVENT_CONSUMED; +} + +//Jan 22, 2006 REF: OMAPS00061930 x0039928 +// Fix : Add a temporary timer handle for future reference. +T_MFW_HND PhbSearchTim; + +/******************************************************************************* + + $Function: bookSearchTimCB + + $Description: Callback function for the Phonebook timer. + + $Returns: None + + $Arguments: window handle event, timer control block + +*******************************************************************************/ + +static int bookSearchTimCB (MfwEvt event, MfwTim *timer) +{ + T_MFW_HND win = mfwParent( mfw_header() ); + T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; + tBookStandard *data = (tBookStandard *) win_data->user; + tMmiPhbData *Current = &data->phbk->current; + + TRACE_FUNCTION ("bookSearchTimCB()"); + + SEND_EVENT( data->win, SEARCH_STRING, 1, 0); + winShow( data->win ); +} + + +/******************************************************************************* + + $Function: bookSearchCreate + + $Description: Create the search window + + $Returns: handle of window or NULL if error + + $Arguments: parent, handle of parent window + +*******************************************************************************/ + +static T_MFW_HND bookSearchCreate( MfwHnd parent ) +{ + T_MFW_WIN *parent_win_data = ( (T_MFW_HDR *) parent )->data; + T_phbk *phbk = (T_phbk *)parent_win_data->user; + T_MFW_WIN *win_data; + tBookStandard *data; +// int i; // RAVI +// char debug[50]; // RAVI + + TRACE_FUNCTION ("bookSearchCreate()"); + + /* allocate memory for our control block + */ + if ( ( data = (tBookStandard *) ALLOC_MEMORY( sizeof( tBookStandard ) ) ) == NULL ) + return NULL; + + /*SPR 2123, MC allocate memory for phonebook list*/ + if (create_mmi_phonebook_names_list() == NULL) + return NULL; + + /* Create the window if we can + */ + if ( ( data->win = win_create( parent, 0, E_WIN_VISIBLE, (T_MFW_CB) bookSearchWindowCB ) ) == 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) bookSearchDialog; + 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) bookSearchKbdCB ); + data->kbd_long = kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookSearchKbdLongCB ); + //Jan 22, 2006 REF: OMAPS00061930 x0039928 + // Fix: Create a timer and assign to PhbSearchTim + data->tim = timCreate(data->win, 1000, (MfwCb)bookSearchTimCB); + data->menu = mnuCreate( data->win,MmiBookMenuDetailsList() , 0, 0 ); + PhbSearchTim = data->tim; + mnuLang (data->menu,0); + + /* 1945 MZ Initialise the edtBuf */ + memset(data->edtBuf,'\0', STANDARD_EDITOR_SIZE ); + + { + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR +/*SPR 2233, make sure editor only displays lower-case chars*/ + AUI_edit_SetAttr(&data->editor_attr, BOOKSEARCH_EDITOR, COLOUR_EDITOR_XX,EDITOR_FONT, + ED_MODE_ALPHA | ED_MODE_FORMATTED, ED_CURSOR_BAR, ATB_DCS_ASCII, (UBYTE*) data->edtBuf, MAX_SEARCH_CHAR); + data->editor_attr.FormatString = "*a"; + data->editor = ATB_edit_Create( &data->editor_attr, 0 ); + data->entry_data = AUI_entry_Create(data->win, data->editor, SEARCH_REDRAW); + /*SPR2233 end*/ + ATB_edit_Init(data->editor); +#else /* NEW_EDITOR */ + bookSetEditAttributes(BOOKSEARCH_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, + (char *) data->edtBuf, MAX_SEARCH_CHAR, &data->attr ); + data->edt = edtCreate( data->win, &data->attr, 0, 0 ); +#endif /* NEW_EDITOR */ + } + + + /* allow the window and menu to be created + */ + mnuUnhide(data->menu); + winShow(data->win); + + /* And return the handle of the newly created window + */ + return data->win; +} + + + +/******************************************************************************* + + Public Methods + +*******************************************************************************/ + + + + +/******************************************************************************* + + $Function: bookSearchStart + + $Description: Starts the search window + + $Returns: handle of newly created window, or NULL if error + + $Arguments: parent, handle of parent window + +*******************************************************************************/ + +T_MFW_HND bookSearchStart( MfwHnd parent ) +{ + T_MFW_HND win; + T_MFW_WIN *win_data; + tBookStandard *data; + MfwMnu *mnu; + tMmiPhbData *Current; + + /* if the phone book is still loading, we can't do anything + with it, so return a NULL, after showing an information + dialog + */ + if ( phb_get_mode() == PHB_LOADING ) + { + bookShowInformation( idle_get_window(), TxtPleaseWait ,NULL, NULL ); + return NULL; + } + + /* try to create the window + */ + if ( ( win = bookSearchCreate( parent ) ) == NULL ) + return NULL; + + /* having created the window, we now need to initialise it to + sensible data + */ + win_data = ( (T_MFW_HDR *) win)->data; + data = (tBookStandard *) win_data->user; + Current = &data->phbk->current; + + /* establish the status of the phone book + */ + if ( ( Current->status.book != PHB_UPN ) && ( Current->status.book != PHB_SDN ) ) + Current->status.book = bookActiveBook(READ); + bookGetCurrentStatus( &Current->status ); + + /* try to establish if we have information in the phone book + */ + Current->index = 1; + Current->selectedName = 0; + bookFindName( MAX_SEARCH_NAME, Current ); + + if ( ! Current->index ) + { + bookSearchDestroy( win ); + bookShowInformation( idle_get_window(), TxtEmptyList, NULL, NULL ); + return NULL; + } + + /* clear the edit buffer prior to displaying the editor and menus + */ + + + memset( data->edtBuf, '\0', sizeof( data->edtBuf ) ); + /* SPR#1428 - SH - New Editor: don't need editActivate */ +#ifndef NEW_EDITOR + editActivate( data->edt, true ); +#endif /* NEW_EDITOR */ + + mnu = (MfwMnu *) mfwControl( data->menu ); + mnu->lCursor[mnu->level] = Current->selectedName; + winShow(data->win); + + /* return the handle to the newly created window + */ + return win; +} + + + + +/******************************************************************************* + + $Function: bookSearchDestroy + + $Description: Destroy the search window + + $Returns: None + + $Arguments: Window, handle of the window to be destroyed + +*******************************************************************************/ + +void bookSearchDestroy( MfwHnd window ) +{ + T_MFW_WIN *win = ((T_MFW_HDR *) window)->data; + tBookStandard *data = (tBookStandard *) win->user; + + TRACE_FUNCTION( "bookSearchDestroy()" ); + + /* Only destroy if the data is valid + */ + if ( data ) + { + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + /* Editor now not automatically destroyed by winDelete, + * so destroy it here. */ + if (data->entry_data) + { + AUI_entry_Destroy(data->entry_data); + data->entry_data = 0; + } + if (data->editor) + { + ATB_edit_Destroy(data->editor); + data->editor = 0; + } +#endif /* NEW_EDITOR */ + + /* If we're the root window we destroy using it's function + */ + if ( data->phbk->root_win == window ) + { + bookPhonebookDestroy( data->phbk->win ); + return; + } + + /* delete ourself + */ + data->phbk->search_win = 0; + winDelete( data->win ); + FREE_MEMORY( (void *) data, sizeof( tBookStandard ) ); + } + /*SPR2123, MC deallocate memory for phonebook list*/ + destroy_mmi_phonebook_names_list(MmiBookMenuDetailsList()); +} + + + + + + + +/******************************************************************************* + + $Function: bookSearchName + + $Description: locate a requested name in the phone book + + $Returns: status of the findName routine + + $Arguments: pattern, to be searched for + number, of elements to limit the search to + current, pointer to a buffer to store the results + +*******************************************************************************/ + +UBYTE bookSearchName (char *pattern,UBYTE number,tMmiPhbData *current) +{ + UBYTE ret; + #ifdef NO_ASCIIZ + T_MFW_PHB_TEXT l_name; + #else + UBYTE l_name[PHB_MAX_LEN]; + #endif +// UBYTE len; // RAVI + int i; + + TRACE_FUNCTION( "bookSearchName()" ); + + /* if using UPN phone book, return status of findname + */ + if ( current->status.book == PHB_UPN ) + return ret = current->result = bookFindName( MAX_SEARCH_NAME, current ); + + /* otherwise we need to be a little bit more clever with this + */ + memset( current->entry, 0, MAX_SEARCH_CALL_LIST * sizeof( T_MFW_PHB_ENTRY ) ); + bookGetCurrentStatus( ¤t->status ); + + current->list.entry = current->entry; + current->list.num_entries = number; + + /* convert from GSM characters + */ + #ifdef NO_ASCIIZ + + memset( l_name.data, 0, PHB_MAX_LEN ); + mfw_Gsm2SIMStr( MFW_DCS_7bits, (UBYTE *) pattern, PHB_MAX_LEN, l_name.data, &l_name.len ); + #else + memset( l_name, 0, PHB_MAX_LEN ); + mfw_Gsm2SIMStr( MFW_DCS_7bits, (UBYTE *) pattern, PHB_MAX_LEN, l_name, &len ); + #endif + /* perform a search to locate a match with this criteria + */ + if ( strlen(pattern) != 0 ) + { +#ifdef WIN32 +#ifndef NO_ASCIIZ + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("Search str: %s", l_name.data); + /***************************Go-lite Optimization changes end***********************/ + ret = phb_find_entries( current->status.book, ¤t->index, MFW_PHB_ALPHA, number, (UBYTE *) l_name, len, ¤t->list ); +#endif +#else +//not WIN32 + +#ifdef NO_ASCIIZ + ret = phb_find_entries( current->status.book, ¤t->index, MFW_PHB_ALPHA, number, &l_name, ¤t->list ); +#else + ret = phb_find_entries( current->status.book, ¤t->index, MFW_PHB_ALPHA, number, (char *) l_name, ¤t->list ); +#endif //NO_ASCIIZ + +#endif //WIN32 + } + else + { + /* we don't have any name information, so start at the beginning + */ + current->index = 1; + current->selectedName = 0; + bookFindName( MAX_SEARCH_NAME, current ); + } + + /* check for match + */ + if ( ( current->list.num_entries < MAX_SEARCH_NAME ) + || ( current->list.result == MFW_NO_ENTRY ) || ( ret == PHB_FAIL ) ) + { + /* no, then try to find again + */ + ret = bookFindName( MAX_SEARCH_NAME, current ); + } + else + { + for ( i = 0; i < number; i++ ) +#ifdef NO_ASCIIZ +{ + /* convert from Sim to GSM and then copy to output buffer + */ +/*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ +/*MC SPR 2175, using new function to convert name string*/ + if (current->entry[i].name.dcs == MFW_DCS_8bits && current->entry[i].name.data[0] != 0x80) + { ATB_convert_String((char*)current->entry[i].name.data, MFW_DCS_8bits, current->entry[i].name.len, (char*)l_name.data, MFW_ASCII, MAX_ALPHA_LEN, FALSE); + memcpy( current->entry[i].name.data, l_name.data, MAX_ALPHA_LEN ); + current->entry[i].name.len = l_name.len; + current->entry[i].name.dcs = MFW_ASCII; + } +} +#else +/* convert from GSM to Alpha characters + */ + bookGsm2Alpha( (UBYTE *) current->entry[i].name ); +#endif + } + + /* return the status, and store it as part of current as well + */ + TRACE_EVENT_P1("BookSearchName returns: %d", ret); + return current->result = ret; +} + + + +/******************************************************************************* + + End of File + +*******************************************************************************/ +