FreeCalypso > hg > leo2moko-debug
diff g23m/condat/ms/src/bmi/mmismssend.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/mmismssend.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,2640 @@ +/******************************************************************************* + + 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 + $Module: SMS + $File: MmiSmsSend.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 25/10/00 + +******************************************************************************** + + Description: + + Implementation template for MMI yyy dynamic menu handling + +******************************************************************************** + + + $History: MmiSmsSend.c + + Jan 18, 2006 REF: OMAPS00049169 x0pleela + Description: MS sends SMS with RP wrong destination address. Anite TC 34.2.8 was failing. + Solution: Removed the code where global variable reply_path_bit was reset to 0 in function + SmsSend_SEND_mfw_cb(), switch case E_SMS_MO_AVAIL + + March 2, 2005 REF: CRR 11536 x0018858 + Description: Reply path not supported while sending a reply. + Solution: Added menu option for the reply path. + + Feb 02, 2005 REF: CRR 28479 xnkulkar + Bug: While saving a SMS, if the user presses LSK while the 'Saved' dialog is displayed, the 'Saved' + dialog doesn't get dismissed. + Solution: Only RSK and Hangup keys dismiss the 'Saved' info screen and all other key presses + are ignored. + + 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 + + Aug 16, 2004 REF: CRR 24281 Deepa M.D + Bug:Go-lite Optimization Remove the unsed variable temp_conv_buffer + Fix:Removed the unused variable static UBYTE temp_conv_buffer[MAX_MSG_LEN_ARRAY]. + + + Sep 01, 2004 REF: CRR 21380 Deepa M.D + Bug:Not getting proper display, When Messages Memory is Full. + Fix:A new Dialog displaying "Full Not Saved" will be displayed, + when memory is full and saving a message fails. + + + + + Jul 13, 2004 REF: CRR 21615 Deepa M.D + Bug:Message once entered into message editor not storing in memory. + Fix:When a SMS is typed in the Editor, it is stored in a temporary buffer. + When the user accesses the editor,the temporary buffer is copied into the + Editor back. + + 25/10/00 Original Condat(UK) BMI version. + + $End + +*******************************************************************************/ + +#define MMI_SMSSEND_C + +#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 "prim.h" + + +#include "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_kbd.h" +/* SPR#1428 - SH - New Editor changes */ +#ifndef NEW_EDITOR +#include "mfw_edt.h" +#endif +#include "mfw_tim.h" +#include "mfw_phb.h" +#include "ksd.h" +#include "psa.h" +#include "mfw_sms.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_str.h" + +#include "dspl.h" + +#include "MmiMain.h" +#include "MmiDummy.h" +#include "MmiMmi.h" +#include "MmiDialogs.h" +#include "MmiLists.h" +#include "MmiMenu.h" +#include "MmiSoftKeys.h" +#include "phb.h" /* FDN */ +#include "MmiBookUtils.h" +#include "MmiBookShared.h" +#include "mmiSmsMenu.h" +#include "mmismssend.h" +#include "mmiSmsIdle.h" +#include "mmiSat_i.h" +#include "mfw_ffs.h" +#ifdef EASY_TEXT_ENABLED +#include "MmiChineseInput.h" +#endif +/* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#else /* NEW_EDITOR */ +#ifdef EASY_TEXT_ENABLED +#include "MmiLatinPredText.h" +#endif /* EASY_TEXT_ENABLED */ +#include "MmiEditor.h" +#endif /* NEW_EDITOR */ + +#include "cus_aci.h" + +#include "prim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + + +#include "mmiColours.h" + +/********************************************************************* +********************************************************************** + + DYNAMIC MENU WINDOW. DECLARATION + +********************************************************************* +**********************************************************************/ +/* MZ 10202, 10758 */ +static UBYTE* msgBuffer = NULL; + +/* General functions */ +static void SmsSend_NBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); +static int SmsSend_standard_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); +/* SPR#1428 - SH - New Editor: no longer required */ +#ifndef NEW_EDITOR +void SmsSend_loadEditDefault(T_EDITOR_DATA * edit_info); +static void SmsSend_loadUCS2EditDefault(T_EDITOR_DATA *editor_data); +#endif + +/* prototyps */ +static T_MFW_HND SmsSend_SEND_create (T_MFW_HND parent); +static void SmsSend_SEND_destroy (T_MFW_HND window); + +// Main callback function of the frame window +static void SmsSend_main_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +// Sub-callback functions of the frame window associated to the different emitters +static void SmsSend_SEND_exec_cb (T_MFW_HND win, USHORT event, void * parameter); +static void SmsSend_PHBK_exec_cb (T_MFW_HND win, USHORT event, void * parameter); +static void SmsSend_TEXTEDIT_exec_cb (T_MFW_HND win, USHORT event, void * parameter); +static void SmsSend_NBEDIT_exec_cb (T_MFW_HND win, USHORT event, void * parameter); +static void SmsSend_CENTREEDIT_exec_cb (T_MFW_HND win, USHORT event, void * parameter); + +// Callback functions of the various editors +static void SmsSend_TEXTEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); +static void SmsSend_NBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); +static void SmsSend_CENTREEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); + +// Callback function for the MFW events +static int SmsSend_SEND_mfw_cb (MfwEvt event, void *data); + +// This function initiate the sending of the SMS +static int SmsSend_send_to_mfw (T_MFW_HND win); +static T_MFW_HND parentWindow4SMS; + +UBYTE SmsSend_set_SrvCntr_number (T_MFW_SMS_INFO *config_data); +UBYTE SmsSend_set_dcs_number (T_MFW_SMS_INFO *config_data); +//Jul 13, 2004 REF: CRR 21615 Deepa M.D +extern UBYTE TempTextBuffer[MAX_MSG_LEN_ARRAY]; + +extern UBYTE reply_path_bit ; + +/*************************************************** +**** **** +**** MANAGEMENT OF SMS OPTIONS **** +**** **** +***************************************************/ + + +typedef struct +{ + /* administrative data */ + + T_MMI_CONTROL mmi_control; + T_MFW_HND win; + SHORT id; + T_MFW_HND parent; + + /* associated handlers */ + + /* !!! **************************************** modify here **************************************** !!!*/ + T_MFW_HND kbd; + T_MFW_HND kbd_long; + T_MFW_HND menu; + /* !!! **************************************** end modify here **************************************** !!! */ + + /* internal data */ + + /* !!! **************************************** modify here **************************************** !!!*/ + BOOL answer; /* TRUE == YES, FALSE == NO */ + T_MFW_HND sms; + T_MFW_HND dialog_win; + T_SEND *parent_data; +/* !!! **************************************** end modify here **************************************** !!! */ +} T_SMSSEND_R_OPT; + +typedef struct +{ + /* administrative data */ + + T_MMI_CONTROL mmi_control; + T_MFW_HND win; + T_MFW_HND parent; + T_MFW_HND child_dialog;/* to keep the window of dialog */ + T_MFW_HND sms_handler; + SHORT id; + /*SPR1991, removed edt_data: not needed*/ + /* will call from idle or phonebook */ +} T_SAVE; + +static T_MFW_HND SmsSend_SAVE_create (T_MFW_HND parent); +static void SmsSend_SAVE_destroy (T_MFW_HND window); +static void SmsSend_SAVE_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +static int SmsSend_SAVE_mfw_cb (MfwEvt event, void *info); + +static T_MFW_HND SmsSend_R_OPT_create (T_MFW_HND parent); +static void SmsSend_R_OPT_destroy (T_MFW_HND window); +static void SmsSend_R_OPT_StandardDialog(T_MFW_HND win, char *text, ULONG duration); +static void SmsSend_R_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +static int SmsSend_R_OPT_win_cb (MfwEvt e, MfwWin *w); +static int SmsSend_R_OPT_mfw_cb (MfwEvt event, void *parameter); +T_MFW_HND SmsSend_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); +static int SmsSend_R_OPT_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); +static void SmsSend_SCNBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); +/* !!! **************************************** modify here **************************************** !!!*/ +static int SmsSend_R_OPT_kbd_cb (MfwEvt e, MfwKbd *k); +static int SmsSend_R_OPT_mnu_cb (MfwEvt e, MfwMnu *m); +//Sep 01, 2004 REF: CRR 21380 Deepa M.D +static UBYTE memfull=FALSE; //Variable used check whether E_SMS_MEM_FULL event has been received. +/* !!! **************************************** end modify here **************************************** !!! */ + + + +/********************************************************************* +********************************************************************** + + DYNAMIC MENU WINDOW. CONTENTS DECLARATION + +********************************************************************* +**********************************************************************/ + +/* !!! **************************************** modify here **************************************** !!!*/ + +static int SmsSend_R_OPTExeSave(MfwMnu* m, MfwMnuItem* i); +static int SmsSend_R_OPTExeSend(MfwMnu* m, MfwMnuItem* i); +static int SmsSend_R_OPTExeDiscard(MfwMnu* m, MfwMnuItem* i); + +static const MfwMnuItem SmsSend_R_OPTItems [] = +{ + {0,0,0,(char *)TxtSave,0,(MenuFunc)SmsSend_R_OPTExeSave,item_flag_none}, + {0,0,0,(char *)TxtSend,0,(MenuFunc)SmsSend_R_OPTExeSend,item_flag_none}, + {0,0,0,(char *)TxtDiscard,0,(MenuFunc)SmsSend_R_OPTExeDiscard,item_flag_none} +}; + +static const MfwMnuAttr SmsSend_R_OPTAttrib = +{ + &SmsSend_R_OPTArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + -1, /* use default font */ + (MfwMnuItem*)SmsSend_R_OPTItems, /* with these items */ + sizeof(SmsSend_R_OPTItems)/sizeof(MfwMnuItem), /* number of items */ + COLOUR_LIST_SMS, TxtNull, NULL, MNUATTRSPARE + +}; + + +/*JVJ SPR1298 added a new output parameter to avoid stack overload */ +void convertToUnicodeForOutput( UBYTE * ipText,UBYTE* outText, USHORT* outLen) +{ + + int i; + UBYTE* temp_conv_buffer = outText; + + if (ipText[0] == 0x80) + { //skip first 2 chars + *outLen = 0; + for (i=0;i<MAX_MSG_LEN/2;i++) + { /*SPR 2175, bytes should not be swapped*/ + temp_conv_buffer[i*2+1] = ipText[i*2+2+1]; + temp_conv_buffer[i*2] =ipText[i*2+2]; + + + + + if ((*outLen ==0) && + (temp_conv_buffer[i*2] == 0x00) && + (temp_conv_buffer[i*2+1] == 0x00)) + *outLen = i*2+2; + } + if (*outLen == 0) + {//Reached end of message without finding 0x0000 - set last word to 0x0000 + *outLen = MAX_MSG_LEN; + temp_conv_buffer[MAX_MSG_LEN-2] = 0x00; + temp_conv_buffer[MAX_MSG_LEN-1] = 0x00; + + + } + return; + + } + else + { + *outLen = strlen((char*)ipText); + /*MC SPR1319, use string's actual length to convert to GSM alphabet*/ + /*SPR2175, use new function for conversion*/ + ATB_convert_String((char*)ipText, MFW_ASCII, *outLen, (char*)temp_conv_buffer, MFW_DCS_8bits,MAX_MSG_LEN , FALSE); + return; + } +} + +/******************************************************************************* + + $Function: SmsSend_R_OPTExeSend + + $Description: Start the creation of the main window for SMS Send. + + $Returns: none + + $Arguments: m - Menu handle + i - Menu item selected. + +*******************************************************************************/ + +static int SmsSend_R_OPTExeSend(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; + /* access to data from parent */ + T_SEND * parent_data = (T_SEND *)data->parent_data; + +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ +#else + T_EDITOR_DATA editor_data; +#endif + + TRACE_EVENT("SmsSend_R_OPTExeSend"); + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, PHNO_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, SMSSEND_ID_NBEDIT, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsSend_NBEDIT_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSend, TxtDelete, TxtSmsEnterNumber, NULL); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNames, TRUE, TxtSoftBack); + AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, parent_data->edt_data.NumberBuffer, PHB_MAX_LEN); + parent_data->number_editor = AUI_edit_Start(parent_data->win, &editor_data); +#else /* NEW_EDITOR */ + + SmsSend_loadEditDefault(&editor_data); + + bookSetEditAttributes( PHNO_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, + (char *) parent_data->edt_data.NumberBuffer, /*MAX_SEARCH_CHAR*/NUMBER_LENGTH, &editor_data.editor_attr); + editor_data.editor_attr.text = (char *)parent_data->edt_data.NumberBuffer; + + editor_data.editor_attr.size = PHB_MAX_LEN; + + editor_data.TextId = TxtSmsEnterNumber; + editor_data.LeftSoftKey = TxtSend; + editor_data.AlternateLeftSoftKey = TxtNames; + editor_data.RightSoftKey = TxtDelete; + editor_data.Identifier = SMSSEND_ID_NBEDIT ; + editor_data.mode = E_EDIT_DIGITS_MODE; + editor_data.Callback = (T_EDIT_CB)SmsSend_NBEDIT_edit_cb; + editor_data.destroyEditor = FALSE; + parent_data->number_editor = editor_start(parent_data->win, &editor_data); /* start the editor */ +#endif /* NEW_EDITOR */ + return 1; // ADDED BY RAVI - 28-11-2005 + +} + +/******************************************************************************* + + $Function: SmsSend_R_OPTExeDiscard + + $Description: + + $Returns: execution status + + $Arguments: m - Menu handle + i - Menu item selected. + +*******************************************************************************/ + +static int SmsSend_R_OPTExeDiscard(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; + /* access to data from parent */ + T_SEND * parent_data = (T_SEND *)data->parent_data; + + TRACE_EVENT("SmsSend_R_OPTExeDiscard"); + + SmsSend_R_OPT_destroy(parent_data->options_win); +#if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + chinese_input_destroy(parent_data->text_editor); + else +#endif + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(parent_data->text_editor); +#else /* NEW_EDITOR */ + editor_destroy(parent_data->text_editor); +#endif /* NEW_EDITOR */ +/*SPR2453 check memory allocated before deallocating it */ + if (msgBuffer !=NULL) + { FREE_MEMORY((void*)msgBuffer,MAX_MSG_LEN_ARRAY); + msgBuffer = NULL; + } + parent_data->text_editor = 0; + SmsSend_SEND_destroy(parent_data->win); + + + return 1; +} + + +/******************************************************************************* + + $Function: SmsSend_R_OPTExeSave + + $Description: called when the user press Call sender in the Option menu + + $Returns: execution status + + $Arguments: m - Menu handle + i - Menu item selected. + +*******************************************************************************/ + +static int SmsSend_R_OPTExeSave(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; + + TRACE_EVENT("SmsRead_R_OPTExeCallSender"); + + if (!smsidle_get_ready_state()) + { + // SMS init processing not ready to access SIM to store the SMS + mmi_dialog_information_screen(win, 0,"Not Ready", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SAVE_NOT_READY); + // Recreate the editor on dialog callback + } + else + //END TB + // Start a save window and provide it a T_SmsUserData structure (in the future, will allow to save easily text but also number...) + { + SmsSend_SAVE_start(data->parent_data->win, &(data->parent_data->edt_data)); + SmsSend_R_OPT_destroy(win); + } + return 1; +} + +/******************************************************************************* + + $Function: SmsSend_OPT_start + + $Description: called when the user press Call sender in the Option menu + + $Returns: execution status + + $Arguments: parent_window -parent window handle + menuAttr - Menu attributes. + +*******************************************************************************/ + +T_MFW_HND SmsSend_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) +{ + T_MFW_HND win; + + TRACE_FUNCTION ("SmsSend_OPT_start()"); + + win = SmsSend_R_OPT_create (parent_window); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, NULL, (void *)menuAttr); + } + return win; +} + +/******************************************************************************* + + $Function: SmsSend_R_OPT_create + + $Description: Create the Option window + + $Returns: mfw window handle + + $Arguments: parent_window -parent window handle + +*******************************************************************************/ + +static T_MFW_HND SmsSend_R_OPT_create(MfwHnd parent_window) +{ + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)ALLOC_MEMORY (sizeof (T_SMSSEND_R_OPT)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("SmsSend_R_OPT_create()"); + + /* + * Create window handler + */ + + data->win = + win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)SmsSend_R_OPT_win_cb); + if (data->win EQ NULL) + { + return NULL; + } + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)SmsSend_R_OPT_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->win)->data; + win->user = (void *)data; + data->parent = parent_window; + + /* + * return window handle + */ + + return data->win; +} + +/******************************************************************************* + + $Function: SmsSend_R_OPT_destroy + + $Description: Destroy the Option window + + $Returns: mfw window handle + + $Arguments: own_window - current window + +*******************************************************************************/ + +static void SmsSend_R_OPT_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_SMSSEND_R_OPT * data; + + TRACE_FUNCTION ("SmsSend_R_OPT_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + data = (T_SMSSEND_R_OPT *)win_data->user; + + if (data) + { + /* + * Delete WIN handler + */ + data->parent_data->options_win = 0; + win_delete (data->win); + + /* + * Free Memory + */ + FREE_MEMORY ((void *)data, sizeof (T_SMSSEND_R_OPT)); + } + else + { + TRACE_EVENT ("SmsSend_R_OPT_destroy() called twice"); + } + } +} + +/******************************************************************************* + + $Function: SmsSend_R_OPT_exec_cb + + $Description: Exec callback function for the Option window + + $Returns: none + + $Arguments: win - current window + event - event id + value - unique id + parameter - optional data. + +*******************************************************************************/ + +void SmsSend_R_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) + /* callback handler for events sent to to trigger execution */ +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; +// T_MFW_HND * l_parent; // RAVI + // SHORT l_id; // RAVI + T_MFW_HDR * parent = data->parent; + T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; + T_SEND * parent_data = (T_SEND *)win_data2->user; + +// T_MFW_EVENT MfwEvents; // RAVI + + TRACE_FUNCTION ("SmsSend_R_OPT_exec_cb()"); + + + switch (event) + { + case E_INIT: + + TRACE_EVENT("SmsSend_R_OPT_exec_cb() Event:5.E_INIT"); + /* initialization of administrative data */ + data->parent_data = parent_data; + data->id = value; + data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)SmsSend_R_OPT_kbd_cb); + data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)SmsSend_R_OPT_kbd_cb); + data->menu = mnuCreate(data->win,(MfwMnuAttr*)&SmsSend_R_OPTAttrib, E_MNU_ESCAPE, (MfwCb)SmsSend_R_OPT_mnu_cb); + mnuLang(data->menu,mainMmiLng); + /* put the (new) dialog window on top of the window stack */ + mnuUnhide(data->menu); + winShow(win); + break; + default: + return; + } +} + +/******************************************************************************* + + $Function: SmsSend_R_OPT_mnu_cb + + $Description: Menu callback function for the Option window + + $Returns: none + + $Arguments: e - event id + m - menu handle +*******************************************************************************/ + +static int SmsSend_R_OPT_mnu_cb (MfwEvt e, MfwMnu *m) + +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; +// T_MFW_HND * l_parent; // RAVI +// SHORT l_id; // RAVI + + TRACE_FUNCTION ("SmsRead_R_OPT_mnu_cb()"); + + switch (e) + { + case E_MNU_ESCAPE: /* back to previous menu */ + SmsSend_R_OPT_destroy(data->win); + break; + default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */ + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: SmsSend_R_OPT_win_cb + + $Description: Window callback function for the Option window + + $Returns: execution status + + $Arguments: e - event id + w - window handle +*******************************************************************************/ + +static int SmsSend_R_OPT_win_cb (MfwEvt e, MfwWin *w) +{ + TRACE_FUNCTION ("SmsSend_R_OPT_win_cb()"); + + switch (e) + { + case MfwWinVisible: /* window is visible */ + dspl_ClearAll(); + displaySoftKeys(TxtSoftSelect,TxtSoftBack); + break; + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: SmsSend_R_OPT_kbd_cb + + $Description: Exec callback function for the Option window + + $Returns: execution status + + $Arguments: e - event id + k - keyboard info +*******************************************************************************/ + +static int SmsSend_R_OPT_kbd_cb (MfwEvt e, MfwKbd *k) + /* SmsRead_R_OPT keyboard event handler */ +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; + + TRACE_FUNCTION ("SmsSend_R_OPT_kbd_cb()"); + + if (e & KEY_LONG) + { + switch (k->code) + { + case KCD_HUP: /* back to previous menu */ + mnuEscape(data->menu); + break; + case KCD_RIGHT: /* Power Down */ + return MFW_EVENT_REJECTED; /* handled by idle */ + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + else + { + switch (k->code) + { + case KCD_MNUUP: /* highlight previous entry */ + mnuUp(data->menu); + break; + case KCD_MNUDOWN: /* highlight next entry */ + mnuDown(data->menu); + break; + case KCD_MNUSELECT: + case KCD_LEFT: /* activate this entry */ + mnuSelect(data->menu); + break; + case KCD_HUP: /* back to previous menu */ + case KCD_RIGHT: /* back to previous menu */ + mnuEscape(data->menu); + break; + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: SmsSend_SEND_start + + $Description: Create SMS send window + + $Returns: execution status + + $Arguments: parent_window - parent window. + UserData - SMS data +*******************************************************************************/ + +T_MFW_HND SmsSend_SEND_start(T_MFW_HND parent_window, T_SmsUserData *UserData) +{ + T_MFW_HND win; + + TRACE_FUNCTION ("SmsSend_SEND_start()"); + parentWindow4SMS = parent_window; + win = SmsSend_SEND_create (parent_window); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, SEND_ID, (void *)UserData); + } + return win; +} + +/******************************************************************************* + + $Function: SmsSend_SEND_create + + $Description: Create a window for entering the text + + $Returns: window handle + + $Arguments: parent_window - parent window. + +*******************************************************************************/ + +static T_MFW_HND SmsSend_SEND_create(MfwHnd parent_window) +{ + T_SEND * data = (T_SEND *)ALLOC_MEMORY (sizeof (T_SEND)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("SmsSend_SEND_create()"); + + // Create window handler + data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL); + if (data->win EQ NULL) + { + return NULL; + } + + // connect the dialog data to the MFW-window + data->mmi_control.dialog = (T_DIALOG_FUNC)SmsSend_main_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->win)->data; + win->user = (MfwUserDataPtr)data; + data->parent = parent_window; + data->id = SEND_ID; + + winShow(data->win); + return data->win; +} + +/******************************************************************************* + + $Function: SmsSend_SEND_destroy + + $Description: Destroy the windows for entering the text + + $Returns: none + + $Arguments: own_window - window. + +*******************************************************************************/ + +static void SmsSend_SEND_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_SEND * data = NULL; + + TRACE_FUNCTION ("SmsSend_SEND_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + if (win_data != NULL) + data = (T_SEND *)win_data->user; + + if (data) + { + + // Delete sms handle + if (data->sms_handler != NULL) + sms_delete(data->sms_handler); + + if (data->child_dialog != NULL) + { + TRACE_EVENT("child_dialog not deleted?"); + } + + if (data->text_editor != NULL) + { + TRACE_EVENT("current_editor not deleted?"); + + + } + + + // Delete WIN handler + win_delete (data->win); + + // Free Memory + FREE_MEMORY ((void *)data, sizeof (T_SEND)); + //win_data->user = NULL; + } + else + { + TRACE_EVENT ("SmsSend_SEND_destroy() called twice"); + } + } +} + +/******************************************************************************* + + $Function: SmsSend_main_exec_cb + + $Description: Main callback handler for events sent to to trigger execution + + $Returns: none + + $Arguments: win - current window + event - event id + identifier - unique id + parameter - optional data. +*******************************************************************************/ + +static void SmsSend_main_exec_cb (T_MFW_HND win, USHORT event, SHORT identifier, void * parameter) +{ + TRACE_FUNCTION ("SmsSend_main_exec_cb()"); + + /* In this field we get the identifier of the window sending the event */ + switch (identifier) + { + case SEND_ID: + case SAVE_ID: // events from the SAVE window are also managed in the SEND callback + case SMSSEND_ID_SAVE_NOT_READY: + SmsSend_SEND_exec_cb(win, event, parameter); + break; + case PHBK_ID: + SmsSend_PHBK_exec_cb(win, event, parameter); + break; + case SMSSEND_ID_TEXTEDIT: + SmsSend_TEXTEDIT_exec_cb(win, event, parameter); + break; + case SMSSEND_ID_SC_NOT_READY: + /* MZ cq11074 delete the info dialog window. */ + SmsSend_SEND_destroy(win); + break; + case SMSSEND_ID_NBEDIT: + SmsSend_NBEDIT_exec_cb(win, event, parameter); + break; + case SMSSEND_ID_CENTREEDIT: + SmsSend_CENTREEDIT_exec_cb(win, event, parameter); + break; + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +/******************************************************************************* + + $Function: SmsSend_SEND_exec_cb + + $Description: Callback handler for events sent by the window itself + + $Returns: none + + $Arguments: win - current window + event - event id + parameter - optional data. +*******************************************************************************/ + +static void SmsSend_SEND_exec_cb(T_MFW_HND win, USHORT event, void *parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + T_MFW_SMS_INFO sms_parameter; + T_MFW_EVENT MfwEvents; + // T_DISPLAY_DATA display_info; // RAVI + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; + USHORT size; +#else /* NEW_EDITOR */ + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + + TRACE_FUNCTION ("SmsSend_SEND_exec_cb()"); + + switch (event) + { + case E_INIT: + /* Create a sms handler to receive events */ + MfwEvents = E_SMS_ERR | E_SMS_MO_AVAIL; + data->sms_handler = sms_create(data->win,MfwEvents,(MfwCb)SmsSend_SEND_mfw_cb); + data->child_dialog = NULL; + + /* store NUMBER and TEXT */ + memcpy(&(data->edt_data), (T_SmsUserData *)parameter, sizeof(T_SmsUserData)); + /* in case of reply the sms we have to + use the service center number from the + caller + */ + TRACE_EVENT_P1("data->edt_data.called_from_reply_item is %d",data->edt_data.called_from_reply_item); + if (data->edt_data.called_from_reply_item EQ FALSE) + { + TRACE_EVENT("RP false"); + // The SMS center is initialized to '\0' + data->edt_data.CentreBuffer[0] = '\0'; + } + else + { + TRACE_EVENT("RP true"); + } + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR +#if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) + /* If chinese is selected and we're opening up a new message + * or a unicode message, use the chinese editor */ + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE + && (data->edt_data.TextBuffer[0]==0x00 || data->edt_data.TextBuffer[0] ==0x80)) + { + T_CHINESE_DATA chinese_data; + + chinese_data.TextString = (char*) data->edt_data.TextBuffer; + + chinese_data.TextString[0] = 0x80; + chinese_data.TextString[1] = MAX_MSG_LEN; + chinese_data.Callback = (T_AUI_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; + chinese_data.Identifier = SMSSEND_ID_TEXTEDIT ; + chinese_data.LeftSoftKey = TxtSoftOptions; + chinese_data.DestroyEditor = FALSE; + if(FFS_flashData.ConcatenateStatus == TRUE) + chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_CHI)/2 - 1); + else + chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_SGL_CHI)/2 - 1); + data->text_editor = chinese_input(win, &chinese_data); + } + else +#endif /* CHINESE_MMI && EASY_TEXT_ENABLED */ + /* We're opening up an ascii or unicode latin editor */ + { + + AUI_edit_SetDefault(&editor_data); + + /* Set the appropriate mode if easy text is enabled */ +#ifdef EASY_TEXT_ENABLED + AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA | ED_MODE_PREDTEXT, ED_CURSOR_BAR); +#else /* EASY_TEXT_ENABLED */ + AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR); +#endif /* EASY_TEXT_ENABLED */ + + /* Check if concatenated SMS is enabled */ + + if(FFS_flashData.ConcatenateStatus == TRUE) + size = MAX_MSG_LEN; + else + size = MAX_MSG_LEN_SGL; + + /* Set the DCS type of the message */ + + if (data->edt_data.TextBuffer[0]==0x80) + { + TRACE_EVENT("Unicode SMS message starting 0x80"); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, &data->edt_data.TextBuffer[2], size/2); + } + else + { + TRACE_EVENT("Normal SMS message"); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->edt_data.TextBuffer, size); + } + + AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, SMSSEND_ID_TEXTEDIT, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsSend_TEXTEDIT_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOptions, TxtDelete, NULL, NULL); + AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack); + + data->text_editor = AUI_edit_Start(win,&editor_data); /* start the editor */ + } +#else /* NEW_EDITOR */ + + /* END OF NEW EDITOR CODE */ + + /*SPR 1434*/ +#if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) +/*MC SPR1242, merged section in from b-sample build*/ + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { T_CHINESE_DATA chinese_data; + + chinese_data.TextString = (char*) data->edt_data.TextBuffer; + /*if empty or unicode string, add unicode tag*/ + if(chinese_data.TextString[0] ==0x00 || chinese_data.TextString[0] ==0x80) + { chinese_data.TextString[0] = 0x80; + chinese_data.TextString[1] = MAX_MSG_LEN; + + chinese_data.Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; + chinese_data.Identifier = SMSSEND_ID_TEXTEDIT ; + chinese_data.LeftSoftKey = TxtSoftOptions; + chinese_data.DestroyEditor = FALSE; + if(FFS_flashData.ConcatenateStatus == TRUE) + chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_CHI)/2 - 1); + else + chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_SGL_CHI)/2 - 1); + data->text_editor = chinese_input(win, &chinese_data); + + } + else/*if ascii string use ASCII editor rather than converting to unicode, MC, SPR 1292*/ + { SmsSend_loadEditDefault(&editor_data); + editor_data.editor_attr.text = (char *)data->edt_data.TextBuffer; + //1227 - API - 05/10/02 - Size of Editor dependent on whether Conc_Switch is TRUE or FALSE + if(FFS_flashData.ConcatenateStatus == TRUE) + editor_data.editor_attr.size = MAX_MSG_LEN; + else + editor_data.editor_attr.size = MAX_MSG_LEN_SGL; + editor_data.min_enter = 0; + editor_data.LeftSoftKey = TxtSoftOptions; + editor_data.AlternateLeftSoftKey = TxtSoftOptions; + editor_data.RightSoftKey = TxtDelete; + editor_data.Identifier = SMSSEND_ID_TEXTEDIT ; + editor_data.Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; + editor_data.destroyEditor = FALSE; + data->text_editor = editor_start(win,&editor_data); /* start the editor */ + } + } +else +#endif /* CHINESE_MMI && EASY_TEXT_ENABLED */ + +{ +#ifdef EASY_TEXT_ENABLED + editor_data.hide = FALSE; + editor_data.TextId = '\0'; + editor_data.Identifier = 0; + editor_data.TextString = NULL; + editor_data.timeout = FOREVER; // Avoid to return empty strings + editor_data.mode = ALPHA_MODE; + editor_attr_init_pred(&editor_data.editor_attr, ZONE_FULL_SK_TITLE, edtCurBar1, NULL, (char *)data->edt_data.TextBuffer, MAX_MSG_LEN, COLOUR_EDITOR); +#else /* EASY_TEXT_ENABLED */ + SmsSend_loadEditDefault(&editor_data); + editor_attr_init(&editor_data.editor_attr, ZONE_FULL_SK_TITLE, edtCurBar1, NULL, (char *)data->edt_data.TextBuffer, MAX_MSG_LEN, COLOUR_EDITOR); +#endif /* EASY_TEXT_ENABLED */ + + editor_data.editor_attr.text = (char *)data->edt_data.TextBuffer; + //1227 - API - 05/10/02 - Size of Editor dependent on whether Conc_Switch is TRUE or FALSE + if(FFS_flashData.ConcatenateStatus == TRUE) + editor_data.editor_attr.size = MAX_MSG_LEN; + else + editor_data.editor_attr.size = MAX_MSG_LEN_SGL; + editor_data.min_enter = 0; + editor_data.LeftSoftKey = TxtSoftOptions; + editor_data.AlternateLeftSoftKey = TxtSoftOptions; + editor_data.RightSoftKey = TxtDelete; + + editor_data.Identifier = SMSSEND_ID_TEXTEDIT ; + editor_data.Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; + editor_data.destroyEditor = FALSE; + data->text_editor = editor_start(win,&editor_data); /* start the editor */ +} +#endif /* NEW_EDITOR */ + + /* Marcus: Issue 1170: 07/10/2002: Start */ + /* + * Set whether status requests are to be indicated according to the + * value of the srr field of the T_MFW_SMS_INFO structure. + */ + SmsSend_get_config_data(&sms_parameter); + + switch (sms_parameter.srr) + { + case SMS_NOT_REQUESTED_SRR: + sms_set_mt_ind(MT_IND_SRR_OFF); + break; + + case SMS_REQUESTED_SRR: + sms_set_mt_ind(MT_IND_SRR_ON); + break; + + default: + TRACE_EVENT_P1("default: sms_parameter.srr = %d", sms_parameter.srr); + break; + } + /* Marcus: Issue 1170: 07/10/2002: Start */ + + break; + case E_RETURN: + break; + case E_EXIT: + if(data->sc_number_editor != NULL) + { + + //GW Read config data - then set dcs parameter + SmsSend_get_config_data(&sms_parameter); + + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { //We have a chinese text message - set dcs parameter to + sms_parameter.dcs = MFW_DCS_UCS2; + } + else + { + sms_parameter.dcs = MFW_DCS_7bits; + + } + + // copy the SC number into the sms_parameter variable. + strcpy((char*)sms_parameter.sc_addr,(char*)data->edt_data.CentreBuffer); + // store the Service center number into the SIM. + SmsSend_set_SrvCntr_number (&sms_parameter); + SmsSend_set_dcs_number (&sms_parameter); + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->sc_number_editor); +#else /* NEW_EDITOR */ + editor_destroy(data->sc_number_editor); +#endif /* NEW_EDITOR */ + data->sc_number_editor = NULL; + } + + break; + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +/******************************************************************************* + + $Function: SmsSend_PHBK_exec_cb + + $Description: Callback handler for events sent by the phonebook window + + $Returns: none + + $Arguments: win - current window + event - event id + parameter - optional data. +*******************************************************************************/ + +static void SmsSend_PHBK_exec_cb(T_MFW_HND win, USHORT event, void *parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + T_ATB_TEXT text; /* Used to insert phone numbers into editors */ +#endif + + TRACE_FUNCTION ("SmsSend_PHBK_exec_cb()"); + + switch (event) + { + /* SPR#1428 - SH - New Editor changes. Insert phone number into editor */ +#ifdef NEW_EDITOR + case SMS_PHBK_NUMBER: /* Normal phone number */ + case SMSSC_PHBK_NUMBER: /* Service centre number */ + text.dcs = ATB_DCS_ASCII; + text.len = strlen((char *)parameter); + text.data = (UBYTE *)parameter; + SEND_EVENT(data->number_editor, E_ED_INSERT, 0, (void *)&text); + break; +#else /* NEW_EDITOR */ + case SMS_PHBK_NUMBER: + memcpy(data->edt_data.NumberBuffer, (char *)parameter, MINIMUM(sizeof(data->edt_data.NumberBuffer) - 1, strlen((char *)parameter)+1)); + break; + /* SPR#1428 - SH - Insert service centre number into editor */ + case SMSSC_PHBK_NUMBER: + memcpy(data->edt_data.CentreBuffer, (char *)parameter, MINIMUM(sizeof(data->edt_data.CentreBuffer) - 1, strlen((char *)parameter)+1)); + break; +#endif /* NEW_EDITOR */ + default: + TRACE_EVENT("Err: Default"); + break; + } +} + + +/******************************************************************************* + + $Function: SmsSend_TEXTEDIT_exec_cb + + $Description: Callback handler for events sent by the TEXTEDIT editor + + $Returns: none + + $Arguments: win - current window + event - event id + parameter - optional data. +*******************************************************************************/ + +static void SmsSend_TEXTEDIT_exec_cb(T_MFW_HND win, USHORT event, void *parameter) +{ + TRACE_FUNCTION ("SmsSend_TEXTEDIT_exec_cb()"); + + switch (event) + { + case E_RETURN: + // Destroy itself + SmsSend_SEND_destroy(win); + break; + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +/******************************************************************************* + + $Function: SmsSend_NBEDIT_exec_cb + + $Description: Callback handler for events sent by the NBEDIT editor + + $Returns: none + + $Arguments: win - current window + event - event id + parameter - optional data. +*******************************************************************************/ + +static void SmsSend_NBEDIT_exec_cb(T_MFW_HND win, USHORT event, void *parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + T_MFW_SMS_INFO sms_parameter; +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ +#else + T_EDITOR_DATA editor_data; +#endif + + TRACE_FUNCTION ("SmsSend_NBEDIT_exec_cb()"); + + switch (event) + { + case E_INIT: + if ((phb_get_mode() EQ PHB_RESTRICTED) + && (phb_check_number(data->edt_data.NumberBuffer) EQ MFW_PHB_FAIL)) + { + mmi_dialog_information_screen(win,TxtNotImplemented, "NOT ALLOWED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_ALLOWED); + } + else + { + + if (!smsidle_get_ready_state()) + { + // SMS init processing not ready to access SIM to store the SMS + /* MZ cq11074 do not invoke the editor until SMS Service Centre number has been read, + display info dialog. */ + mmi_dialog_information_screen(win,TxtPleaseWait, "NOT READY", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SC_NOT_READY ); + return; + // Recreate the editor on dialog callback + } + else + { + //END TB + // First check if the SMS center is specified + SmsSend_get_config_data(&sms_parameter); + + if(sms_parameter.sc_addr[0] EQ '\0') + { + memset(data->edt_data.CentreBuffer,0,NUMBER_LENGTH); + } + else + { + strncpy((char *)data->edt_data.CentreBuffer, (char *)sms_parameter.sc_addr, NUMBER_LENGTH); + } + } + } + + /* SPR#1428 - SH - New Editor changes */ + +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, CENTRE_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsSend_SCNBEDIT_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtServiceCentre, NULL); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNames, TRUE, TxtSoftBack); + AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->edt_data.CentreBuffer, NUMBER_LENGTH); + data->number_editor = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + + SmsSend_loadEditDefault(&editor_data); + + bookSetEditAttributes( CENTRE_EDITOR, COLOUR_EDITOR_XX,0,edtCurBar1, 0, + (char *) data->edt_data.CentreBuffer, NUMBER_LENGTH, &editor_data.editor_attr); + + editor_data.TextId = TxtServiceCentre; + editor_data.editor_attr.text = (char *)data->edt_data.CentreBuffer; + editor_data.editor_attr.size = NUMBER_LENGTH; + editor_data.LeftSoftKey = TxtSoftOK; + editor_data.AlternateLeftSoftKey = TxtNames; + editor_data.RightSoftKey = TxtDelete; + editor_data.Identifier = NULL; + editor_data.Callback = (T_EDIT_CB)SmsSend_SCNBEDIT_edit_cb; + editor_data.mode = E_EDIT_DIGITS_MODE; + editor_data.destroyEditor = FALSE; + data->number_editor = editor_start(data->win,&editor_data); +#endif /* NEW_EDITOR */ + + /* start the editor */ + + break; + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +/******************************************************************************* + + $Function: SmsSend_CENTREEDIT_exec_cb + + $Description: Callback handler for events sent by the CENTREEDIT editor + + $Returns: none + + $Arguments: win - current window + event - event id + parameter - optional data. +*******************************************************************************/ + +static void SmsSend_CENTREEDIT_exec_cb(T_MFW_HND win, USHORT event, void *parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ +#else + T_EDITOR_DATA editor_data; +#endif + + TRACE_FUNCTION ("SmsSend_CENTREEDIT_exec_cb()"); + + switch (event) + { + case E_INIT: + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, CENTRE_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, *(USHORT*)parameter, TRUE, FOREVER, (T_AUI_EDIT_CB)SmsSend_CENTREEDIT_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtServiceCentre, NULL); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->edt_data.CentreBuffer, PHB_MAX_LEN); + data->sc_number_editor = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + + SmsSend_loadEditDefault(&editor_data); + bookSetEditAttributes( CENTRE_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, + (char *) data->edt_data.CentreBuffer, NUMBER_LENGTH, &editor_data.editor_attr); + + editor_data.TextId = TxtServiceCentre; + editor_data.editor_attr.text = (char *)data->edt_data.CentreBuffer; + editor_data.editor_attr.size = PHB_MAX_LEN; + editor_data.LeftSoftKey = TxtSoftOK; + editor_data.RightSoftKey = TxtDelete; + editor_data.Identifier = *(USHORT*)parameter; + editor_data.Callback = (T_EDIT_CB)SmsSend_CENTREEDIT_edit_cb; + editor_data.mode = E_EDIT_DIGITS_MODE; + editor_data.destroyEditor = TRUE ; + data->sc_number_editor = editor_start(data->win,&editor_data); + /* start the Service Centre Number editor */ +#endif /* NEW_EDITOR */ + break; + + case E_RETURN: + + break; + default: + TRACE_EVENT("Err: Default"); + return; + } +} + +/******************************************************************************* + + $Function: SmsSend_TEXTEDIT_edit_cb + + $Description: Callback function for the text editor + + $Returns: none + + $Arguments: win - current window + Identifier - unique id + reason - event cause +*******************************************************************************/ + +static void SmsSend_TEXTEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + + TRACE_FUNCTION ("SmsSend_TEXTEDIT_edit_cb()"); + + // Jul 13, 2004 REF: CRR 21615 Deepa M.D + //Copy the sms content from the editor buffer into the temporary buffer. + memcpy(TempTextBuffer,data->edt_data.TextBuffer,MAX_MSG_LEN); + + switch (reason) + { + case INFO_KCD_ALTERNATELEFT: + case INFO_KCD_LEFT: + data->options_win = SmsSend_OPT_start(win,(MfwMnuAttr*)&SmsSend_R_OPTAttrib); + + /* Create number editor: + -the editor min length is 1 + */ + break; + + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + // Commit suicide so come back to previous menu +#if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + chinese_input_destroy(data->text_editor); + else +#endif + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->text_editor); +#else /* NEW_EDITOR */ + editor_destroy(data->text_editor); +#endif /* NEW_EDITOR */ + + data->text_editor = 0; + SmsSend_SEND_destroy(data->win); + break; + + default: + TRACE_EVENT("Err: Default"); + break; + } +} + + +/******************************************************************************* + + $Function: SmsSend_NBEDIT_edit_cb + + $Description: Callback function for the number editor + + $Returns: none + + $Arguments: win - current window + Identifier - unique id + reason - event cause +*******************************************************************************/ + +static void SmsSend_NBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + + T_MFW_SMS_INFO sms_parameter; + USHORT parameter; + + + TRACE_FUNCTION ("SmsSend_NBEDIT_edit_cb()"); + + + switch (reason) + { + case INFO_KCD_LEFT: + // Check if we can go to the next stage + if ((phb_get_mode() EQ PHB_RESTRICTED) + && (phb_check_number(data->edt_data.NumberBuffer) EQ MFW_PHB_FAIL)) + { + + mmi_dialog_information_screen(win,TxtNotImplemented, "NOT ALLOWED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_ALLOWED); + + } + else + { + + if (!smsidle_get_ready_state()) + { + // SMS init processing not ready to access SIM to store the SMS + mmi_dialog_information_screen(win,TxtPleaseWait, "NOT READY", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SC_NOT_READY); + // Recreate the editor on dialog callback + } + else + { + //END TB + // First check if the SMS center is specified + SmsSend_get_config_data(&sms_parameter); + + if(sms_parameter.sc_addr[0] EQ '\0') + { + //setup identifier value. + parameter = SMSSEND_ID_CENTREEDIT; + SmsSend_CENTREEDIT_exec_cb(win, E_INIT,(void*)¶meter); + } + else + { + /*NM FTA 34.2.8*/ + if (data->edt_data.called_from_reply_item EQ FALSE) + { + TRACE_EVENT("take the own serviceCenternum"); + strcpy((char *)data->edt_data.CentreBuffer, (char *)sms_parameter.sc_addr); + + { + /***************************Go-lite Optimization changes Start***********************/ + // Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("serviceNr:%s",data->edt_data.CentreBuffer); + /***************************Go-lite Optimization changes end***********************/ + } + + } + else + { + TRACE_EVENT("from the caller, reply"); + + /* in case of reply the sms, we took already the + the service center number from the caller !!!*/ + + { + /***************************Go-lite Optimization changes Start***********************/ + // Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("serviceNr:%s",data->edt_data.CentreBuffer); + /***************************Go-lite Optimization changes end***********************/ + } + } + /*NM FTA 34.2.8*/ + SmsSend_send_to_mfw(win); + } + } + } + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->number_editor); +#else /* NEW_EDITOR */ + editor_destroy(data->number_editor); +#endif /* NEW_EDITOR */ + + data->number_editor = 0; + SmsSend_R_OPT_destroy(data->options_win); + + break; + + case INFO_KCD_ALTERNATELEFT: + bookPhonebookStart(win, PhbkFromSms); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->number_editor); +#else /* NEW_EDITOR */ + editor_destroy(data->number_editor); +#endif /* NEW_EDITOR */ + data->number_editor = 0; + break; + + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +/******************************************************************************* + + $Function: SmsSend_CENTREEDIT_edit_cb + + $Description: Callback function for the center number editor + + $Returns: none + + $Arguments: win - current window + Identifier - unique id + reason - event cause +*******************************************************************************/ + +static void SmsSend_CENTREEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) +{ +// T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; // RAVI +// T_SEND * data = (T_SEND *)win_data->user; // RAVI + + TRACE_FUNCTION ("SmsSend_CENTREEDIT_edit_cb()"); + switch (reason) + { + case INFO_KCD_LEFT: + TRACE_EVENT("SmsSend_CENTREEDIT_edit_cb,INFO_KCD_LEFT "); + if (Identifier==SMSSEND_ID_CENTREEDIT) + { + TRACE_EVENT("SmsSend_CENTREEDIT_edit_cb,INFO_KCD_LEFT Send to mfw "); + + //Submit the SMS message to the service centre. + SmsSend_send_to_mfw(win); + } + break; + + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + /* send an event that will lead to the display of the number edition window */ + SEND_EVENT (win, E_RETURN, SMSSEND_ID_CENTREEDIT, NULL); + break; + default: + + break; + } +} + +/******************************************************************************* + + $Function: SmsSend_SEND_mfw_cb + + $Description: Callback functyion for handling SMS events from the MFW. + + $Returns: execution status + + $Arguments: event - window event id + info - optional info + reason - event cause +*******************************************************************************/ + +static int SmsSend_SEND_mfw_cb (MfwEvt event, void *info) +{ + /* get the top window*/ + T_MFW_HND win = mfw_parent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SEND * data = (T_SEND *)win_data->user; + + + TRACE_FUNCTION ("SmsSend_SEND_mfw_cb()"); + + switch (event) + { + case E_SMS_MO_AVAIL: + TRACE_EVENT ("Sent was successful -> ok"); + /* Sent was successful */ + /* abort the current Dialog "Please wait" */ + if (data->child_dialog != NULL) + { + SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); + data->child_dialog = NULL; + } + //GW Display sent not send + /* FTA 34.2.2 - CQ 101443 - API & MZ pass NULL instead of win to the dialog window*/ + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //Second string is same as the TextId .Hence passed NULL. + mmi_dialog_information_screen(NULL,TxtSent, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SENT); + data->id = SMSSEND_ID_SENT; + + break; + + case E_SMS_ERR: + // Waiting dialog is destroyed + if (data->child_dialog != NULL) + { + SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); + data->child_dialog = NULL; + } + // and the status dialog is displayed during 3 secs. + /* FTA 34.2.2 - CQ 101443 - API & MZ pass NULL instead of win to the dialog window */ + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //Second string is same as the TextId .Hence passed NULL. + mmi_dialog_information_screen(NULL,TxtNotSent, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SENT); + data->id = SMSSEND_ID_NOT_SENT; //TB3 + break; + + default: + TRACE_EVENT("Err: default"); + return 0; + } + + return 1; +} + +/******************************************************************************* + + $Function: SmsSend_SAVE_start + + $Description: Create the Save SMS text window. + + $Returns: mfw window handle + + $Arguments: parent_window - parent window + UserData - SMS info + +*******************************************************************************/ + +T_MFW_HND SmsSend_SAVE_start(T_MFW_HND parent_window, T_SmsUserData *UserData) +{ + T_MFW_HND win; + + TRACE_FUNCTION ("SmsSend_SAVE_start()"); + + win = SmsSend_SAVE_create (parent_window); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, (void *)UserData); + } + return win; +} + +/******************************************************************************* + + $Function: SmsSend_SAVE_create + + $Description: Create a window for info dialog + + $Returns: mfw window handle + + $Arguments: parent_window - parent window + +*******************************************************************************/ + +static T_MFW_HND SmsSend_SAVE_create(MfwHnd parent_window) +{ + T_SAVE * data = (T_SAVE *)ALLOC_MEMORY (sizeof (T_SAVE)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("SmsSend_SAVE_create()"); + + /* + * Create window handler + */ + data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL); + if (data->win EQ NULL) + { + return NULL; + } + + /* + * connect the dialog data to the MFW-window + */ + data->mmi_control.dialog = (T_DIALOG_FUNC)SmsSend_SAVE_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->win)->data; + win->user = (MfwUserDataPtr)data; + data->parent = parent_window; + data->id = SAVE_ID; + + winShow(data->win); + return data->win; +} + +/******************************************************************************* + + $Function: SmsSend_SAVE_destroy + + $Description: Destroy the windows for info dialog + + $Returns: none + + $Arguments: own_window - current window + +*******************************************************************************/ + +static void SmsSend_SAVE_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_SAVE * data = NULL; + + TRACE_FUNCTION ("SmsSend_SAVE_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + if (win_data) + data = (T_SAVE *)win_data->user; + + if (data) + { + // Delete sms handle + if (data->sms_handler != NULL) + sms_delete(data->sms_handler); + + if (data->child_dialog != NULL) + { + TRACE_EVENT("child_dialog not deleted?"); + } + + // Delete WIN handler + win_delete (data->win); + + // Free Memory + FREE_MEMORY ((void *)data, sizeof (T_SAVE)); + + } + else + { + TRACE_EVENT ("SmsSend_SAVE_destroy() called twice"); + } + } +} + +/******************************************************************************* + + $Function: SmsSend_SAVE_exec_cb + + $Description: Callback handler for events sent to to trigger execution + + $Returns: none + + $Arguments: own_window - current window + +*******************************************************************************/ + +void SmsSend_SAVE_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SAVE * data = (T_SAVE *)win_data->user; + T_MFW_SMS_INFO sms_parameter; + USHORT outLen; + T_MFW store_status; + T_SmsUserData* message_parameter;/*SPR1991, pointer to message text, dest number*/ + /*JVJ SPR1298 made dynamic to avoid stack overload in the function convertToUnicodeForOutput*/ + /* MZ 10202 Removed memory declaration and allocation*/ + + TRACE_FUNCTION ("SmsSend_SAVE_exec_cb()"); + + switch (event) + { + case E_INIT: + + /*MZ issue 10202 only alloc memory when you need it */ + if (msgBuffer ==NULL) + msgBuffer = (UBYTE*)ALLOC_MEMORY(MAX_MSG_LEN_ARRAY); + + data->child_dialog = NULL; + + /* Create a sms handler to receive events */ + data->sms_handler = sms_create(data->win, + E_SMS_SAVE_AVAIL | E_SMS_ERR | E_SMS_MEM_FULL + ,(MfwCb)SmsSend_SAVE_mfw_cb); + + // + /*SPR1991, set local pointer to passed parameter, rather than copying data and + using up more dynamic memory*/ + message_parameter = parameter; + if (message_parameter->TextBuffer[0] == 0x80) + { //String is unicode - + sms_parameter.dcs = MFW_DCS_UCS2; + } + else + { + sms_parameter.dcs = MFW_DCS_7bits; + } + + SmsSend_set_dcs_number (&sms_parameter); + + #ifdef NO_ASCIIZ + { + // have to add this , later + convertToUnicodeForOutput(message_parameter->TextBuffer,msgBuffer, &outLen); + TRACE_EVENT_P1("Save SMS, length: %d", outLen); + + store_status = sms_store(MFW_SMS_SUBMIT, (char*)message_parameter->NumberBuffer, msgBuffer, outLen, NULL); + } + #else + { + convertToUnicodeForOutput(data->edt_data.TextBuffer,msgBuffer, &outLen); + store_status = sms_store(MFW_SMS_SUBMIT, (char*)message_parameter->NumberBuffer, msgBuffer, outLen, NULL); + // sbh - added length to the above function call, since '@' characters stored as NULL & will stop + // strlen from working properly. + } + #endif + + /* display "Please wait" for save sms */ + if (store_status EQ MFW_SMS_OK) + { + TRACE_EVENT ("Save operation -> ok"); + /* show now to user "Please wait" for save*/ + // Do not start please wait if ever the MFW result event as already been received + if (data->child_dialog == NULL) + { + // Feb 02, 2005 REF: CRR 28479 xnkulkar + // Call function "mmi_dialog_information_screen_save_sms" which has only + // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL + //data->child_dialog = mmi_dialog_information_screen(win,TxtPleaseWait, "SAVING", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_WAIT_SAVE); + data->child_dialog = mmi_dialog_information_screen_save_sms(win,TxtPleaseWait, "SAVING", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_WAIT_SAVE); + } + + } + else + { + TRACE_EVENT ("Save operation -> failed"); + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //If E_SMS_MEM_FULL event has already been received, then destroy the Messagefull Dialog + //and dispaly a new dialog "Full NOT SAVED". + if(memfull==TRUE) + { + // Feb 02, 2005 REF: CRR 28479 xnkulkar + // Call function "mmi_dialog_information_screen_save_sms" which has only + // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL + //mmi_dialog_information_screen(win, TxtFull,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); + mmi_dialog_information_screen_save_sms(win, TxtFull,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); + memfull=FALSE;//Set the memful flag to False. + + } + // If the saving message failed due to other reason than memory full, display this message + else if (data->child_dialog == NULL) + { + // Feb 02, 2005 REF: CRR 28479 xnkulkar + // Call function "mmi_dialog_information_screen_save_sms" which has only + // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL + //mmi_dialog_information_screen(win, TxtFailed,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); + mmi_dialog_information_screen_save_sms(win, TxtFailed,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); + } + + } + /*SPr 1991, check memory allocated before deallocatting it*/ + /* MZ 10202 Remove the memory deallocation until later.*/ + + break; + + default: + TRACE_EVENT("Err: default"); + break; + } + + return; +} + +/******************************************************************************* + + $Function: SmsSend_SAVE_mfw_cb + + $Description: Handles SMS events from the MFW. + + $Returns: none + + $Arguments: event - event id + info - optional info + +*******************************************************************************/ + +static int SmsSend_SAVE_mfw_cb (MfwEvt event, void *info) +{ + /* get the top window*/ + T_MFW_HND win = mfw_parent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SAVE * data = (T_SAVE *)win_data->user; + +// T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("SmsSend_SAVE_mfw_cb"); + + switch (event) + { + /* Save is successful */ + case E_SMS_SAVE_AVAIL: + // Waiting dialog is destroyed + + if (data->child_dialog != NULL) + { + SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); + data->child_dialog = NULL; + } + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //Second string is same as the TextId .Hence passed NULL. + + // Feb 02, 2005 REF: CRR 28479 xnkulkar + // Call function "mmi_dialog_information_screen_save_sms" which has only + // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL + + // mmi_dialog_information_screen(win, TxtSaved,NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SAVED); + mmi_dialog_information_screen_save_sms(win, TxtSaved,NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SAVED); + + break; + + case E_SMS_MEM_FULL: + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //Flag to check E_SMS_MEM_FULL event has already been received. + memfull=TRUE; + TRACE_EVENT ("Memory for sms save is full"); + + if (data->child_dialog != NULL) + { + // Waiting dialog is destroyed + SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); + data->child_dialog = NULL; + } + // and the status dialog is displayed during 3 secs. + // set data->child_dialog as message received before sms_store is ended + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //Second string is same as the TextId .Hence passed NULL. + mmi_dialog_information_screen(win,TxtFull, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_LIST_FULL); + return MFW_EVENT_PASSED; /*SPR 2640, pass event along to idle screen*/ + // break; // RAVI + + case E_SMS_ERR: + TRACE_EVENT ("Save sms failed -> nok"); + + if (data->child_dialog != NULL) + { + // Waiting dialog is destroyed + SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); + data->child_dialog = NULL; + } + // and the status dialog is displayed during 3 secs. + // set data->child_dialog if message received before sms_store is ended + mmi_dialog_information_screen(win,TxtFailed, "NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); + break; + + default: + TRACE_EVENT("Err: default"); + return 0; + } + return 1; +} + +/******************************************************************************* + + $Function: SmsSend_send_to_mfw + + $Description: This function sends a SMS message. + + $Returns: execution status + + $Arguments: event - current window + + $History + GW 09/10/01 - Added code to convert unicode strings from 8 bits to 7 bits. + +*******************************************************************************/ + +static int SmsSend_send_to_mfw (T_MFW_HND win) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SEND * data = (T_SEND *)win_data->user; + T_MFW submit_status; /* Result of SMS send operation. */ + T_MFW_SMS_INFO sms_parameter; + + USHORT outLen; + + /*SPR2453 only alloc memory when you need it */ + if (msgBuffer ==NULL) + msgBuffer = (UBYTE*)ALLOC_MEMORY(MAX_MSG_LEN_ARRAY); + TRACE_FUNCTION ("SmsSend_send_to_mfw()"); + if (data->edt_data.TextBuffer[0] == 0x80) + { //String is unicode - + sms_parameter.dcs = MFW_DCS_UCS2; + } + else + { + sms_parameter.dcs = MFW_DCS_7bits; + } + + SmsSend_set_dcs_number (&sms_parameter); + /* Send the SMS */ + + + + #ifdef NO_ASCIIZ + { + + convertToUnicodeForOutput(data->edt_data.TextBuffer,msgBuffer, &outLen); + + TRACE_EVENT_P1("Send SMS, length: %d", outLen); + submit_status = sms_submit( MFW_SMS_SUBMIT, /* type of the message*/ + (char *)data->edt_data.NumberBuffer, /* dest. address */ + msgBuffer, /* sms message */ + outLen, /* lenght of message */ + (char *)data->edt_data.CentreBuffer);/* sevice center num. */ + } + #else + { + convertToUnicodeForOutput(data->edt_data.TextBuffer,msgBuffer,&outLen); + #if defined (FF_WAP) && defined (FF_GPF_TCPIP) + + submit_status = sms_submit( MFW_SMS_SUBMIT, /* type of the message*/ + (char *)data->edt_data.NumberBuffer, /* dest. address */ + NULL, /* don't specify toa for now */ + msgBuffer, /* sms message */ + outLen, /* SH - added this, see function definition */ + (char *)data->edt_data.CentreBuffer, /* sevice center num. */ + NULL); /* don't specify tosca for now */ + #else + submit_status = sms_submit( MFW_SMS_SUBMIT, /* type of the message*/ + (char *)data->edt_data.NumberBuffer, /* dest. address */ + msgBuffer, /* sms message */ + outLen, // sbh - added this, see function definition + (char *)data->edt_data.CentreBuffer);/* sevice center num. */ + + + #endif + + } + #endif + + + + /* display "Please wait" for sent sms */ + if (submit_status EQ MFW_SMS_OK) + { + T_DISPLAY_DATA display_info; + + TRACE_EVENT ("to give SMS to MFW -> ok"); + /* show the use "Please wait" for send sms */ + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtSending, TxtMessage , COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)SmsSend_standard_dialog_cb, FOREVER, KEY_LEFT ); + display_info.Identifier = SMSSEND_ID_WAIT_SEND; + + data->child_dialog = info_dialog(win, &display_info); + data->id = SMSSEND_ID_SENT; + } + else + { + TRACE_EVENT ("to give SMS to MFW -> failed"); + /* the result operation of sent was NOT OK*/ + //Sep 01, 2004 REF: CRR 21380 Deepa M.D + //Second string is same as the TextId .Hence passed NULL. + mmi_dialog_information_screen(win,TxtNotSent, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SENT); + // No forever dialog to be destroyed + data->child_dialog = NULL; + data->id = SMSSEND_ID_NOT_SENT; + } + + /*SPR 2453, don't deallocate memory till sending complete*/ + return 1; +} + + +/******************************************************************************* + + $Function: SmsSend_get_config_data + + $Description: Called by external processes to read SMS PP config data. + + $Returns: execution status + + $Arguments: config_data - SMS info + +*******************************************************************************/ + +UBYTE SmsSend_get_config_data (T_MFW_SMS_INFO *config_data) +{ + T_MFW Submit_Status; /* store theh result of SMS send operation. */ + + TRACE_FUNCTION ("SmsSend_get_config_data()"); + // get the current config data from SIM + Submit_Status = sms_parameter(config_data, TRUE); + + if (Submit_Status == MFW_SMS_FAIL) + { + TRACE_EVENT ("ret MFW_SMS_FAIL"); + return FALSE; + } + else + { + TRACE_EVENT ("ret OK"); + return TRUE; + } +} +/******************************************************************************* + + $Function: SmsSend_set_SrvCntr_number + + $Description: Called by external processes to write/Set SMS PP config data. + + $Returns: execution status + + $Arguments: config_data - SMS info + +*******************************************************************************/ + +UBYTE SmsSend_set_SrvCntr_number (T_MFW_SMS_INFO *config_data) +{ + T_MFW Submit_Status; /* store theh result of SMS send operation. */ + + TRACE_FUNCTION ("SmsSend_set_SrvCntr_number()"); + // get the current config data from SIM + Submit_Status = sms_set_SrvCntr_number(config_data); + + if (Submit_Status == MFW_SMS_FAIL) + { + TRACE_EVENT ("ret MFW_SMS_FAIL"); + return FALSE; + } + else + { + TRACE_EVENT ("ret OK"); + return TRUE; + } +} +UBYTE SmsSend_set_dcs_number (T_MFW_SMS_INFO *config_data) +{ + T_MFW Submit_Status; /* store theh result of SMS send operation. */ + + TRACE_EVENT ("SmsSend_set_dcs_number()"); + // get the current config data from SIM + Submit_Status = sms_set_dcs_number(config_data); + + if (Submit_Status == MFW_SMS_FAIL) + { + TRACE_EVENT ("ret MFW_SMS_FAIL"); + return FALSE; + } + else + { + TRACE_EVENT ("ret OK"); + return TRUE; + } +} + +/* SPR#1428 - SH - New Editor: no longer required */ +#ifndef NEW_EDITOR +/******************************************************************************* + + $Function: SmsSend_loadEditDefault + + $Description: Configure T_EDITOR_DATA structure with default editor settings. + + $Returns: none + + $Arguments: editor_data - editor data. + +*******************************************************************************/ + +void SmsSend_loadEditDefault(T_EDITOR_DATA *editor_data) +{ + TRACE_FUNCTION ("SmsSend_loadEditDefault()"); + + editor_attr_init(&editor_data->editor_attr, NULL, edtCurBar1, 0, 0, 0, COLOUR_EDITOR); + editor_data_init(editor_data, NULL, TxtSoftSelect, TxtSoftBack, 0, 1, ALPHA_MODE, FOREVER); + editor_data->hide = FALSE; + editor_data->AlternateLeftSoftKey = TxtNull; + editor_data->Identifier = 0; + editor_data->TextString = NULL; + editor_data->destroyEditor = TRUE ; +} + + +/******************************************************************************* + + $Function: SmsSend_loadUCS2EditDefault + + $Description: Configure T_EDITOR2_DATA structure with default editor settings. + + $Returns: none + + $Arguments: editor_data - editor data. + +*******************************************************************************/ + +static void SmsSend_loadUCS2EditDefault(T_EDITOR_DATA *editor_data) +{ + TRACE_FUNCTION ("SmsSend_loadUCS2EditDefault()"); + + memset(editor_data, 0, sizeof(T_EDITOR_DATA)); + editor_data->hide = FALSE; + editor_data->LeftSoftKey = TxtSend; + editor_data->AlternateLeftSoftKey = TxtSend; + editor_data->RightSoftKey = TxtSave; + editor_data->Identifier = SMSSEND_ID_TEXTEDIT; + editor_data->mode = ALPHA_MODE; + editor_data->min_enter = 0; + editor_data->timeout = FOREVER; + editor_data->Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; +} +#endif /* NEW_EDITOR */ + + +/******************************************************************************* + + $Function: SmsSend_standard_dialog_cb + + $Description: Callback function for standard dialogs in smssend module + + $Returns: none + + $Arguments: win - current window + Identifier - unique id + Reason - event id + +*******************************************************************************/ + +static int SmsSend_standard_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SAVE * save_data = NULL; + T_SEND * send_data = NULL; + T_MFW_HND * l_parent = NULL; + + TRACE_FUNCTION ("SmsSend_standard_dialog_cb()"); + + + + switch (Identifier) + { + + case SMSSEND_ID_SAVE_NOT_READY: + case SMSSEND_ID_SC_NOT_READY: + // SEND an event to recreate the text editor + // or to recreate the destination address number editor + SEND_EVENT (win, E_RETURN, Identifier, NULL); + break; + + case SMSSEND_ID_WAIT_SEND: + if (win_data != NULL) + { + send_data = (T_SEND *)win_data->user; + // Forever child dialog has been destroyed + if (send_data != NULL) + send_data->child_dialog = NULL; + } + break; + + case SMSSEND_ID_WAIT_SAVE: + // There is no way to stop SMS send + if (win_data != NULL) + { + save_data = (T_SAVE *)win_data->user; + // Forever child dialog has been destroyed + if (save_data != NULL) + save_data->child_dialog = NULL; + } + break; + + // Destroy the window then send the EXIT event to the SEND window->display of the text editor + case SMSSEND_ID_SENT: + case SMSSEND_ID_NOT_SENT: + if ((Reason EQ INFO_KCD_RIGHT) || (Reason EQ INFO_KCD_HUP) || (Reason EQ INFO_TIMEOUT)) + SEND_EVENT(win, E_EXIT, SEND_ID, NULL); + // Do not reset child dialog handle, as 3s sending dialogs handle are not saved + break; + + // Destroy the SAVE window and send an E_EXIT event to the parent window (useful if some actions are needed on return like in SEND) + case SMSSEND_ID_SAVED: + case SMSSEND_ID_NOT_SAVED: + case SMSSEND_ID_LIST_FULL: + if ((Reason EQ INFO_KCD_RIGHT) || (Reason EQ INFO_KCD_HUP) || (Reason EQ INFO_TIMEOUT)) + { + + if (win_data != NULL) + { + save_data = (T_SAVE *)win_data->user; + if (save_data != NULL) + { + l_parent = save_data->parent; + } + } + // Destroy the window + SmsSend_SAVE_destroy(win); + // This will make SEND frame to recreate the text editor + if (l_parent != NULL) + SEND_EVENT(l_parent, E_EXIT, SAVE_ID, NULL); + + } + break; + + + default: + TRACE_EVENT("MFW_EVENT_REJECTED"); + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: SmsSend_convert_to_inter + + $Description: Transform a phone number in T_MFW_SMS_ADDR format to a string + with a '+' character if international number + + $Returns: none + + $Arguments: source_number - calling number + dest_number - called number +*******************************************************************************/ + +void SmsSend_convert_to_inter(T_MFW_SMS_ADDR *source_number, // The number to convert + char *dest_number) // The dest number with a '+' if needed +{ + USHORT nb_char; + USHORT i = 0; + char *pt_digit = dest_number; + + TRACE_FUNCTION ("SmsSend_convert_to_inter()"); + + nb_char = strlen(source_number->number); + + if (source_number->ton == TON_International) + { + *pt_digit = '+'; + pt_digit++; + } + + for (i = 0; i <= nb_char; i++) + pt_digit[i] = source_number->number[i]; +} + +/******************************************************************************* + + $Function: SmsSend_R_OPTExeCentreEdit + + $Description: Create editor for entering the Service center number. + + $Returns: none + + $Arguments: m - menu handler + i - menu item selected. +*******************************************************************************/ + + +int SmsSend_R_OPTExeCentreEdit(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent_win = mfw_parent(mfw_header()); + T_MFW_HND win = SmsSend_SEND_create(parent_win); + SEND_EVENT(win,E_INIT,SMSSEND_ID_NBEDIT,0); + return 1; // ADDED BY RAVI-28-11-2005 +} +/******************************************************************************* + + $Function: SmsSend_SCNBEDIT_edit_cb + + $Description: Callback function for the SC number editor. + + $Returns: none + + $Arguments: win - current window + Identifier - unique id + reason - event cause +*******************************************************************************/ + +static void SmsSend_SCNBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_SEND * data = (T_SEND *)win_data->user; + + T_MFW_SMS_INFO sms_parameter; + + + TRACE_FUNCTION ("SmsSend_SCNBEDIT_edit_cb()"); + + + switch (reason) + { + case INFO_KCD_LEFT: + TRACE_EVENT("INFO_KCD_LEFT"); + //GW Read config data to get value of dcs + SmsSend_get_config_data(&sms_parameter); + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { //We have a chinese text message - set dcs parameter to + sms_parameter.dcs = MFW_DCS_UCS2; + } + else + { + sms_parameter.dcs = MFW_DCS_7bits; + } + //copy the sevice center number into the + + strcpy((char*)sms_parameter.sc_addr,(char*)data->edt_data.CentreBuffer); + // store the Service center number into the SIM. + SmsSend_set_SrvCntr_number (&sms_parameter); + SmsSend_set_dcs_number (&sms_parameter); + + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->number_editor); +#else /* NEW_EDITOR */ + editor_destroy(data->number_editor); +#endif /* NEW_EDITOR */ + + SmsSend_SEND_destroy(win); + data->number_editor = 0; + + break; + + case INFO_KCD_ALTERNATELEFT: + TRACE_EVENT("INFO_KCD_ALTERNATELEFT"); + + bookPhonebookStart(win, PhbkFromSmsSC); /* SH - changed from PhbFromSms */ + break; + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + TRACE_EVENT("INFO_KCD_RIGHT/HUP"); + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->number_editor); +#else /* NEW_EDITOR */ + editor_destroy(data->number_editor); +#endif /* NEW_EDITOR */ + + SmsSend_SEND_destroy(win); + data->number_editor = 0; + + break; + + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +// Feb 02, 2005 REF: CRR 28479 xnkulkar +// Bug: While saving a SMS, if the user presses LSK while the 'Saved' dialog is displayed, the 'Saved' +// dialog doesn't get dismissed. +// Solution: New function "mmi_dialog_information_screen_save_sms" which has only +// KEY_RIGHT and KEY_HUP registered instead of KEY_ALL +/******************************************************************************* + + $Function: mmi_dialog_information_screen_save_sms + + $Description: Function to display SMS "Saved" info screen + + $Returns: info_dialog + + $Arguments: + +*******************************************************************************/ +T_MFW_HND mmi_dialog_information_screen_save_sms(T_MFW_HND parent_win, int TxtId, char* text, T_VOID_FUNC call_back, USHORT identifier) +{ + T_DISPLAY_DATA display_info; + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, call_back, THREE_SECS, KEY_RIGHT | KEY_HUP ); + display_info.TextString2 = text; + display_info.Identifier = identifier; + return info_dialog(parent_win,&display_info); //information screen + +} + +#undef MMI_SMSSEND_C