line source
+ − /*******************************************************************************
+ −
+ − CONDAT (UK)
+ −
+ − ********************************************************************************
+ −
+ − This software product is the property of Condat (UK) Ltd and may not be
+ − disclosed to any third party without the express permission of the owner.
+ −
+ − ********************************************************************************
+ −
+ − $Project name: Basic MMI
+ − $Project code: BMI (6349)
+ − $Module: PhoneBook
+ − $File: MmiBookSDNWindow.c
+ − $Revision: 1.0
+ −
+ − $Author: Condat(UK)
+ − $Date: 25/10/00
+ −
+ − ********************************************************************************
+ −
+ − Description:
+ −
+ − This module provides the service numbers window for the phone book
+ −
+ − ********************************************************************************
+ − $History: MmiBookSDNWindow.c
+ −
+ − 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
+ − 25/10/00 Original Condat(UK) BMI version.
+ −
+ − $End
+ −
+ − *******************************************************************************/
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − Include Files
+ −
+ − *******************************************************************************/
+ − #define ENTITY_MFW
+ −
+ − /* includes */
+ − #include <string.h>
+ − #include <stdio.h>
+ − #include <stdlib.h>
+ −
+ − #if defined (NEW_FRAME)
+ −
+ − #include "typedefs.h"
+ − #include "vsi.h"
+ − #include "pei.h"
+ − #include "custom.h"
+ − #include "gsm.h"
+ −
+ − #else
+ −
+ − #include "STDDEFS.H"
+ − #include "custom.h"
+ − #include "gsm.h"
+ − #include "vsi.h"
+ −
+ − #endif
+ −
+ − #include "mfw_sys.h"
+ −
+ − #include "mfw_mfw.h"
+ − #include "mfw_win.h"
+ − #include "mfw_kbd.h"
+ − #include "mfw_lng.h"
+ − /* SPR#1428 - SH - New Editor changes */
+ − #ifndef NEW_EDITOR
+ − #include "mfw_edt.h"
+ − #endif
+ − #include "mfw_icn.h"
+ − #include "mfw_mnu.h"
+ − #include "mfw_tim.h"
+ −
+ − #include "mfw_sim.h"
+ − #include "mfw_cm.h"
+ − #include "mfw_nm.h"
+ − #include "mfw_phb.h"
+ − #include "mfw_mme.h"
+ − #include "mfw_sat.h"
+ − #include "mfw_sms.h"
+ − #include "mfw_cnvt.h" //GW Added for 'mfw_SIM2GsmStr'
+ −
+ − #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 "mmiColours.h"
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − Private methods
+ −
+ − *******************************************************************************/
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDN
+ −
+ − $Description: window dialog function
+ −
+ − $Returns: none.
+ −
+ − $Arguments: win, window handle
+ − event, event to be handled
+ − value, not used
+ − parameter, not used
+ −
+ − *******************************************************************************/
+ −
+ − static void bookSDN( 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;
+ − MfwMnu *mnu;
+ − tMmiPhbData *my;
+ −
+ − TRACE_FUNCTION ("bookSDN()");
+ −
+ − /* Guard against bad incoming data
+ − */
+ − if ( ! data )
+ − return;
+ −
+ − /* Grab the current phonebook data element, we use this a lot
+ − */
+ − my = &data->phbk->current;
+ −
+ − /* simple event handler, dealing with the messages we know about
+ − */
+ − switch (event)
+ − {
+ − case SEARCH_INIT:
+ − {
+ − /* Search initialise, no action required
+ − */
+ − }
+ − break;
+ −
+ − case SEARCH_SCROLL_UP:
+ − {
+ − /* Scroll up event we need to deal with correctly
+ − */
+ − if ( ( my->index==1 ) && ( my->selectedName == 0 ) )
+ − {
+ − /* select the correct boundary for the list
+ − */
+ − my->selectedName = my->status.used_entries;
+ − if ( my->selectedName > MAX_SEARCH_NAME )
+ − my->selectedName = MAX_SEARCH_NAME;
+ −
+ − /* and subtract one cos we are dealing with an array starting
+ − at zero
+ − */
+ − my->selectedName--;
+ −
+ − /* and calculate the correct index value
+ − */
+ − my->index = my->status.used_entries - my->selectedName;
+ −
+ − }
+ − else
+ − {
+ − if ( my->selectedName == 0 )
+ − my->index--;
+ − else
+ − my->selectedName--;
+ − }
+ −
+ − /* update menu structures
+ − */
+ − mnu = (MfwMnu *)mfwControl( data->menu );
+ − mnu->lCursor[ mnu->level ] = my->selectedName;
+ −
+ − /* and go find the name
+ − */
+ − bookFindName( MAX_SEARCH_NAME, &data->phbk->current );
+ − }
+ − break;
+ −
+ − case SEARCH_SCROLL_DOWN:
+ − {
+ − /* scroll down event is a bit easier than the scroll up
+ − */
+ − if ( (my->index + my->selectedName) == my->status.used_entries )
+ − {
+ − my->index = 1;
+ − my->selectedName = 0;
+ − }
+ − else
+ − {
+ − if ( my->selectedName == (MAX_SEARCH_NAME - 1) )
+ − my->index++;
+ − else
+ − my->selectedName++;
+ − }
+ −
+ − /* update menu structures
+ − */
+ − mnu = (MfwMnu *)mfwControl( data->menu );
+ − mnu->lCursor[ mnu->level ] = my->selectedName;
+ −
+ − /* and go find the name
+ − */
+ − bookFindName( MAX_SEARCH_NAME, &data->phbk->current );
+ − }
+ − break;
+ −
+ − case SEARCH_STRING:
+ − {
+ − /* search for the current element selected in our buffer
+ − */
+ − my->index = my->index + my->selectedName;
+ −
+ − if ( bookSearchName( data->edtBuf, MAX_SEARCH_NAME, &data->phbk->current ) == MFW_PHB_OK )
+ − {
+ − if ( my->index > (my->status.used_entries - MAX_SEARCH_NAME + 1) )
+ − {
+ − /* need to reorganise a bit here
+ − */
+ − if ( my->status.used_entries > MAX_SEARCH_NAME )
+ − {
+ − my->selectedName = my->index - my->status.used_entries;
+ − my->selectedName += MAX_SEARCH_NAME - 1;
+ − my->index -= my->selectedName;
+ − }
+ − else
+ − {
+ − my->selectedName = my->index - 1;
+ − my->index = 1;
+ − }
+ −
+ − /* find the appropriate name
+ − */
+ − bookFindName( MAX_SEARCH_NAME, &data->phbk->current );
+ − }
+ − else
+ − data->phbk->current.selectedName = 0;
+ −
+ − /* update menu structures
+ − */
+ − mnu = (MfwMnu *)mfwControl(data->menu);
+ − mnu->lCursor[mnu->level] = data->phbk->current.selectedName;
+ − }
+ − }
+ − break;
+ −
+ − case SEARCH_UPDATE:
+ − {
+ − /* Update search message
+ − */
+ − my->index = 1;
+ − my->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 */
+ −
+ − /* deal with the new search using the method above
+ − */
+ − SEND_EVENT( win, SEARCH_STRING, 0, 0 );
+ − }
+ − break;
+ −
+ − /* SPR#1428 - SH - New Editor: added event so we can
+ − * prompt a redraw when required. */
+ − #ifdef NEW_EDITOR
+ − case SEARCH_REDRAW:
+ − win_show(data->win);
+ − break;
+ − #endif
+ −
+ − default:
+ − {
+ − /* no default handler, just ignore any other messages
+ − */
+ − }
+ − break;
+ −
+ − }
+ −
+ − }
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDNWinCB
+ −
+ − $Description: Window call back function
+ −
+ − $Returns: status indicating if event handled or not
+ −
+ − $Arguments: e, event, w, window handle
+ −
+ − *******************************************************************************/
+ −
+ − static int bookSDNWinCB( MfwEvt e, MfwWin *w )
+ − {
+ − tBookStandard *data = (tBookStandard *)w->user;
+ −
+ − char *ElemPtr, *NumPtr;
+ − int leftKey, rightKey, ElemSize, i, Position;
+ −
+ − TRACE_FUNCTION ("phbk_sdn_win_cb()");
+ −
+ − switch (e)
+ − {
+ − case MfwWinVisible:
+ − {
+ − /* Paint function, clear the screen and paint in each
+ − of our controls
+ − */
+ − dspl_ClearAll();
+ −
+ − /* SPR#1428 - SH - New Editor changes */
+ − #ifdef NEW_EDITOR
+ − ATB_edit_Show(data->editor);
+ − #else /* NEW_EDITOR */
+ − edtShow(data->edt);
+ − #endif /* NEW_EDITOR */
+ −
+ − /* Populate the names screen buffer
+ − */
+ − for (i=0;i<MAX_SEARCH_NAME;i++)
+ − {
+ − /* Grab info for this element
+ − */
+ − ElemPtr = MmiBookCallList(i);
+ − ElemSize = MmiBookCallListSize(i);
+ −
+ − /* Decide on whether to use number or name
+ − */
+ − #ifdef NO_ASCIIZ
+ − NumPtr = (char*)data->phbk->current.entry[i].name.data;
+ − #else
+ − NumPtr = (char*)data->phbk->current.entry[i].name;
+ − #endif
+ −
+ − if ( *NumPtr == '\0' )
+ − {
+ − NumPtr = (char*)data->phbk->current.entry[i].number;
+ − Position = POS_END;
+ − }
+ − else
+ − Position = POS_BEGIN;
+ −
+ − /* Clear the buffer, then fill it with the required value
+ − */
+ − memset( ElemPtr, '\0', ElemSize );
+ − /*mc, SPR 1442, replaced old truncation function with new one*/
+ − resources_truncate_to_screen_width(NumPtr, 0, ElemPtr, ElemSize,SCREEN_SIZE_X, FALSE);
+ − }
+ −
+ − /* Show the menu and stick up the find prompt
+ − */
+ − mnuUnhide(data->menu);
+ − PROMPT( MmiBookMenuArea().px, Mmi_layout_line(SECOND_LAST_LINE_TOP), 0, TxtFind );
+ −
+ − /* The softkeys are dependant on how we got here
+ − */
+ − //CRR: 25302 - xpradipg 10 Nov 2004
+ − //check also if phonebook is invoked by MMS/EMS
+ − if ( ( data->phbk->fromSMS ) || ( data->phbk->fromSMSSC )|| (data->phbk->fromMmsEms) ||( data->phbk->current.status.book == PHB_SDN ) )
+ − {
+ − leftKey = TxtSoftSelect;
+ − rightKey = TxtSoftBack;
+ − }
+ − else
+ − {
+ − leftKey = TxtSoftCall;
+ − rightKey = TxtSoftOptions;
+ − }
+ − displaySoftKeys( leftKey, rightKey );
+ − }
+ − break;
+ −
+ − default:
+ − {
+ − /* Default handler, just return zero and let the next handler in the
+ − chain deal with the event if required
+ − */
+ − return 0;
+ − }
+ − }
+ −
+ − /* return non-zero status indicating we have dealt with the event
+ − */
+ − return MFW_EVENT_CONSUMED;
+ − }
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDNKbdCB
+ −
+ − $Description: Keyboard handler
+ −
+ − $Returns: stats indicating if event handled or not
+ − (Always MFW_EVENT_CONSUMED)
+ −
+ − $Arguments: e, event, k, keyboard handle
+ −
+ − *******************************************************************************/
+ −
+ − static int bookSDNKbdCB( 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;
+ − tBookMessageEvents MyEvent = SEARCH_STRING;
+ − char *Number;
+ −
+ − // int i = 0; // RAVI
+ −
+ − TRACE_FUNCTION ("bookSDNKbdCB()");
+ −
+ − /* SPR#1428 - SH - New Editor changes */
+ − #ifdef NEW_EDITOR
+ − AUI_entry_EventKey(data->entry_data, e, k);
+ − #else /* NEW_EDITOR */
+ − /* Make sure we have the correct editor enabled
+ − * (unnecessary for NEW_EDITOR) */
+ − if ( activeEditor() != data->edt )
+ − editActivate( data->edt, TRUE );
+ − editEventKey( e, k );
+ − #endif /* NEW_EDITOR */
+ −
+ − /* Handle the events we need to deal with here
+ − */
+ − switch (k->code)
+ − {
+ − case KCD_MNUUP:
+ − {
+ − /* Scroll up event, just mark our event as such and it'll
+ − be dealt with in due course
+ − */
+ − MyEvent = SEARCH_SCROLL_UP;
+ − }
+ − break;
+ −
+ − case KCD_MNUDOWN:
+ − {
+ − /* Scroll down event, just mark our event as such and it'll
+ − be dealt with in due course
+ − */
+ − MyEvent = SEARCH_SCROLL_DOWN;
+ − }
+ − break;
+ −
+ − case KCD_CALL:
+ − case KCD_LEFT:
+ − {
+ − /* left key is a select, we either need to send the number
+ − back to the parent window, or call it
+ − */
+ − Number = (char *) data->phbk->current.entry[ data->phbk->current.selectedName ].number;
+ −
+ − if ( data->phbk->fromSMS )
+ − SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, 0, (UBYTE *) Number );
+ − if ( data->phbk->fromSMSSC )
+ − SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, 0, (UBYTE *) Number );
+ − else if(data->phbk->fromDivert )
+ − SEND_EVENT( data->phbk->parent_win, DIVERT_PHBK_NUMBER, 0, (UBYTE *) Number );
+ − else if(data->phbk->fromDeflect )/*SPR 1392, send event to call dialogue*/
+ − SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, 0, (UBYTE *) Number );
+ − //CRR: 25302 - xpradipg 10 Nov 2004
+ − //send even if invoked by MMS/EMS
+ − else if(data->phbk->fromMmsEms)
+ − SEND_EVENT( data->phbk->parent_win, MMS_EMS_PHBK_NUMBER, 0, (UBYTE *) Number );
+ − else
+ − callNumber( (UBYTE *) Number );
+ −
+ − /* Having dealt with the number, we destroy our phone book
+ − context and exit the handler early
+ − */
+ − bookPhonebookDestroy( data->phbk->win );
+ − return MFW_EVENT_CONSUMED;
+ − }
+ − //break; // RAVI
+ −
+ − case KCD_RIGHT:
+ − {
+ − /* Right key is a cancel
+ − */
+ − bookSDNDestroy( data->win );
+ − data->phbk->search_win = 0;
+ − return MFW_EVENT_CONSUMED;
+ − }
+ − // break; // RAVI
+ −
+ − case KCD_HUP:
+ − {
+ − /* Clear key deletes the last character, or if none left will
+ − take us out of here
+ − */
+ − if ( data->edtBuf[0] == '\0' )
+ − {
+ − bookSDNDestroy( data->win );
+ − data->phbk->search_win = 0;
+ − return MFW_EVENT_CONSUMED;
+ − }
+ − else
+ − {
+ − /* Delete last character entered
+ − */
+ − /* SPR#1428 - SH - New Editor changes */
+ − #ifdef NEW_EDITOR
+ − ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 */
+ − #else /* NEW_EDITOR */
+ − edtChar( data->edt, ecBack );
+ − #endif /* NEW_EDITOR */
+ − }
+ − }
+ − break;
+ −
+ − default:
+ − {
+ − /* No default processing required
+ − */
+ − }
+ − break;
+ − }
+ −
+ − /* Initiate a new search based on the current settings, MyEvent
+ − will have been set accordingly
+ − */
+ − SEND_EVENT( data->win, MyEvent, 0, 0 );
+ − winShow( data->win );
+ −
+ − /* And make sure no calling routines try to do anything with the
+ − event we have just dealt with
+ − */
+ − return MFW_EVENT_CONSUMED;
+ − }
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDNKeyLongCB
+ −
+ − $Description: long keyboard event handler
+ −
+ − $Returns: MFW_EVENT_CONSUMED always
+ −
+ − $Arguments: e, event to handle, k, keyboard handle
+ −
+ − *******************************************************************************/
+ −
+ − static int bookSDNKeyLongCB( 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;
+ −
+ − /* Just checks for clear and long being set, if so it will
+ − destroy the window
+ − */
+ − if ( (e & KEY_CLEAR) && (e & KEY_LONG) )
+ − {
+ − bookSDNDestroy( win );
+ − data->phbk->search_win = 0;
+ − }
+ −
+ − /* Force event consumed always, prevents default behaviour
+ − kicking in
+ − */
+ − return MFW_EVENT_CONSUMED;
+ − }
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDNCreate
+ −
+ − $Description: Creates the Service numbers widow
+ −
+ − $Returns: Window Handle, or NULL if unsuccessfull
+ −
+ − $Arguments: Parent, handle of the parent window
+ −
+ − *******************************************************************************/
+ −
+ − static T_MFW_HND bookSDNCreate( MfwHnd parent )
+ − {
+ − T_MFW_WIN *win_data;
+ − tBookStandard *data = (tBookStandard *) ALLOC_MEMORY( sizeof( tBookStandard ) );
+ − T_MFW_WIN *parent_win_data = ((T_MFW_HDR *)parent)->data;
+ − T_phbk* phbk = (T_phbk *)parent_win_data->user;
+ −
+ − TRACE_FUNCTION( "bookSDNCreate()" );
+ −
+ − /* Create the window
+ − */
+ − if ( ( data->win = win_create (parent, 0, E_WIN_VISIBLE, (T_MFW_CB) bookSDNWinCB ) ) == NULL )
+ − return NULL;
+ −
+ − /*SPR 2123, MC allocate memory for phonebook list*/
+ − if (create_mmi_phonebook_names_list() == NULL)
+ − return NULL;
+ −
+ − /* set up the basic window elements, dialog and user data pointers
+ − */
+ − data->mmi_control.dialog = (T_DIALOG_FUNC)bookSDN;
+ − data->mmi_control.data = data;
+ − win_data = ((T_MFW_HDR *)data->win)->data;
+ − win_data->user = (void *)data;
+ − data->parent_win = parent;
+ −
+ − /* Create keyboard and menu handlers to be associated with
+ − this window
+ − */
+ − data->kbd = kbdCreate( data->win, KEY_ALL, (MfwCb) bookSDNKbdCB );
+ − data->kbd_long = kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookSDNKeyLongCB );
+ − data->menu = mnuCreate( data->win, MmiBookMenuDetailsList(), 0, 0 );
+ −
+ − /* Set basic edit attributes structure and create an editor
+ − associated with these attributes
+ − */
+ − /* SPR#1428 - SH - New Editor changes */
+ − #ifdef NEW_EDITOR
+ − AUI_edit_SetAttr( &data->editor_attr, BOOKSDN_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT, ED_MODE_ALPHA, ED_CURSOR_BAR, ATB_DCS_ASCII, (UBYTE*) data->edtBuf, MAX_SEARCH_CHAR);
+ − data->editor = ATB_edit_Create(&data->editor_attr,0);
+ − data->entry_data = AUI_entry_Create(data->win, data->editor, SEARCH_REDRAW);
+ − ATB_edit_Init(data->editor);
+ − #else /* NEW_EDITOR */
+ − bookSetEditAttributes( BOOKSDN_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 */
+ −
+ − /* Show the menu
+ − */
+ − mnuUnhide(data->menu);
+ −
+ − /* associate the phonebook handler
+ − */
+ − data->phbk = phbk;
+ −
+ − /* and return the newly created window handle
+ − */
+ − return data->win;
+ − }
+ −
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − Public methods
+ −
+ − *******************************************************************************/
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDNStart
+ −
+ − $Description: This is the entry point for the service numbers window handler
+ −
+ − $Returns: handle of window we are creating
+ −
+ − $Arguments: Parent, handle of the parent window
+ −
+ − *******************************************************************************/
+ −
+ − T_MFW_HND bookSDNStart( MfwHnd parent )
+ − {
+ − T_MFW_HND win;
+ − T_MFW_WIN *win_data;
+ − tBookStandard *data;
+ − MfwMnu *mnu;
+ −
+ − TRACE_FUNCTION( "bookSDNCreate()" );
+ −
+ − /* We can't actually create the window if the phone book is
+ − still loading, so we will deal with this up front
+ − */
+ − if ( phb_get_mode() == PHB_LOADING )
+ − {
+ − bookShowInformation( idle_get_window(), TxtPleaseWait ,NULL, NULL );
+ − return NULL;
+ − }
+ −
+ − /* Create the basic window, dealing with errors here and just terminating
+ − if we can't create the window correctly.
+ − */
+ − if ( ( win = bookSDNCreate( parent ) ) == NULL )
+ − return NULL;
+ −
+ − /* Okay, we have created the window, so set up our internal
+ − working pointers and check if the current phone book has
+ − some entries in it
+ − */
+ − win_data = ((T_MFW_HDR *) win)->data;
+ − data = (tBookStandard *)win_data->user;
+ − data->phbk->current.status.book = PHB_SDN;
+ −
+ − /* we need to determine if there are any entries in the phone book
+ − before we allow the service number windows to be displayed, we
+ − do this by searching for an empty name
+ − */
+ − bookGetCurrentStatus( &data->phbk->current.status );
+ − memset( data->edtBuf, '\0' , sizeof( data->edtBuf ) );
+ − data->phbk->current.index = 1;
+ − data->phbk->current.selectedName = 0;
+ − bookFindName( MAX_SEARCH_NAME, &data->phbk->current );
+ −
+ − /* If the current index is still zero then we have been unable to
+ − find an entry, in this case we need to shutdown the service
+ − numbers window, since we can't do anything with it.
+ − */
+ − if ( data->phbk->current.index == 0 )
+ − {
+ − bookSDNDestroy( win );
+ − data->phbk->search_win = 0;
+ − bookShowInformation( idle_get_window(), TxtEmptyList ,NULL, NULL );
+ − return 0;
+ − }
+ −
+ − /* We are still running, so set up the menu and edit structures
+ − accordingly, and display the window
+ − */
+ − mnu = (MfwMnu *) mfwControl( data->menu );
+ − mnu->lCursor[ mnu->level ] = data->phbk->current.selectedName;
+ −
+ − /* SPR#1428 - SH - New Editor: editActivate no longer needed */
+ − #ifndef NEW_EDITOR
+ − editActivate( data->edt, 1 );
+ − #endif
+ − winShow( data->win );
+ −
+ − /* return the pointer to the window
+ − */
+ − return win;
+ − }
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookFindNameInSDNPhonebook
+ −
+ − $Description: This routine performs the FindNameInPhoneBook functionality,
+ − tuned to the particular requirements of the service numbers
+ − phonebook.
+ −
+ − $Returns: handle of window we are creating
+ −
+ − $Arguments: Parent, handle of the parent window
+ −
+ − *******************************************************************************/
+ −
+ − int bookFindNameInSDNPhonebook( const char* p_pszNumber, T_MFW_PHB_ENTRY* p_pEntry )
+ − {
+ − T_MFW_PHB_LIST phb_list;
+ − #ifdef NO_ASCIIZ
+ − T_MFW_PHB_TEXT p_pszNumberText;
+ − #endif
+ − SHORT phb_index=0;
+ − /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/
+ − UBYTE l_name[MAX_ALPHA_LEN];
+ − int status;
+ − char bfr[80];
+ − TRACE_FUNCTION("bookFindNameInSDNPhonebook()");
+ −
+ − /* guard against dodgy input data
+ − */
+ − if( ( p_pszNumber == NULL ) || ( p_pEntry == NULL ) )
+ − return 0;
+ − if ( strlen(p_pszNumber) < 1)
+ − return (0);
+ − /* initialise the search structures
+ − */
+ − memset(p_pEntry, 0, sizeof(T_MFW_PHB_ENTRY));
+ − memset(&phb_list, 0, sizeof(phb_list));
+ − phb_list.entry = p_pEntry;
+ − phb_list.num_entries = 1;
+ − phb_list.book = PHB_SDN;
+ −
+ − //GW Set up data structure for NO_ASCIIZ
+ − #ifdef NO_ASCIIZ
+ − p_pszNumberText.dcs = MFW_DCS_8bits;
+ − p_pszNumberText.len = strlen(p_pszNumber);
+ − strcpy((char*)p_pszNumberText.data, p_pszNumber);
+ − #endif
+ −
+ − /* see what we can find using the standard search routine for
+ − any phone book, giving the service numbers book as a parameter
+ − */
+ −
+ − #ifdef NO_ASCIIZ
+ − status = phb_find_entries( (UBYTE)PHB_SDN, &phb_index, (UBYTE)MFW_PHB_NUMBER, 1, &p_pszNumberText, &phb_list );
+ − #else
+ − status = phb_find_entries( PHB_SDN, &phb_index, MFW_PHB_NUMBER, 1, (char *) p_pszNumber, &phb_list );
+ − #endif
+ − sprintf(bfr,"len:%2d , name: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",p_pEntry->name.len);
+ − memcpy(&bfr[16], p_pEntry->name.data, PHB_MAX_LEN);
+ − TRACE_FUNCTION(bfr);
+ − sprintf(bfr,"number:'%s'",p_pEntry->number);
+ − TRACE_FUNCTION(bfr);
+ −
+ − if (status != MFW_PHB_OK)
+ − {
+ − phb_list.result = MFW_NO_ENTRY;
+ − TRACE_FUNCTION("bookFindNameInSDNPhonebook()- status error");
+ − }
+ −
+ − /* convert the returned data to manageable information
+ − */
+ −
+ − #ifdef NO_ASCIIZ
+ − //GW Check that conversion returned a valid string
+ − //GW Testing for 0 is stupid but since the macros PASSED and FAILED that are used by the procedure are not in the header (duh!) we can't use them.
+ − /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/
+ − if (mfw_SIM2GsmStr( p_pEntry->name.len, p_pEntry->name.data, MAX_ALPHA_LEN, l_name ) == 0)
+ − memcpy(p_pEntry->name.data, l_name, MAX_ALPHA_LEN);
+ −
+ − p_pEntry->name.data[0] = 0x00;
+ −
+ − #else
+ − bookGsm2Alpha( p_pEntry->name );
+ −
+ − #endif
+ −
+ − /* if we couldn't find any information, null out the return
+ − structure, this will stop people who don't check the return
+ − status from getting sensible information
+ − */
+ − if( phb_list.result != MFW_ENTRY_EXIST )
+ − memset(p_pEntry, 0, sizeof(T_MFW_PHB_ENTRY));
+ −
+ − /* return status depends on result of search
+ − */
+ − return ( phb_list.result == MFW_ENTRY_EXIST );
+ − }
+ −
+ −
+ −
+ −
+ −
+ −
+ − /*******************************************************************************
+ −
+ − $Function: bookSDNDestroy
+ −
+ − $Description: destroys the Service Numbers window
+ −
+ − $Returns: none.
+ −
+ − $Arguments: window, handle of the window to be destroyed
+ −
+ − *******************************************************************************/
+ −
+ − void bookSDNDestroy( MfwHnd window )
+ − {
+ − T_MFW_WIN *win = ((T_MFW_HDR *)window)->data;
+ − tBookStandard *data = (tBookStandard *)win->user;
+ −
+ − TRACE_FUNCTION( "bookSDNDestroy" );
+ −
+ − /* Guard against bad incoming data
+ − */
+ − if ( ! data )
+ − return;
+ −
+ − /* SPR#1428 - SH - New Editor changes */
+ − #ifdef NEW_EDITOR
+ − /* Editor is no longer destroyed with winDelete,
+ − * so destroy it here. */
+ − if (data->editor)
+ − {
+ − ATB_edit_Destroy(data->editor);
+ − data->editor = 0;
+ − }
+ − if (data->entry_data)
+ − {
+ − AUI_entry_Destroy(data->entry_data);
+ − data->entry_data = 0;
+ − }
+ − #endif /* NEW_EDITOR */
+ −
+ − /* Destroy the window using the appropriate method
+ − */
+ − if ( data->phbk->root_win == window )
+ − bookPhonebookDestroy( data->phbk->win );
+ − else
+ − {
+ − /* deleting the window, so make sure we free the memory
+ − */
+ − 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());
+ − }
+ −
+ −
+ − /*******************************************************************************
+ −
+ − End of File
+ −
+ − *******************************************************************************/
+ −