FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiMmsCreate.c @ 460:4d4f0bba9469
doc/D-Sample written
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 19 Mar 2018 18:45:16 +0000 |
parents | 3c2acfa1a72f |
children |
line wrap: on
line source
/******************************************************************************* TI (Shanghai) ******************************************************************************** This software product is the property of TI (Shanghai) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: TISHMMS Project $Project code: BMI (6349) $Module: MMS $File: MmiMMSCreate.h $Revision: 1.0 $Author: Yan Bin(bin-yan@ti.com) $Date: 26/08/03 ******************************************************************************** Description: This module provides definitions of the types and constants which are shared across the MMS application modules. ******************************************************************************** $History: MmiMMSCreate.h Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C Description: MMS: During MMS Reply, Enter Number shows Empty. Solution: Senders number is extracted from the Message Header and is displayed. xrashmic 17 Jun, 2005 MMI-SPR-29992 For sending MMS on CHT sim, the FROM address should be NULL. May 11 2005 REF: MMI-SPR-29887 x0012849 To Implement the deferred MMS retrieval. xreddymn Mar-08-2005, MMI-SPR-28820 Fix for flickering issue (drawing occuring more than once) when forwarding MMS and creating new MMS xreddymn Feb-07-2005, MMI-SPR-28277 Fix for blank content on entering the MMS Editor-Viewer when forwarding MMS messages. xreddymn Mar-04-2005 MMI-SPR-26144 Added changes for cancel sending MMS xrashmic 08 Feb, 2005 MMI-SPR-27853 Error handling in sending MMS and also displaying the progress value x0012849 Feb- 03 -2005 : MMI-SPR-28224 To allow user to scroll up and down if contents of MMS are bigger than screen size. xrashmic 14 Dec, 2004 MMI-SPR-23921 Implementing the forward functionality for MMS xrashmic 30 Nov, 2004 MMI-SPR-26145 xrashmic 22 Dec, 2004 MMI-SPR-27798 Moving the MMS to sent folder after it is sent xrashmic 3 Nov, 2004 MMI-SPR-26145 Deleting the compose and option window after sending the MMS MMI-SPR-25278: Nov-29-2004 - xreddymn Implemented FFS limits for MMS/EMS storage CRR: 25302 - xpradipg 10 Nov 2004 Description: Should be able to select the number from the phonebook while sending MMS/EMS. Solution: The new feature to select the number from phonebook while sending MMS/EMS is added xrashmic 9 Nov, 2004 MMI-SPR-26147 Description: The inserted text in the MMS message was not editable and the text editor was limited to a maximum of 32 characters. Solution: The text buffer is memset to '\0' only once at the time of MMS create - MWM_CREATE and increased the editor max size to 512. xrashmic 6 Oct, 2004 MMI-SPR-25147 MMS not saving to unsent folder for all scenarios. MMI-SPR-24735: Sep-16-2004 - xreddymn Changes related to EMS screen flickering issue MMI-SPR-24733, Sep-17-2004 - xreddymn Modified case MWM_REFRESH to prevent edit mode being disabled CRR: 23942 - xpradipg 26 Aug 2004 Description: Default values to be removed in text editor of MMS and EMS Solution: The buffer assigned to the text editor is reset. xreddymn 03 Sep, 2004 Display issue MMI-SPR-23961 related changes: Modified suspend and resume operation of MMS editor CRR:23923 - xpradipg 06 Sept 2004 Description: MMS Preview not working Solution: The preview is displayed in a new window by posting the appropriate events to MMS client CRR: 23942 - xpradipg 26 Aug 2004 Description: Default values to be removed in number editor of MMS and EMS Solution: The strcpy() of the hardcoded numbers to the editor buffer are commented xreddymn 20 Aug, 2004 Display issue MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): Added mechanism to prevent MMS/EMS display, while outside the MMS/EMS editor MMS save issue MMI-SPR-24113 (TII_MMS53): Prevented creation of entries for unsaved messages on pressing back from MMS editor xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 All the status screen, .i.e sending, receiving etc. are displayed separatly for the MMS module. Previously the WAP screens were being used. Bug Id 23 : 16 Aug, 2004 - xpradipg Description:Remove insert slide from options menu Solution: removed the insert slide item from the menu item array 17/01/04 Replace mfw edit with AUI edit. 26/08/03 Original TI(Shanghai) BMI version. $End *******************************************************************************/ #define MMI_MMSCREATE_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" //#include "mfw_edt.h" #include "mfw_tim.h" #include "mfw_phb.h" #include "ksd.h" #include "psa.h" #include "mfw_sms.h" #include "mfw_smsi.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 "psa_util.h" #include "dspl.h" // #include "unicode_types.h" #include "MmiMain.h" #include "MmiDummy.h" //#include "MmiLists.h" #include "MmiMmi.h" #include "mmiCall.h"//GW 29/11/01 for 'callNumber' #include "MmiDialogs.h" #include "MmiLists.h" #include "MmiMenu.h" #include "MmiSoftKeys.h" #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 "MmiBookShared.h" // MZ #include "mmimmsmenu.h" #include "mmimmscreate.h" #include "mmimmsom.h" #include "mmiwindow.h" #include "mfw_ffs.h" #include "cus_aci.h" #include "prim.h" #ifndef PCM_2_FFS #include "pcm.h" #endif #include "aci_cmh.h" //GW 29/11/01 added for types in aci_fd.h #include "aci_fd.h" //GW 29/11/01 added for types in 'cmh.h' #include "cmh.h" //GW 29/11/01 added for types in 'cmh_phb.h' #include "cmh_phb.h" //GW 29/11/01 added for cmhPHB_getAdrStr #include "mmiColours.h" //CRR: 25302 - xpradipg 10 Nov 2004 #include "mmiSmsMenu.h" #include "mmismssend.h" // ronaldc 8-5 #include "mg4def.h" #include "evtdefs.h" #include "mg4stu.h" #include "Mg4Dal.h" #include "mg4devif.h" #include "dalevt.h" #include "evif.h" #include "mg4str.h" #include "mmif.h" #include "mg4mem.h" #include "AUIWapext.h" #include "ATBData.h" #include "AUIWap.h" //xmzhou02 to include definition for ALL_WIN & WAP_MMS //GW 29/11/01 - added header file - removed extern void callNumber(UBYTE* number); MfwWin* getWinData( MfwHnd win); //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 extern int MMSactive; extern void M4_DebugMessage(unsigned long para); //CRR:23923 - xpradipg 06 Sept 2004 extern int MMSBox_Read_kbd_cb (MfwEvt e, MfwKbd *k); //xrashmic 30 Nov, 2004 MMI-SPR-26145 //xrashmic 20 Dec, 2004 MMI-SPR-23921 T_MFW_HND mms_create_opt_hnd=NULL; T_MFW_HND mms_create_hnd=NULL; //xrashmic 14 Dec, 2004 MMI-SPR-23921 T_MFW_HND mms_Fwdcreate_hnd=NULL; extern MM_S_MESSAGE_HEADER_LIST* g_pMessageHeaderList; extern int g_currentMessage; MM_S_MESSAGE_HEADER *fwd_msg_header; /********************************************************************* DYNAMIC MENU WINDOW. DECLARATION **********************************************************************/ static int MMSCreate_OPTexeSend(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeInsPicture(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeInsSound(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeInsText(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeInsSlide(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeDelPicture(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeDelSound(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeDelText(MfwMnu* m, MfwMnuItem* i); static int MMSCreate_OPTexeSave(MfwMnu* m, MfwMnuItem* i); //CRR:23923 - xpradipg 06 Sept 2004 static int MMSCreate_OPTpreviewMsg(MfwMnu* m, MfwMnuItem* i); static MfwMnuItem MMSCreate_OPTDeleteItems [] = { {0,0,0,(char *)TxtMMSDeletePicture,0,(MenuFunc)MMSCreate_OPTexeDelPicture,item_flag_none}, {0,0,0,(char *)TxtMMSDeleteSound,0,(MenuFunc)MMSCreate_OPTexeDelSound,item_flag_none}, {0,0,0,(char *)TxtMMSDeleteText,0,(MenuFunc)MMSCreate_OPTexeDelText,item_flag_none} }; static MfwMnuAttr MMSCreate_OPTDeleteAttrib = { &SmsRead_R_OPTArea, MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ -1, /* use default font */ MMSCreate_OPTDeleteItems, /* with these items */ sizeof(MMSCreate_OPTDeleteItems)/sizeof(MfwMnuItem), /* number of items */ COLOUR_LIST_SMS, TxtNull, MNUATTRSPARE }; static MfwMnuItem MMSCreate_OPTItems [] = { {0,0,0,(char *)TxtSend,0,(MenuFunc)MMSCreate_OPTexeSend,item_flag_none}, {0,0,0,(char *)TxtMMSInsertPicture,0,(MenuFunc)MMSCreate_OPTexeInsPicture,item_flag_none}, {0,0,0,(char *)TxtMMSInsertSound,0,(MenuFunc)MMSCreate_OPTexeInsSound,item_flag_none}, {0,0,0,(char *)TxtMMSInsertText,0,(MenuFunc)MMSCreate_OPTexeInsText,item_flag_none}, //Bug Id 23 : 16 Aug, 2004 - xpradipg //Description:Remove insert slide from options menu //{0,0,0,(char *)TxtMMSInsertSlide,0,(MenuFunc)MMSCreate_OPTexeInsSlide,item_flag_none}, {0,0,0,(char *)TxtSave,0,(MenuFunc)MMSCreate_OPTexeSave,item_flag_none}, {0,0,0,(char *)TxtMMSDelete,&MMSCreate_OPTDeleteAttrib,0,item_flag_none}, //CRR:23923 - xpradipg 06 Sept 2004 //Added the functionality for preview message //xrashmic 6 Oct, 2004 MMI-SPR-25147 //Since the Compose screen itself is in preview mode, no need for this //in the options menu // {0,0,0,(char *)TxtMMSPreview,0,(MenuFunc)MMSCreate_OPTpreviewMsg,item_flag_none} }; static MfwMnuAttr MMSCreate_OPTAttrib = { &SmsRead_R_OPTArea, MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ -1, /* use default font */ MMSCreate_OPTItems, /* with these items */ sizeof(MMSCreate_OPTItems)/sizeof(MfwMnuItem), /* number of items */ COLOUR_LIST_SMS, TxtNull, MNUATTRSPARE }; #if 1 // bernards bbssoo 25.9.2003 begin typedef enum { MMI2_NEW_MSG= -9, MMI2_DELETE_MSG, MMI2_STORE_MSG_HDR, MMI2_SEND_MSG, MMI2_GET_MSG, MMI2_FWD_MSG, MMI2_PROCESSACK }MMI2_EVT_TYPE; typedef struct { EVT_STRUCT evtStruct; MMI2_EVT_TYPE eType; }MMI2_EVT_STRUCT; typedef MMI2_EVT_STRUCT* MMI2_EVT_HANDLE; static ESTATUS MMI_2_EventHandler(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle); MM_S_MESSAGE_HEADER *msgHeader=NULL; // ronaldc 9-4 to 9-5: add start MM_S_MESSAGE_HEADER g_msg_header; EVT_STRUCT g_event_struct; EVT_STRUCT g_doc_event_struct; MM_MESSAGE_ID g_msg_id; EV_S_NEWSLIDE_INFO g_NewSlideInfo; UCS2 g_insertString[128] = {'t','e','s','t',0}; MSafeString g_safeString; BOOL g_inSendMode=FALSE; //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): To keep track of MMS display BOOL g_M4_display_active=FALSE; //xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): To keep track of saved messages BOOL g_M4_message_saved=FALSE; BOOL g_inSaveMode=FALSE; //xreddymn Aug-26-2004 extern UINT8 gucMmsTitleBarHeight; //xreddymn Nov-26-2004 MMI-SPR-25278 T_MFW_HND g_inSaveModeWin; //xrashmic 08 Feb, 2005 MMI-SPR-27853 extern void AUI_mms_status_notify(int status); //xrashmic 9 Nov, 2004 MMI-SPR-26147 static char text[MAX_MMS_TEXT_LEN]; //xreddymn Feb-02-2005 MMI-SPR-28277: Used to trigger EMG4_Refresh when forwarding MMS BOOL gMmsForwardStart=FALSE; void DummyFreeFunc(void *pMemBlock) { return; } //xrashmic 08 Feb, 2005 MMI-SPR-27853 int progressValue=0; ESTATUS MMI_1_EventHandler(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle) { M4_DebugMessage((unsigned long) 0x9700); M4_DebugMessage((unsigned long) aeId); M4_DebugMessage((unsigned long) aeType); M4_DebugMessage((unsigned long) ampParam); M4_DebugMessage((unsigned long) evtHandle); switch(aeId) { #if 0 case EMG4_PlayComplete: switch(MMI1EvtHandle->mmievtType) { case MMI1_EV_PLAY_MSG: // Message has finished playing, so tell user thru EV window aPoint.uX = 0; aPoint.uY = 0; DeviceClearOffscreenBuffer(); DAL_DrawText(&aPoint, _T("(End of show)"), 13, afmStyle, &aColour); DeviceUpdateScreen(); break; }; break; case EMG4_PreviewComplete: switch(MMI1EvtHandle->mmievtType) { case MMI1_EV_CREATE_MSG: case MMI1_EV_OPEN_MSG: /*Call Preview Routine to post end Preview */ if(l_bIsPreview) { MMI_1_Preview(g_hwndMMI1); } break; default: break; }; break; #endif /********************* Editor Viewer CallBacks *********************/ case EMG4_FileOpDone: M4_DebugMessage((unsigned long) 0x9701); // xreddymn Feb-02-2005 MMI-SPR-28277: If forwarding an MMS message, post EMG4_Refresh if(gMmsForwardStart == TRUE) { // xreddymn Mar-08-2005 MMI-SPR-28820: change sequence of posting // EMG4_Preview and EMG4_Resume action_PreviewMessage(); action_ResumeEditor(); gMmsForwardStart = FALSE; } if (g_inSendMode == TRUE) { M4_DebugMessage((unsigned long) 0x9702); //xrashmic 08 Feb, 2005 MMI-SPR-27853 //Indicate the saving is done and sending has started // xreddymn Mar-04-2005 MMI-SPR-26144 // MMS send progress is updated by WAP FSM // progressValue=0; // AUI_mms_status_notify(MMS_SEND_PROGRESS); MMI_2_OnSendMessage(); //xrashmic 08 Feb, 2005 MMI-SPR-27853 //Indicate the saving is done and sending has started // progressValue=0; // AUI_mms_status_notify(MMS_SEND_PROGRESS); g_inSendMode=FALSE; // xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): To keep track of saved messages g_M4_message_saved=TRUE; } // xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): To keep track of saved messages if(g_inSaveMode == TRUE) { winDelete(g_inSaveModeWin); g_inSaveMode=FALSE; g_M4_message_saved=TRUE; // xreddymn Nov-27-2004 MMI-SPR-25278: Display "Saved" dialog here //xrashmic 08 Feb, 2005 MMI-SPR-27853 //Added few more parameters for this function information_dialog(TxtSaved,TxtNull,NULL,NULL, TxtNull,TxtSoftBack,FOREVER,KEY_CLEAR|KEY_RIGHT|KEY_HUP,NULL); } break; // xrashmic Nov-17-2004 MMI-SPR-25278: Changes for FFS error handling case EMG4_OpError: { MDword reason; // xreddymn Feb-02-2005 MMI-SPR-28277: If forwarding an MMS message and OpenDocument fails, reset gMmsForwardStart if(gMmsForwardStart==TRUE) { gMmsForwardStart=FALSE; } if(g_inSaveMode == TRUE) { winDelete(g_inSaveModeWin); g_inSaveMode=FALSE; g_M4_message_saved=FALSE; } reason = (ampParam & 0x3FFF); switch(reason) { case EFileOpFailed: //xrashmic 08 Feb, 2005 MMI-SPR-27853 //When sending MMS if there are file op erros, we need to handle them here if (g_inSendMode == TRUE) { g_inSendMode=FALSE; AUI_mms_status_notify(MMS_SEND_FAIL); } else { // xreddymn Nov-27-2004 MMI-SPR-25278: Display "Error" dialog here //xrashmic 08 Feb, 2005 MMI-SPR-27853 //Added few more parameters for this function information_dialog(TxtFailed,TxtFatalError,NULL,NULL, TxtNull,TxtSoftBack,FOREVER,KEY_CLEAR|KEY_RIGHT|KEY_HUP,NULL); } break; } } break; default: break; } return ENoError; } ESTATUS Handler_MM_CreateMessageEntryAsync(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle) { ESTATUS eStatus; // TRACE_EVENT("MAGIC4: Handler_MM_CreateMessageEntryAsync()"); g_msg_id = (MM_MESSAGE_ID) ampParam; M4_DebugMessage((unsigned long) 0x30000); M4_DebugMessage((unsigned long) g_msg_id); g_doc_event_struct.handler = MMI_1_EventHandler; g_doc_event_struct.parentEvtHandle = NULL; g_doc_event_struct.pData = NULL; g_doc_event_struct.userFlag = 0; eStatus=EV_CreateDocument(&g_doc_event_struct, EMtMmsSmil, g_msg_id); if (eStatus!=ENoError) { M4_DebugMessage((unsigned long) 0x34000); M4_DebugMessage((unsigned long) eStatus); } g_NewSlideInfo.omh.freeFunc = DummyFreeFunc; // xreddymn Aug-27-2004 MMI-SPR-23919 (TII_MMS6): Modified slide duration to infinite // g_NewSlideInfo.slideDuration = 5000; g_NewSlideInfo.slideDuration = 0; g_NewSlideInfo.slidePosition = 1; // rvf_delay(10); DAL_PostMessage(EMG4_InsertNewSlide, EMG4_Type_NotUsed, (MESSAGE_PARAM)&g_NewSlideInfo, 0); #if 0 // rvf_delay(10); DAL_PostMessage(EMG4_InsertString, EMG4_Type_NotUsed, (MESSAGE_PARAM)g_TestString, 0); // rvf_delay(10); DAL_PostMessage(EMG4_SaveMsg, EMG4_Type_NotUsed, 0, 0); // rvf_delay(10); DAL_PostMessage(EMG4_Exit, EMG4_Type_NotUsed, 0, 0); // rvf_delay(10); #endif M4_DebugMessage((unsigned long) 0x30001); return ENoError; } void OrthusCreateMessageEntryAsync(void) { ESTATUS eResult; TRACE_EVENT("MAGIC4: OrthusCreateMessageEntryAsync()"); g_msg_header.memHdr.freeFunc = DummyFreeFunc; g_msg_header.id = MM_INVALID_MESSAGE_ID; g_msg_header.messageFlags = 0; g_msg_header.reference = 0; g_msg_header.read = EFalse; g_msg_header.complete = EFalse; g_msg_header.drmSet = EFalse; memset(&(g_msg_header.timestamp), 0, sizeof(MM_S_TIME_STAMP)); g_msg_header.timestamp.type = ETimestampAbsolute; g_msg_header.location = EMlDraft; g_msg_header.type = EMtMmsSmil; g_msg_header.messageTypeHeader.mmsHeader.pBccList = NULL; g_msg_header.messageTypeHeader.mmsHeader.pCcList = NULL; g_msg_header.messageTypeHeader.mmsHeader.pContentType = NULL; g_msg_header.messageTypeHeader.mmsHeader.pFrom = NULL; g_msg_header.messageTypeHeader.mmsHeader.pMmsTransactionId = NULL; g_msg_header.messageTypeHeader.mmsHeader.pServerMessageId = NULL; g_msg_header.messageTypeHeader.mmsHeader.pSubject = NULL; g_msg_header.messageTypeHeader.mmsHeader.pToList = NULL; g_msg_header.messageTypeHeader.mmsHeader.pUrl = NULL; g_msg_header.messageTypeHeader.mmsHeader.size = 0; g_msg_header.messageTypeHeader.mmsHeader.version = 1; g_msg_header.messageTypeHeader.mmsHeader.deliveryReport = EFalse; g_msg_header.messageTypeHeader.mmsHeader.readReport = EFalse; memset(&(g_msg_header.messageTypeHeader.mmsHeader.expiryTime), 0, sizeof(MM_S_TIME_STAMP)); memset(&(g_msg_header.messageTypeHeader.mmsHeader.currentDate), 0, sizeof(MM_S_TIME_STAMP)); g_msg_header.messageTypeHeader.mmsHeader.currentDate.type = ETimestampAbsolute; g_msg_header.messageTypeHeader.mmsHeader.expiryTime.type = ETimestampRelative; g_msg_header.messageTypeHeader.mmsHeader.priority = EMPnormal; g_msg_header.messageTypeHeader.mmsHeader.setDeferred = EFalse; g_msg_header.messageTypeHeader.mmsHeader.setRejected = EFalse; g_msg_header.messageTypeHeader.mmsHeader.expired = EFalse; g_msg_header.messageTypeHeader.mmsHeader.retrieved = EFalse; g_msg_header.messageTypeHeader.mmsHeader.readRemote = EFalse; g_event_struct.handler = Handler_MM_CreateMessageEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; M4_DebugMessage((unsigned long) g_event_struct.handler); eResult = MM_CreateMessageEntryAsync((EVT_HANDLE) &g_event_struct, &g_msg_header); if(eResult!=ENoError) { TRACE_EVENT("MAGIC4: MM_CreateMessageEntryAsync() fail"); } // xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): To keep track of when the MMS is saved else { g_M4_message_saved=FALSE; } g_safeString.memHeader.freeFunc = DummyFreeFunc; /*!< Pointer to memory deallocation function */ g_safeString.size=10; /*!< size of the string */ g_safeString.pString=g_insertString; /*!< Pointer to UCS2 string */ } /*************************************************************************/ /** Send the selected message... \param hWnd [in] Of this Window...i.e MMI_2 \return <???> /*************************************************************************/ BOOL MMI_2_OnSendMessage() { //MInt32 nSel=0; MMI2_EVT_HANDLE pHandle=NULL; ESTATUS eResult=ENoError; pHandle = (MMI2_EVT_HANDLE)malloc(sizeof(MMI2_EVT_STRUCT)); if(!pHandle) { //M4_SIM_DisplayError(hWnd,_T("Mem Alloc Error")); return TRUE; } pHandle->evtStruct.handler = MMI_2_EventHandler; pHandle->evtStruct.parentEvtHandle = NULL; pHandle->evtStruct.pData = NULL; pHandle->evtStruct.userFlag = 0; pHandle->eType = MMI2_SEND_MSG; M4_DebugMessage((unsigned long) 0x94001); eResult= TM_SendMessageAsync((EVT_HANDLE)pHandle, g_msg_id); M4_DebugMessage((unsigned long)g_msg_id); if(eResult!=ENoError) { //M4_SIM_ReportError(eResult,hWnd); free(pHandle); pHandle=NULL; } return TRUE; } /*********************/ //NM moved this function to mmimmsbox.c #if 0 UCS2 * MMS_ConvertStringToUcs2 (const MByte * const p8BitString, const MUint uLength, UCS2 * pUcs2String) { if ((UCS2 *) NULL == pUcs2String) { pUcs2String = (UCS2 *)MM_MALLOC(sizeof(UCS2) * (1 + uLength)); } if ((UCS2 *)NULL != pUcs2String) { register MUint uIndex; for (uIndex = 0; uIndex < uLength; ++uIndex) { pUcs2String[uIndex] = (UCS2)p8BitString[uIndex]; } pUcs2String[uIndex] = NULLCHAR; } return pUcs2String; } #endif /******************************************************************************* $Function: cancel_TMsend $Description: Posts MMS send cancel to MMS client $Returns: none $Arguments: none *******************************************************************************/ //xrashmic 26144 void cancel_TMsend(void) { char temp[100]; ESTATUS eResult=ENoError; TRACE_EVENT("cancelSendingMMS"); sprintf(temp, "####cancelSendingMMS"); M4_DebugStringMessage(temp, strlen(temp), 0); eResult= TM_SendMessageCancel( g_msg_id); if(eResult!=ENoError) { sprintf(temp, "####cancelSendingMMS done"); M4_DebugStringMessage(temp, strlen(temp), 0); } } //May 17 2005 REF: MMI-SPR-29887 x0012849 // Called when user cancels the recieving operation void cancel_TMrecieve(void) { ESTATUS eResult=ENoError; TRACE_EVENT("cancel_TMrecieve"); eResult= TM_GetMessageCancel ( g_pMessageHeaderList->ppList[g_currentMessage].id); if(eResult!=ENoError) { TRACE_EVENT("CancelRecievingMMS done"); } } //Jun 28 2005 REF: MMI-SPR-29887 x0012849 ESTATUS Handler_MM_DeleteMessageBodyEntryAsync(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle) { return ENoError; } //Jun 28 2005 REF: MMI-SPR-29887 x0012849 void Delete_Body(void) { g_event_struct.handler = Handler_MM_DeleteMessageBodyEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; MM_DeleteMessageBodyAsync((EVT_HANDLE) &g_event_struct, g_pMessageHeaderList->ppList[g_currentMessage].id); } void MMI_2_SaveHeaderInfo(char *topic, char *number) { //char from[]="13801639314/TYPE=PLMN";//bernard //char from[]="60765943/TYPE=PLMN"; char from[]="/TYPE=PLMN"; UCS2 *pUcsFrom= NULL; UCS2 *pUcsTopic = NULL; UCS2 *pUcsNumber = NULL; MMI2_EVT_HANDLE evtHandle=NULL; ESTATUS eResult; char temp[100]; char tempNumber[100]; sprintf(temp, "MMI_2_SaveHeaderInfo called %s, %s", topic, number); //M4_DebugStringMessage(temp, strlen(temp), 0); //xrashmic 17 Jun, 2005 MMI-SPR-29992 //For sending MMS on CHT sim, the FROM address should be NULL. /*pUcsFrom= (UCS2 *)MMS_ConvertStringToUcs2((const MByte *)from, GetByteStringLength((const MByte *)from), pUcsFrom); */ pUcsTopic = (UCS2 *)MMS_ConvertStringToUcs2((const MByte *)topic, GetByteStringLength((const MByte *)topic), pUcsTopic); if (NULL == pUcsTopic) { sprintf(temp, "MMI_2_SaveHeaderInfo called pUcsTopic = NULL"); //M4_DebugStringMessage(temp, strlen(temp), 0); return; } sprintf(temp, "MMI_2_SaveHeaderInfo number=%s", number); //M4_DebugStringMessage(temp, strlen(temp), 0); strcpy(tempNumber, number); strcat(tempNumber,"/TYPE=PLMN"); sprintf(temp, "MMI_2_SaveHeaderInfo tempNumber=%s", tempNumber); //M4_DebugStringMessage(temp, strlen(temp), 0); pUcsNumber= (UCS2 *)MMS_ConvertStringToUcs2((const MByte *)tempNumber, GetByteStringLength((const MByte *)tempNumber), pUcsNumber); if (pUcsNumber == NULL) { sprintf(temp, "MMI_2_SaveHeaderInfo pUcsNumber == NULL"); //M4_DebugStringMessage(temp, strlen(temp), 0); } if (NULL == pUcsNumber) { MMS_FREE(pUcsTopic); return; } //----------------------- eResult= DAL_RetrieveMessageHeader(g_msg_id,&msgHeader); if(eResult!=ENoError) { M4_DebugMessage((unsigned long)0x4400); return; } msgHeader->messageTypeHeader.mmsHeader.pFrom = pUcsFrom; msgHeader->messageTypeHeader.mmsHeader.pToList = pUcsNumber; msgHeader->messageTypeHeader.mmsHeader.pSubject = pUcsTopic; //----------------------- /* Form the event Handler */ evtHandle = (MMI2_EVT_HANDLE)malloc(sizeof(MMI2_EVT_STRUCT)); evtHandle->evtStruct.handler = MMI_2_EventHandler; evtHandle->evtStruct.parentEvtHandle = NULL; evtHandle->evtStruct.pData = NULL; evtHandle->evtStruct.userFlag = 0; evtHandle->eType = MMI2_STORE_MSG_HDR; DAL_ModifyMessageParamsAsync((EVT_HANDLE)evtHandle,g_msg_id,msgHeader); //msgHeader->memHdr.freeFunc(msgHeader); } /*************************************************************************/ /** EVENT HANDLER: Message Dialog (MMI_2) \param aeId [in] EVENT_ID \param ampParam [in] MESSAGE_PARAM \param evtHandle [in] EVT_HANDLE \return None [out] /*************************************************************************/ ESTATUS MMI_2_EventHandler(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE EvtHandle) { MMI2_EVT_HANDLE MMI2evtHandle = (MMI2_EVT_HANDLE) EvtHandle; BOOL bProcessed = FALSE; T_WAP_DATA *data = AUI_wap_data(); data->View->Title[0] = 0; M4_DebugMessage((unsigned long) 0x9800); M4_DebugMessage((unsigned long) aeId); M4_DebugMessage((unsigned long) aeType); M4_DebugMessage((unsigned long) ampParam); M4_DebugMessage((unsigned long) EvtHandle); switch(aeId) { case EMG4_NetworkOpDone: switch(MMI2evtHandle->eType) { case MMI2_SEND_MSG: //xrashmic 22 Dec, 2004 MMI-SPR-27798 // MMS send is successful, save it to sent folder MM_BeginUpdateHeader(g_msg_id); MM_UtilSetFolder(g_msg_id,EMlSent); MM_CommitUpdateHeaderAsync(NULL, g_msg_id); //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 // To display the MMS send Success dialog here. //xrashmic 08 Feb, 2005 MMI-SPR-27853 AUI_mms_status_notify(MMS_SEND_SUCCESS); bProcessed=TRUE; break; default: break; } break; //xrashmic 08 Feb, 2005 MMI-SPR-27853 // Need to display to the user the send progress infomation case EMG4_OpProgress: switch(MMI2evtHandle->eType) { case MMI2_SEND_MSG: // xreddymn Mar-04-2005 MMI-SPR-26144 // MMS progress is updated by WAP FSM // progressValue=ampParam; // AUI_mms_status_notify(MMS_SEND_PROGRESS); break; default: break; } break; //xrashmic 08 Feb, 2005 MMI-SPR-27853 //Need to catch the errors when the sending fails case EMG4_OpError: switch(MMI2evtHandle->eType) { case MMI2_SEND_MSG: AUI_mms_status_notify(MMS_SEND_FAIL); break; } break; } if(MMI2evtHandle && bProcessed) { free(MMI2evtHandle); MMI2evtHandle= NULL; } return ENoError; } /* 1. User selects 'Preview' from user menu (MMI) */ /* 2. MMI calls action_ResumeEditor() to resume the magic4 client and suspends the menu system */ void action_ResumeEditor() { /* resume magic4 editor */ DAL_PostMessage(EMG4_Resume,EMG4_Type_NotUsed,0,NULL); /* if necessary, add code here to suspend display of the menu system */ } /* 3. After action_ResumeEditor has been completed, MMI then calls action_PreviewMessage() to preview the message currently in the magic4 editor */ void action_PreviewMessage() { /* inform magic4 editor to preview the current message */ DAL_PostMessage(EMG4_Preview,EMG4_Type_NotUsed,0,NULL); } /* 4. After action_PreviewMessage has been completed, MMI then calls action_SuspendEditor() to suspend the magic4 client and resume the menu system */ void action_SuspendEditor() { /* suspend magic4 editor */ DAL_PostMessage(EMG4_Suspend,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_PlayMode,EMG4_Type_NotUsed, EPlayModeStop,NULL); /* if necessary, add code here to resume display of the menu system */ } /* 5. Done */ #endif // ronaldc 9-4 to 9-5: add end /******************************************************************************* $Function: MMSCreate_exec_cb $Description: Exec callback function of the MMS Create window $Returns: none $Arguments: win - window handler event - mfw event parameter - optional data. *******************************************************************************/ void MMSCreate_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; TRACE_FUNCTION ("MMSCreate_exec_cb()"); switch (event) { case MWM_CREATE: /* initialization of administrative data */ TRACE_EVENT("MWM_CREATE"); //yanbin init MMS create bbssoo - EV_createmessageasync() // ronaldc 9-5 OrthusCreateMessageEntryAsync(); //TraceOrthusCreateMessageEntryAsyncReturn(); //xrashmic 9 Nov, 2004 MMI-SPR-26147 //The text buffer is memset to '\0' only once at the time of MMS create - MWM_CREATE memset(text,'\0',MAX_MMS_TEXT_LEN); //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): M4 client will now use the display g_M4_display_active=TRUE; break; case MWM_ONDRAW: TRACE_EVENT("MWM_ONDRAW"); dspl_Enable(0); // xreddymn Aug-26-2004: Modified Title display { unsigned short width, height; DeviceGetScreenMetrics(&width,&height); dspl_SetBgdColour(COL_White); dspl_Clear(0, gucMmsTitleBarHeight, width-1, height-1); resources_setTitleColour(COLOUR_EDITOR); dspl_Clear(0, 0, width-1, gucMmsTitleBarHeight-1); dspl_TextOut(1, 0, DSPL_TXTATTR_HLIGHT,"Create MMS"); } //yanbin: here call Magic4 functions to show MMS slides // bbssoo - After Creating MMS, display the "create MMS display" in the middle screen. // xreddymn Mar-08-2005 MMI-SPR-28820: changed order of posting EMG4_Preview and EMG4_Resume action_PreviewMessage(); action_ResumeEditor(); //xrashmic 6 Oct, 2004 MMI-SPR-25147 //comenting action_SuspendEditor() as the Sound was not heard in the //compose screen //action_SuspendEditor(); displaySoftKeys(TxtSoftOptions,TxtSoftBack); dspl_Enable(1); break; case MWM_DESTORY: TRACE_EVENT("MWM_DESTROY"); //xreddymn Sep-16-2004: Changes related to MMI-SPR-24735 dspl_Enable(1); DAL_PostMessage(EMG4_Exit, EMG4_Type_NotUsed, 0, 0); //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): BMI will now use the display g_M4_display_active=FALSE; //xrashmic 20 Dec, 2004 MMI-SPR-23921 // On deleting the window, set the handler to NULL mms_create_hnd=NULL; break; case MWM_SUSPEND: TRACE_EVENT("MWM_SUSPEND"); //xreddymn Sep-16-2004: Changes related to MMI-SPR-24735 dspl_Enable(1); //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): BMI will now use the display g_M4_display_active=FALSE; // xreddymn Sep-03-2004 MMI-SPR-23961 DAL_PostMessage(EMG4_Suspend,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_PlayMode,EMG4_Type_NotUsed, EPlayModeStop,NULL); //xrashmic 6 Oct, 2004 MMI-SPR-25147 //The editor needs to be in EDIT mode when inserting, Saving, etc. DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); break; case MWM_RESUME: TRACE_EVENT("MWM_RESUME"); //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): M4 client will now use the display g_M4_display_active=TRUE; // xreddymn Sep-03-2004 MMI-SPR-23961 // xreddymn Sep-17-2004 MMI-SPR-24733: Removed EMG4_Preview from here as it was disabling edit mode // xreddymn Sep-17-2004, Removed EMG4_Resume here as it is redundant (See MWM_ONDRAW of this function) // DAL_PostMessage(EMG4_Preview,EMG4_Type_NotUsed,0,NULL); // DAL_PostMessage(EMG4_Resume,EMG4_Type_NotUsed,0,NULL); break; default: break; } } // xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): Delete message handler ESTATUS Handler_MM_DeleteMessageEntryAsync(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle) { return ENoError; } /******************************************************************************* $Function: MMSCreate_kbd_cb $Description: Exec callback function for the Option window $Returns: execution status $Arguments: e - event id k - keyboard info *******************************************************************************/ static int MMSCreate_kbd_cb (MfwEvt e, MfwKbd *k) /* SmsRead_R_OPT keyboard event handler */ { T_MFW_HND win = mfwParent(mfw_header()); TRACE_FUNCTION ("MMSCreate_kbd_cb()"); if (e & KEY_LONG) { switch (k->code) { case KCD_HUP: /* back to previous menu */ //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 //Once outside the MMS create screen, this flag needs to be unset MMSactive=FALSE; /* xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): Delete message on pressing back, * if it has not been saved. (Otherwise, it appears in the Unsent messages folder) */ if(g_M4_message_saved == FALSE) { g_event_struct.handler = Handler_MM_DeleteMessageEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; MM_DeleteMessageAsync((EVT_HANDLE) &g_event_struct, g_msg_id); } MMI_DestoryWindow(win); 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_MNUSELECT: case KCD_LEFT: MMSCreate_OPT_start(win,0); break; case KCD_HUP: /* back to previous menu */ case KCD_RIGHT: /* back to previous menu */ //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 //Once outside the MMS create screen, this flag needs to be unset MMSactive=FALSE; /* xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): Delete message on pressing back, * if it has not been saved. (Otherwise, it appears in the Unsent messages folder) */ if(g_M4_message_saved == FALSE) { g_event_struct.handler = Handler_MM_DeleteMessageEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; MM_DeleteMessageAsync((EVT_HANDLE) &g_event_struct, g_msg_id); } MMI_DestoryWindow(win); break; //x0012849 Feb-03-2005 MMI-SPR-28224 : //Handled the cases of scroll up and down case KCD_MNUDOWN: DAL_PostMessage(EMG4_ScrollDown,EMG4_Type_NotUsed,0,NULL); break; case KCD_MNUUP : DAL_PostMessage(EMG4_ScrollUp,EMG4_Type_NotUsed,0,NULL); break; default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: MMSCreate_start $Description: Start the creation of the main window for Create MMS $Returns: mfw window handler $Arguments: parent_window - Parent window handler menuAttr - Menu attributes. *******************************************************************************/ T_MFW_HND MMSCreate_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { TRACE_FUNCTION ("MMSCreate_start()"); //xrashmic 3 Nov, 2004 MMI-SPR-26145 //Storing the handle of the create window to delete later mms_create_hnd =MMI_CreateWindow(parent_window, (T_DIALOG_FUNC) MMSCreate_exec_cb, (void*)menuAttr,(MfwCb)MMSCreate_kbd_cb, 0,0); return mms_create_hnd ; } #define MMS_SEND_SUBJUCT_NUMBER static T_MFW_HND editor=NULL; //CRR: 25302 - xpradipg 10 Nov 2004 //global to hold the number editor handle static T_MFW_HND number_edit=NULL; static char number[MAX_PHB_NUM_LEN]; static char topic[MAX_MMS_TOPIC_LEN]="\0"; static void MMSCreate_SEND_edit_cb( T_MFW_HND win, USHORT Identifier,UBYTE reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_DISPLAY_DATA display_info; char temp[100]; TRACE_EVENT_P1("MMSCreate_SEND_edit_cb() %d", Identifier); switch (reason) { case INFO_KCD_LEFT: // confirm (press LEFT soft key) if (Identifier==E_MODE_TOPIC) { // subject input TRACE_EVENT_P1("topic: %s",topic); SEND_EVENT(win,E_MODE_NUMBER, 0, 0); // wait for getting number (below) and do it all together. } else if (Identifier==E_MODE_NUMBER) { // phone number input TRACE_EVENT_P2("topic: %s, number: %s",topic,number); //yanbin: Call magic4 function to send MMS, bbssoo - send MMS with the topic (subject) and number, then save the MMS. //topic: topic; //number: number; M4_DebugMessage(0x93000); //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 //This dialog screen is displayed as soon as the user selects the left softkey after entering the number to start sending MMS //xrashmic 08 Feb, 2005 MMI-SPR-27853 AUI_mms_status_notify(MMS_PLEASEWAIT); MMI_2_SaveHeaderInfo(topic,number); DAL_PostMessage(EMG4_SaveMsg, EMG4_Type_NotUsed, 0, 0); //DAL_PostMessage(EMG4_Exit,EMG4_Type_NotUsed,0,NULL); g_inSendMode=TRUE; M4_DebugMessage(0x93001); MMI_DestoryWindow(win); //CRR: 25302 - xpradipg 10 Nov 2004 //Number entry editor needs to be deleted explicitly AUI_edit_Destroy(number_edit); } else { TRACE_EVENT_P1("text: %s",text); M4_DebugMessage(0x92000); // rvf_delay(10); g_safeString.size=2*(strlen(text)+1); MMS_ConvertStringToUcs2((const MByte *)(text), strlen(text), g_insertString); g_safeString.pString=g_insertString; DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); //xrashmic 9 Nov, 2004 MMI-SPR-26147 //Text in the MMS message needs to be deleted, before inserting the edited text. DAL_PostMessage(EMG4_DeleteObject,EMG4_Type_NotUsed, EDeleteText,NULL); DAL_PostMessage(EMG4_InsertString, EMG4_Type_NotUsed, (MESSAGE_PARAM)&g_safeString, 0); // M4_DebugMessage(g_safeString.size); M4_DebugMessage(0x92001); // rvf_delay(10); MMI_DestoryWindow(win); //yanbin: Call magic4 function to insert text into MMS //text: text; // bbssoo - insert string to MMS message. } break; //CRR: 25302 - xpradipg 10 Nov 2004 //the alternate left softkey event is handled for the number entry screen case INFO_KCD_ALTERNATELEFT: bookPhonebookStart(win, PhbkFromMms); break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: //CRR: 25302 - xpradipg 10 Nov 2004 //The number editor needs to be explicitly destroyed on pressing back sk if(E_MODE_NUMBER == Identifier) AUI_edit_Destroy(number_edit); MMI_DestoryWindow(win); break; default: TRACE_EVENT("Err: Default"); break; } } // Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C // Fix: A global variable to store the Mms Number extracted from the message header. char MmsNumber[MAX_PHB_NUM_LEN]; /******************************************************************************* $Function: MMSCreate_SEND_exec_cb $Description: Callback handler for events sent by the window itself and to recieve the data $Returns: none $Arguments: win - current window event - event id Identifier - optional data parameter - optional data. *******************************************************************************/ static void MMSCreate_SEND_exec_cb(T_MFW_HND win, USHORT event, USHORT Identifier,void *parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_AUI_EDITOR_DATA editor_data; TRACE_FUNCTION ("MMSCreate_SEND_exec_cb()"); switch (event) { case MWM_CREATE: break; case E_MODE_TOPIC: AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, E_MODE_TOPIC, TRUE, FOREVER, (T_AUI_EDIT_CB)MMSCreate_SEND_edit_cb); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtTopics, NULL); AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack); AUI_edit_SetMode(&editor_data,ED_MODE_ALPHA, ED_CURSOR_UNDERLINE); //void AUI_edit_SetBuffer(T_AUI_EDITOR_DATA *editor_data, UBYTE dcs, UBYTE *text, USHORT size) //void AUI_edit_SetBuffer(T_AUI_EDITOR_DATA *editor_data, UBYTE dcs, UBYTE *text, USHORT size); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII,(UBYTE*) topic, sizeof(topic)); editor = AUI_edit_Start(win, &editor_data); break; case E_MODE_NUMBER: TRACE_EVENT("enter number"); //CRR: 23942 - xpradipg 26 Aug 2004 //comment the hardcoded string. This will display an empty number editor. //strcpy(number,"01705713488");//"13816687053");//13801639314 //strcpy(number,"+38516610401"); //CRR: 25302 - xpradipg 10 Nov 2004 // The editor attributes are changed to hold alternate strings AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, PHNO_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, E_MODE_NUMBER, FALSE, FOREVER, (T_AUI_EDIT_CB)MMSCreate_SEND_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); memset(number,'\0', sizeof(number)); //Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C //Fix: Get only the 13digits corresponding to the senders phone number from the senders address strncpy(number,MmsNumber,13); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE*)number, sizeof(number)); number_edit = AUI_edit_Start(win, &editor_data); break; case E_MODE_TEXT: TRACE_EVENT("enter text"); AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, E_MODE_TEXT, TRUE, FOREVER, (T_AUI_EDIT_CB)MMSCreate_SEND_edit_cb); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtMessage, NULL); AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack); AUI_edit_SetMode(&editor_data,ED_MODE_ALPHA, ED_CURSOR_UNDERLINE); //CRR: 23942 - xpradipg 26 Aug 2004 //reset the text buffer //xrashmic 9 Nov, 2004 MMI-SPR-26147 //Moved it to MMCreate_exec_cb MWM_CREATE as the user should be able to edit the inserted text. Hence we need to // retain the data in "text" buffer. //memset(text,'\0',MAX_MMS_TEXT_LEN); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE*)text, sizeof(text)); editor = AUI_edit_Start(win, &editor_data); break; // case PHBK_ID: //CRR: 25302 - xpradipg 10 Nov 2004 //handle the even sent back by the phone number module case MMS_EMS_PHBK_NUMBER: MmsSend_PHBK_exec_cb(number_edit, event, parameter); break; case MWM_ONDRAW: break; case MWM_DESTORY: break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: MMSCreate_SEND_start $Description: Create SMS send window $Returns: execution status $Arguments: parent_window - parent window. UserData - SMS data *******************************************************************************/ T_MFW_HND MMSCreate_SEND_start(T_MFW_HND parent_window, void *UserData) { T_MFW_HND win; TRACE_FUNCTION ("MMSCreate_SEND_start()"); win=MMI_CreateWindow(parent_window, (T_DIALOG_FUNC) MMSCreate_SEND_exec_cb, (void*)UserData,0, 0,0); if(UserData) SEND_EVENT(win, (USHORT)UserData, 0, 0); return win; } //CRR:23923 - xpradipg 06 Sept 2004 /******************************************************************************* $Function: MMSCreate_Prev_exec_cb $Description: Callback handler for events sent by the window itself $Returns: none $Arguments: win - current window event - event id parameter - optional data. *******************************************************************************/ void MMSCreate_Prev_exec_cb(T_MFW_HND win, USHORT event, SHORT value, void * parameter) /* callback handler for events sent to to trigger execution */ { TRACE_FUNCTION ("MMSBox_read_exec_cb()"); switch (event) { case MWM_CREATE: g_M4_display_active = TRUE; break; case MWM_ONDRAW: dspl_Enable(0); dspl_SetBgdColour(COL_White); dspl_ClearAll(); DAL_PostMessage(EMG4_Resume,EMG4_Type_NotUsed,0,NULL); //xrashmic 6 Oct, 2004 MMI-SPR-25147 //EMG4_Preview does not require any EPlayModeRun. DAL_PostMessage(EMG4_Preview, EMG4_Type_NotUsed, 0, 0); displaySoftKeys(TxtNull,TxtSoftBack); dspl_Enable(1); break; case MWM_DESTORY: DAL_PostMessage(EMG4_Suspend,EMG4_Type_NotUsed,0,NULL); //xrashmic 6 Oct, 2004 MMI-SPR-25147 //Exiting the Preview screen, the editor should be in editable mode. DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); g_M4_display_active=FALSE; break; case MWM_SUSPEND: g_M4_display_active=FALSE; DAL_PostMessage(EMG4_Suspend,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_Preview,EMG4_Type_NotUsed, EPlayModeStop,NULL); break; case MWM_RESUME: g_M4_display_active=TRUE; DAL_PostMessage(EMG4_Resume,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_Refresh, EMG4_Type_NotUsed, 0, 0); break; default: break; } } //CRR:23923 - xpradipg 06 Sept 2004 /******************************************************************************* $Function: MMSCreate_Prev_start $Description: Create Preview window $Returns: window handler $Arguments: parent_window - parent window. menuAttr - Menu attributes *******************************************************************************/ T_MFW_HND MMSCreate_Prev_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { return MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSCreate_Prev_exec_cb,(void*)menuAttr,(T_MFW_CB)MMSBox_Read_kbd_cb,0,0); } #define MMS_CREATE_OPTION /******************************************************************************* $Function: MMSCreate_OPTexeSend $Description: Called when the user press send in the Option menu $Returns: event status. $Arguments: m - pointer to menu. i - index if selected menu item. *******************************************************************************/ static int MMSCreate_OPTexeSend(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); MMSCreate_SEND_start(win, (void*)E_MODE_TOPIC); } //CRR:23923 - xpradipg 06 Sept 2004 /******************************************************************************* $Function: MMSCreate_OPTpreviewMsg $Description: Called when the user press Preview in the Option menu $Returns: event status. $Arguments: m - pointer to menu. i - index if selected menu item. *******************************************************************************/ static int MMSCreate_OPTpreviewMsg(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); MMSCreate_Prev_start(win,NULL); } static int MMSCreate_OPTexeInsPicture(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); MMSom_start(win, (MfwMnuAttr *) MMS_INSERT_PICTURE); } static int MMSCreate_OPTexeInsSound(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); MMSom_start(win, (MfwMnuAttr *) MMS_INSERT_SOUND); } static int MMSCreate_OPTexeInsText(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); MMSCreate_SEND_start(win, (void*)E_MODE_TEXT); } static int MMSCreate_OPTexeSave(MfwMnu* m, MfwMnuItem* i) { //xrashmic 6 Oct, 2004 MMI-SPR-25147 //The Messages are saved only in EDIT mode. DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_SaveMsg, EMG4_Type_NotUsed, 0, 0); //xreddymn Aug-18-2004 MMI-SPR-24113 (TII_MMS53): To keep track of saved messages g_inSaveMode=TRUE; // xreddymn Nov-26-2004 MMI-SPR-25278: Display an "In Progress" screen //xrashmic 08 Feb, 2005 MMI-SPR-27853 //Added few more parameters for this function g_inSaveModeWin=information_dialog(TxtPleaseWait,TxtNull,NULL,NULL, TxtNull,TxtNull,FOREVER,0,NULL); } static int MMSCreate_OPTexeInsSlide(MfwMnu* m, MfwMnuItem* i) { TRACE_EVENT("insert pic into OM"); M4_InsertPicObjectIntoOM(); } //CRR: 25302 - xpradipg 10 Nov 2004 /******************************************************************************* $Function: MmsSend_PHBK_exec_cb $Description: Populates the text structure with the phone Number and sends an event to update the editor buffer $Returns: $Arguments: *******************************************************************************/ void MmsSend_PHBK_exec_cb(T_MFW_HND win, USHORT event, void *parameter) { #ifdef NEW_EDITOR T_ATB_TEXT text; /* Used to insert phone numbers into editors */ #endif TRACE_FUNCTION ("MmsSend_PHBK_exec_cb()"); switch (event) { /* SPR#1428 - SH - New Editor changes. Insert phone number into editor */ #ifdef NEW_EDITOR case MMS_EMS_PHBK_NUMBER: /* Service centre number */ text.dcs = ATB_DCS_ASCII; text.len = strlen((char *)parameter); text.data = (UBYTE *)parameter; SEND_EVENT(number_edit, E_ED_INSERT, 0, (void *)&text); break; #endif /* NEW_EDITOR */ break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: MMSCreate_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 MMSCreate_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; TRACE_FUNCTION ("MMSCreate_OPT_exec_cb()"); switch (event) { case MWM_CREATE: TRACE_EVENT("MWM_CREATE"); /* initialization of administrative data */ winShow(win); break; case MWM_ONDRAW: dspl_ClearAll(); displaySoftKeys(TxtSoftOK,TxtSoftBack); break; case MWM_DESTORY: //xrashmic 20 Dec, 2004 MMI-SPR-23921 // On deleting the window, set the handler to NULL mms_create_opt_hnd=NULL; break; default: return; } } /******************************************************************************* $Function: MMSCreate_OPT_start $Description: Start the creation of the main window for Create MMS $Returns: mfw window handler $Arguments: parent_window - Parent window handler menuAttr - Menu attributes. *******************************************************************************/ T_MFW_HND MMSCreate_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { TRACE_FUNCTION ("MMSCreate_OPT_start()"); //xrashmic 3 Nov, 2004 MMI-SPR-26145 //Storing the handle of the options window to delete later mms_create_opt_hnd = MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSCreate_OPT_exec_cb,(void*)menuAttr, (T_MFW_CB)0, &MMSCreate_OPTAttrib,0); return mms_create_opt_hnd; } #define MMS_DELETE_PICTURE 0 #define MMS_DELETE_SOUND 1 #define MMS_DELETE_TEXT 2 static void MMSCreate_Delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) { TRACE_FUNCTION("MMSCreate_Delete_cb"); switch (reason) { case INFO_KCD_LEFT: switch(identifier) { case MMS_DELETE_PICTURE: DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_DeleteObject,EMG4_Type_NotUsed, EDeleteImage,NULL); break; case MMS_DELETE_SOUND: DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_DeleteObject,EMG4_Type_NotUsed, EDeleteAudio,NULL); break; case MMS_DELETE_TEXT: DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_DeleteObject,EMG4_Type_NotUsed, EDeleteText,NULL); //xrashmic 9 Nov, 2004 MMI-SPR-26147 //The text buffer should be reset when the text data //is deleted in the MMS message memset(text,'\0',MAX_MMS_TEXT_LEN); break; } MMI_DestoryWindow(win); break; case INFO_KCD_HUP: case INFO_KCD_RIGHT: case INFO_KCD_CLEAR: MMI_DestoryWindow(win); break; default: break; } } static int MMSCreate_OPTexeDelPicture(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_DISPLAY_DATA display_info; dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSCreate_Delete_cb, FOREVER, KEY_LEFT |KEY_RIGHT|KEY_CLEAR|KEY_HUP); display_info.Identifier=MMS_DELETE_PICTURE; info_dialog (win, &display_info); } static int MMSCreate_OPTexeDelSound(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_DISPLAY_DATA display_info; dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSCreate_Delete_cb, FOREVER, KEY_LEFT |KEY_RIGHT|KEY_CLEAR|KEY_HUP); display_info.Identifier=MMS_DELETE_SOUND; info_dialog (win, &display_info); } static int MMSCreate_OPTexeDelText(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_DISPLAY_DATA display_info; dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSCreate_Delete_cb, FOREVER, KEY_LEFT |KEY_RIGHT|KEY_CLEAR|KEY_HUP); display_info.Identifier=MMS_DELETE_TEXT; info_dialog (win, &display_info); } void FUN_TRACE_EVENT(char * text, unsigned long param) { TRACE_EVENT_P1(text, param); } /******************************************************************************* $Function: Handler_Fwd_CreateMessageEntryAsync $Description: Callback function for MM_CreateMessageEntryAsync for forward. //xrashmic 14 Dec, 2004 MMI-SPR-23921 $Returns: None. $Arguments: *******************************************************************************/ ESTATUS Handler_Fwd_CreateMessageEntryAsync(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle) { ESTATUS eResult; //Using the same create editor event handler for forward editor g_doc_event_struct.handler = MMI_1_EventHandler; g_doc_event_struct.parentEvtHandle = NULL; g_doc_event_struct.pData = NULL; g_doc_event_struct.userFlag = 0; g_msg_id= (MM_MESSAGE_ID) ampParam; eResult = DAL_OpenDocument((EVT_HANDLE) &g_doc_event_struct, g_pMessageHeaderList->ppList[g_currentMessage].id, g_msg_id); } /******************************************************************************* $Function: MMSBox_Forward $Description: Creating a new Id for the MMS message being forwarded //xrashmic 14 Dec, 2004 MMI-SPR-23921 $Returns: None. $Arguments: *******************************************************************************/ void MMSBox_Forward(void) { ESTATUS eResult; MDword MessageID = g_pMessageHeaderList->ppList[g_currentMessage].id; TRACE_FUNCTION ("MMSBox_Forward()"); eResult = DAL_RetrieveMessageHeader(MessageID,&fwd_msg_header); fwd_msg_header->location = EMlDraft; g_event_struct.handler = Handler_Fwd_CreateMessageEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; eResult=MM_CreateMessageEntryAsync((EVT_HANDLE) &g_event_struct, fwd_msg_header); g_safeString.memHeader.freeFunc = DummyFreeFunc; /*!< Pointer to memory deallocation function */ g_safeString.size=10; /*!< size of the string */ g_safeString.pString=g_insertString; /*!< Pointer to UCS2 string */ } /******************************************************************************* $Function: MMSFwd_exec_cb $Description: Event handler for the MMS forward window //xrashmic 14 Dec, 2004 MMI-SPR-23921 $Returns: None. $Arguments: *******************************************************************************/ void MMSFwd_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; TRACE_FUNCTION ("MMSFwd_exec_cb()"); switch (event) { case MWM_CREATE: //xrashmic 14 Dec, 2004 MMI-SPR-23921 // Create a new Msg ID, Open the editor and copy the message being forwarded, into this editor. MMSBox_Forward(); //xrashmic 9 Nov, 2004 MMI-SPR-26147 //The text buffer is memset to '\0' only once at the time of MMS create - MWM_CREATE memset(text,'\0',MAX_MMS_TEXT_LEN); g_M4_display_active=TRUE; // xreddymn Feb-02-2005 MMI-SPR-28277: This is set to TRUE when forwarding MMS messages gMmsForwardStart=TRUE; break; case MWM_ONDRAW: TRACE_EVENT("MWM_ONDRAW"); dspl_Enable(0); { unsigned short width, height; DeviceGetScreenMetrics(&width,&height); dspl_SetBgdColour(COL_White); dspl_Clear(0, gucMmsTitleBarHeight, width-1, height-1); resources_setTitleColour(COLOUR_EDITOR); dspl_Clear(0, 0, width-1, gucMmsTitleBarHeight-1); dspl_TextOut(1, 0, DSPL_TXTATTR_HLIGHT,"Forwarding MMS"); } //yanbin: here call Magic4 functions to show MMS slides // bbssoo - After Creating MMS, display the "create MMS display" in the middle screen. // xreddymn Mar-08-2005 MMI-SPR-28820: changed order of posting // EMG4_Preview and EMG4_Resume. // When forwarding MMS, the first Preview-Resume occurs // through the callback MMI_1_EventHandler if(FALSE == gMmsForwardStart) { action_PreviewMessage(); action_ResumeEditor(); } //xrashmic 6 Oct, 2004 MMI-SPR-25147 //comenting action_SuspendEditor() as the Sound was not heard in the //compose screen //action_SuspendEditor(); displaySoftKeys(TxtSoftOptions,TxtSoftBack); dspl_Enable(1); break; case MWM_DESTORY: TRACE_EVENT("MWM_DESTROY"); //xreddymn Sep-16-2004: Changes related to MMI-SPR-24735 dspl_Enable(1); DAL_PostMessage(EMG4_Exit, EMG4_Type_NotUsed, 0, 0); //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): BMI will now use the display g_M4_display_active=FALSE; //xrashmic 20 Dec, 2004 MMI-SPR-23921 // On deleting the window, set the handler to NULL mms_Fwdcreate_hnd=NULL; break; case MWM_SUSPEND: TRACE_EVENT("MWM_SUSPEND"); //xreddymn Sep-16-2004: Changes related to MMI-SPR-24735 dspl_Enable(1); //xreddymn Aug-16-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): BMI will now use the display g_M4_display_active=FALSE; // xreddymn Sep-03-2004 MMI-SPR-23961 DAL_PostMessage(EMG4_Suspend,EMG4_Type_NotUsed,0,NULL); DAL_PostMessage(EMG4_PlayMode,EMG4_Type_NotUsed, EPlayModeStop,NULL); //xrashmic 6 Oct, 2004 MMI-SPR-25147 //The editor needs to be in EDIT mode when inserting, Saving, etc. DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL); break; case MWM_RESUME: TRACE_EVENT("MWM_RESUME"); //xreddymn Aug-16-2004: M4 client will now use the display g_M4_display_active=TRUE; break; default: break; } } /******************************************************************************* $Function: MMSFwd_kbd_cb $Description: Keyboard handler for the MMS forward window //xrashmic 14 Dec, 2004 MMI-SPR-23921 $Returns: None. $Arguments: *******************************************************************************/ static int MMSFwd_kbd_cb (MfwEvt e, MfwKbd *k) { T_MFW_HND win = mfwParent(mfw_header()); TRACE_FUNCTION ("MMSFwd_kbd_cb()"); if (e & KEY_LONG) { switch (k->code) { case KCD_HUP: /* back to previous menu */ //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 //Once outside the MMS create screen, this flag needs to be unset MMSactive=FALSE; if(g_M4_message_saved == FALSE) { g_event_struct.handler = Handler_MM_DeleteMessageEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; MM_DeleteMessageAsync((EVT_HANDLE) &g_event_struct, g_msg_id); } MMI_DestoryWindow(win); 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_MNUSELECT: case KCD_LEFT: MMSCreate_OPT_start(win,0); break; case KCD_HUP: /* back to previous menu */ case KCD_RIGHT: /* back to previous menu */ //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 //Once outside the MMS create screen, this flag needs to be unset MMSactive=FALSE; if(g_M4_message_saved == FALSE) { g_event_struct.handler = Handler_MM_DeleteMessageEntryAsync; g_event_struct.parentEvtHandle = NULL; g_event_struct.pData = NULL; g_event_struct.userFlag = 0; MM_DeleteMessageAsync((EVT_HANDLE) &g_event_struct, g_msg_id); } MMI_DestoryWindow(win); break; case KCD_MNUUP: //x0012849 Feb-03-2005 MMI-SPR-28224 //send the scrollup event to see the contents above the screen DAL_PostMessage(EMG4_ScrollUp,EMG4_Type_NotUsed,0,NULL); break; case KCD_MNUDOWN: //x0012849 Feb-03-2005 MMI-SPR-28224 //send the scrolldown event to see the contents below the screen DAL_PostMessage(EMG4_ScrollDown,EMG4_Type_NotUsed,0,NULL); break; case KCD_MNULEFT: case KCD_MNURIGHT: break; return MFW_EVENT_CONSUMED; } } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: MMSFwd_start $Description: Creates Forward window for the selected MMS. //xrashmic 14 Dec, 2004 MMI-SPR-23921 $Returns: None. $Arguments: *******************************************************************************/ T_MFW_HND MMSFwd_start(void) { T_MFW_HND win = mfwParent(mfw_header()); TRACE_FUNCTION ("MMSCreate_start()"); mms_Fwdcreate_hnd=MMI_CreateWindow(win, (T_DIALOG_FUNC) MMSFwd_exec_cb, NULL,(MfwCb)MMSFwd_kbd_cb, 0,0); return mms_Fwdcreate_hnd; } #undef MMI_MMSCREATE_C