📄 mmishortcutmnu.c
字号:
/*******************************************************************************
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: eg730
$Project code: BMI (6349)
$Module: shortcut menu
$File: mmishortcutmnu.c
$Revision: 1.0
$Author: zhangxp
$Date: 09/14/02
********************************************************************************
Description
********************************************************************************/
/*******************************************************************************
History
Date Modified
09/14/02
*******************************************************************************/
/*******************************************************************************
Include files
*******************************************************************************/
#define ENTITY_MFW
/* includes */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#if defined (NEW_FRAME)
#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"
#else
#include "stddefs.h"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"
#endif
#include "pconst.cdg"
#include "mconst.cdg"
#include "message.h"
#include "ccdapi.h"
#include "prim.h"
#include "cus_aci.h"
#include "cnf_aci.h"
#include "mon_aci.h"
#include "tok.h"
#include "pcm.h"
#include "mfw_sys.h"
#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
#include "mfw_lng.h"
#include "mfw_edt.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_tim.h"
#include "mfw_sim.h"
#include "mfw_cm.h"
#include "mfw_nm.h"
#include "mfw_phb.h"
#include "mfw_mme.h"
#include "mfw_sat.h"
#include "mfw_sms.h"
#include "dspl.h"
#include "ksd.h"
#include "psa.h"
#include "MmiMain.h"
#include "MmiBookController.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiLists.h"
#include "Mmibookshared.h"
#include "Mmisettings.h"
#include "Mmishortcutmnu.h"
#include "MmiMenu.h"
#include "MmiCall.h"
#include "MmiIcons.h"
#include "MmiIdle.h"
#include "MmiSoftKeys.h"
#include "MmiSounds.h"
#include "MmiIdle.h"
#include "MmiNetwork.h"
#include "MmiSat_i.h"
#include "MmiAoc.h"
#include "gdi.h"
#include "audio.h"
#include "cus_aci.h"
#include "p_sim.h"
#include "mfw_ffs.h"
#include "MmiTimers.h"
#include "Mmismsmenu.h"
#include "Mmismssend.h"
#include "Mmibookcontroller.h"
#include "Mmibookphonebook.h"
#include "Mmischedule.h"
#include "Mmitoolkit.h"
#include "Mmiservices.h"
#include "mmiiconresource.h"/* 2004/06 sunsj modify for icon manage */
#include "p_sim.h"
/*#ifdef _INNOVATION_EMULATOR_
#define TRACE_FUNC
#endif*/
//UINT8 shortcutmenu_flag;
static unsigned int wordstrlen(const unsigned short *ws)
{
const unsigned short *wr = ws - 1;
while(*++wr);
return wr - ws;
}
static unsigned short *wordstrcat(unsigned short *ws1, const unsigned short *ws2)
{
unsigned short *result = ws1;
while(*ws1++); /* FIND END OF STRING */
--ws1; /* BACK UP OVER NULL */
while(*ws1++ = *ws2++); /* APPEND SECOND STRING */
return result;
}
static MfwMnuAttr ShortCutMnu_menuAttrib =
{
0,
&menuListArea,
MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */
-1, /* use default font */
NULL, /* with these items */
0 /* number of items */
};
static T_MFW_HND ShortCutMnu_create (T_MFW_HND parent);
static void ShortCutMnu_exec_cb( T_MFW_HND win, USHORT event, SHORT value, void *parameter );
static int ShortCutMnu_win_cb (MfwEvt e, MfwWin *w) ;
static void ShortCutMenulist_cb(T_MFW_HND * Parent, ListMenuData * ListData);
static T_MFW_HND FunctionMenuCreate(T_MFW_HND parent);
static void FunctionMenuDialog( T_MFW_HND win, USHORT event, SHORT value, void *parameter );
static int FunctionMenuWindowCB( MfwEvt e, MfwWin *w );
static int FunctionMenuKbdCB( MfwEvt e, MfwKbd *k );
static int FunctionMenuMenuCB( MfwEvt e, MfwMnu *m );
T_MFW_HND ShortCutMnu_Start(T_MFW_HND parent)
{
T_MFW_HND win;
TRACE_EVENT ("ShortCutMnu_Start()");
win = ShortCutMnu_create (parent);
if(win NEQ NULL)
{
SEND_EVENT (win,MNU_INIT, 0, 0);
}
return win;
}
static T_MFW_HND ShortCutMnu_create (T_MFW_HND parent)
{
T_MFW_WIN *parent_win_data = ( (T_MFW_HDR *) parent )->data;
T_SHORTCUTMNU_INFO *data;
T_MFW_WIN * win;
TRACE_EVENT ("ShortCutMnu_create()");
if(( data = (T_SHORTCUTMNU_INFO *) ALLOC_MEMORY( sizeof( T_SHORTCUTMNU_INFO ) ) ) == NULL)
{
// TRACE_FUNC("alloc shortcutmenu failed");/*2003/12/10, wangyan delete trace*/
return NULL;
}
/*
* Create window handler
*/
data->win =winCreate( parent, 0, MfwWinVisible, (MfwCb)ShortCutMnu_win_cb);
if(data->win EQ NULL)
{
return NULL;
}
/*
* connect the dialog data to the MFW-window
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)ShortCutMnu_exec_cb;
data->mmi_control.data = data;
data->parent = parent;
win = ((T_MFW_HDR *)data->win)->data;
win->user = (void *)data;
data->Listmnu_pos = 0; //xsf add to record the position of quick function before exeuting it 12.30
winShow(data->win);
/*
* return window handle
*/
return data->win;
}
static void ShortCutMnu_exec_cb( T_MFW_HND win, USHORT event, SHORT value, void *parameter )
{
T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data;
T_SHORTCUTMNU_INFO *data = (T_SHORTCUTMNU_INFO *) win_data->user;
T_MFW_HND parent_win =data->parent;
int numberOfscmenus,i,index;
char * titleStr;
char temp[100];
TRACE_EVENT( "ShortCutMnu_exec_cb()" );
switch(event)
{
case MNU_INIT:
{// sprintf(temp,"txtR:0x%x",TxtReadSms);
// memset(temp,0,sizeof(temp));
// strcat(temp,(char*)TxtReadSms);
//TRACE_EVENT((char*)TxtReadSms);
// sprintf(temp,"txtF:0x%x",TxtFunctionSelect);
// memset(temp,0,sizeof(temp));
// strcat(temp,(char*)TxtFunctionSelect);
//TRACE_EVENT((char*)TxtFunctionSelect);
// shortcutmenu_flag=1;
if(data->menu_options_win!=NULL)
{
FunctionMenuDestroy(data->menu_options_win);
data->menu_options_win=NULL;
}
if(data->menu_list_data!=NULL)
{
listsDestroy(data->menu_list_data->win);
numberOfscmenus=wordstrlen(data->scmenu);
FREE_MEMORY ((void *)data->menu_list_data->List, numberOfscmenus * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
data->menu_list_data=NULL;
}
data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
if(data->menu_list_data == 0)
{
TRACE_EVENT("Failed memory alloc 1 ");
return;
}
/*if(wordstrlen(FFS_flashData.shortcutmenu_buffer)==0)
FFS_flashData.shortcutmenu_buffer[0]=TxtFunctionSelect;
else FFS_flashData.shortcutmenu_buffer[wordstrlen(FFS_flashData.shortcutmenu_buffer)-1]=TxtFunctionSelect;
flash_write();*/
numberOfscmenus = wordstrlen(FFS_flashData.shortcutmenu_buffer); //xsf changed 2002.12.29
memset(data->scmenu,0,sizeof(data->scmenu));
index = 0;
for(i = 0; i < numberOfscmenus; i++)
{
switch(FFS_flashData.shortcutmenu_buffer[i])
{
case TxtScene:
case TxtSendSms:
case TxtReadSms:
case TxtMemory:
case TxtMissedCalls:
case TxtRejectCalls:
case TxtIncomingCalls:
case TxtOutgoingCalls:
case TxtAlarm:
case TxtTimer:
case TxtStopwatch:
case TxtSchedule:
data->scmenu[index] = FFS_flashData.shortcutmenu_buffer[i];
index++;
break;
default:
break;
}
}
//memset(data->scmenu,0,sizeof(data->scmenu));
//wordstrcat(data->scmenu, FFS_flashData.shortcutmenu_buffer);
data->scmenu[index] = TxtFunctionSelect;
numberOfscmenus=wordstrlen(data->scmenu);
data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( numberOfscmenus * sizeof(T_MFW_MNU_ITEM) );
// sprintf(temp,"number:%d",numberOfscmenus);
// TRACE_EVENT(temp);
if(data->menu_list_data->List == 0)
{
TRACE_EVENT("Failed memory alloc 2");
return;
}
for(i = 0; i < numberOfscmenus; i++)
{
data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_LISTCOMMON, 0);//&colist;/* 2004/06 sunsj modify for icon manage */
data->menu_list_data->List[i].exta = 0;
data->menu_list_data->List[i].edit = 0;
data->menu_list_data->List[i].menu = 0;
data->menu_list_data->List[i].func = NULL;
data->menu_list_data->List[i].str=(char *)GET_TEXT(data->scmenu[i]);
data->menu_list_data->List[i].flagFunc = item_flag_none;
}
data->menu_list_data->ListLength = numberOfscmenus;
if(data->Listmnu_pos>0)
{
data->menu_list_data->ListPosition = data->Listmnu_pos+1;
data->menu_list_data->CursorPosition = data->Listmnu_pos+1;
}
else
{
data->menu_list_data->ListPosition = 1;
data->menu_list_data->CursorPosition = 1;
}
data->menu_list_data->SnapshotSize = numberOfscmenus;
data->menu_list_data->Font = 0;
data->menu_list_data->LeftSoftKey = TxtSoftSelect;
data->menu_list_data->RightSoftKey = TxtSoftBack;
data->menu_list_data->KeyEvents = KEY_ALL;
data->menu_list_data->Reason = 0;
data->menu_list_data->Strings = TRUE;
data->menu_list_data->Attr = &ShortCutMnu_menuAttrib;
data->menu_list_data->autoDestroy = FALSE;
data->menu_list_data->ListMenuFlag =1;
titleStr=(char *)GET_TEXT(TxtShortCutMenu);
data->menu_list_data->ListMenuHeadStr=titleStr;
TRACE_EVENT("before listdisplay");
//xsf add data->menu for list menu KCD_1__KCD_9 2003.02.18
data->menu = (T_MFW_HND)listDisplayListMenu(win, data->menu_list_data, (ListCbFunc)ShortCutMenulist_cb,0);
TRACE_EVENT("after listdisplay");
}
break;
case MNU_EXIT:
{
numberOfscmenus=wordstrlen(data->scmenu);
//sprintf(temp,"exit:%d",numberOfscmenus);
//TRACE_EVENT(temp);
if(data->menu_list_data != NULL)
{
TRACE_EVENT("freelist()");
FREE_MEMORY ((void *)data->menu_list_data->List, numberOfscmenus * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
data->menu_list_data=NULL;
}
ShortCutMnu_destroy(data->win);
}
break;
default: break;
}
}
/*******************************************************************************
$Function: ShortCutMenulist_cb
$Description: Callback function for the shortcut menu list.
$Returns: none
$Arguments: Parent - parent window.
ListData - Menu item list
*******************************************************************************/
static void ShortCutMenulist_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)Parent)->data;
T_SHORTCUTMNU_INFO * data = (T_SHORTCUTMNU_INFO *)win_data->user;
T_MFW_HND * l_parent;
T_SmsUserData SmsData;
U16 index;
U8 id;
char temp[100];
switch(ListData->Reason)
{
case LISTS_REASON_SELECT:
case LISTS_REASON_OK: //xsf add for list menu KCD_OK=KCD_LEFT 2003.02.18
{
index=ListData->CursorPosition;
data->Listmnu_pos = ListData->CursorPosition; //xsf add to record the position of quick function before exeuting it 12.30
// sprintf(temp,"index:%d",index);
// TRACE_EVENT(temp);
// sprintf(temp,"id:%d",(U16)(data->scmenu[index]));
// TRACE_EVENT(temp);
switch((U16)(data->scmenu[index]))
{
case TxtScene:
data->menu_options_win=FunctionMenuStart(data->win, SceneMenuAttributes(),SceneEntry);
break;
case TxtSendSms:
/* Copy the number and name information to the SMS buffer
*/
SmsData.TextBuffer[0] = '\0';
SmsData.NumberBuffer[0]='\0'; //set the number to null.
SmsData.called_from_reply_item = FALSE;
SmsData.Send_state =E_SEND;
SmsSend_SEND_start(data->win, (T_SmsUserData *) &SmsData);
break;
case TxtReadSms:
data->menu_options_win=FunctionMenuStart(data->win, menuReadMsgAttributes(),SmsReadEntry);
break;
case TxtMemory:
GetCurrentMemory();
break;
case TxtIncomingCalls:
GetLRNrecordStart(data->win);
break;
case TxtOutgoingCalls:
GetLDNrecordStart(data->win);
break;
case TxtMissedCalls:
GetLMNrecordStart(data->win);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -