mmisounds.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 2,146 行 · 第 1/5 页
C
2,146 行
data->menu_list_data->List[i].menu = 0;
data->menu_list_data->List[i].func = NULL;
data->menu_list_data->List[i].str=(char*)tUserRing.filename[i-numberOfMelodies+1];
data->menu_list_data->List[i].Dynamicindex=i;//chenjun add for MelodymenuItemCheck() use. user ring ,2003-01-10
data->menu_list_data->List[i].flagFunc = MelodymenuItemCheck;
}// 2003-01-09 user ring,add
//changed former to following grouping ring ==none, depart from the round
//for (i = 0; i < numberOfMelodies; i++), now is for (i = 0; i < numberOfMelodies-1 ; i++) + this
{
i=numberOfMelodies+numberOfUserMelodies-1;
/* 2004/06 sunsj modify for picture manage */
data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_SITUATION, 0);//&situationIcon;
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*)MmiRsrcGetText(TxtmelodyNone/*MelodyTable[14]*/); //TxtmelodyNone,
data->menu_list_data->List[i].Dynamicindex=i;//add for MelodymenuItemCheck() use. user ring ,2003-01-10
data->menu_list_data->List[i].flagFunc = MelodymenuItemCheck;
}
data->menu_list_data->ListLength =numberOfMelodies+numberOfUserMelodies; //2003-01-09 user ring,add
data->menu_list_data->ListPosition = numberOfMelodies+numberOfUserMelodies-2; //2003-01-09 user ring,add
data->menu_list_data->CursorPosition = numberOfMelodies+numberOfUserMelodies-2; //2003-01-09 user ring,add
data->menu_list_data->SnapshotSize = numberOfMelodies+numberOfUserMelodies; //2003-01-09 user ring,add
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;//FALSE;
data->menu_list_data->Attr = &melody_menuAttrib;
data->menu_list_data->autoDestroy = FALSE;
data->menu_list_data->ListMenuFlag =1;
data->menu_list_data->ListMenuHeadStr = (char *) MmiRsrcGetText(TxtMelody);
}
else
{
data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( (numberOfMelodies+numberOfUserMelodies-1) * sizeof(T_MFW_MNU_ITEM) );
if( data->menu_list_data->List == 0 )
{
MMI_TRACE_EVENT(("Failed memory alloc 2"));
if( data->menu_list_data NEQ 0 )
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
return;
}
for( i = 0; i < (numberOfMelodies-1) ; i++ )
{
/* 2004/06 sunsj modify for picture manage */
data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_SITUATION, 0);//&situationIcon;//changed 02/12/29
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 *) MelodyTable[i];
data->menu_list_data->List[i].str=(char*)MmiRsrcGetText(MelodyTable[i]);
data->menu_list_data->List[i].Dynamicindex=i;//chenjun add for MelodymenuItemCheck() use. user ring ,2003-01-10
data->menu_list_data->List[i].flagFunc = MelodymenuItemCheck;
}
for( i=numberOfMelodies-1;i<numberOfMelodies+numberOfUserMelodies-1;i++ )
{
/* 2004/06 sunsj modify for picture manage */
data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_SITUATION, 0);//&situationIcon;
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*)tUserRing.filename[i-numberOfMelodies+1];
data->menu_list_data->List[i].Dynamicindex=i;//chenjun add for MelodymenuItemCheck() use. user ring ,2003-01-10
data->menu_list_data->List[i].flagFunc = MelodymenuItemCheck;
}//chenjun 2003-01-09 user ring,add
data->menu_list_data->ListLength =numberOfMelodies+numberOfUserMelodies-1;//chenjun 2003-01-09 user ring
data->menu_list_data->ListPosition = 1;
data->menu_list_data->CursorPosition = 1;
data->menu_list_data->SnapshotSize = numberOfMelodies+numberOfUserMelodies-1;//chenjun 2003-01-09 user ring
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;//FALSE;//chenjun
data->menu_list_data->Attr = &melody_menuAttrib;
data->menu_list_data->autoDestroy = FALSE;
data->menu_list_data->ListMenuFlag =1;
data->menu_list_data->ListMenuHeadStr = (char *) MmiRsrcGetText(TxtMelody);
}
listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MelodyList_cb,0);
break;
case E_START_MELODY:
// User has scrolled the Melody list, stop old melody and start playing new melody.
MMI_TRACE_EVENT(("glowing: melody_exec_cb-E_START_MELODY"));
//if (melody_status==MELODY_BUSY)
StopPlayingMelody2( ); //glowing: modify it as the new api
//StopMelody2(oldringstr);
//memset(currentringstr, '\0', 20);
numberOfMelodies=resource_GetListCount(RES_MELODY);
//PTRACE( sprintf( buf, "glowing: MenuData.ListPosition: %d", mnu_data->MenuData.ListPosition ); )
if( !strcmp(mnu_data->MenuData.List[mnu_data->MenuData.ListPosition].str,(char*)MmiRsrcGetText(TxtmelodyNone)) )
break; //add for user ring, this deal none in grouping ring 2003-01-11
//{
// strncpy(currentringstr,MelodyTablestr[/*j*/mnu_data->MenuData.ListPosition],strlen(MelodyTablestr[/*j*/mnu_data->MenuData.ListPosition]));
//}
curMelodyId = mnu_data->MenuData.ListPosition; //glowing: replace it with currentringstr
//MmiTrace("chenjun currentringstr in exec_cb:");
//MmiTrace(currentringstr);
timStart(hRingerStartTimer);
break;
case E_RETURN:
//stop playing the melody stopPlayingMelody();
//if (melody_status==MELODY_BUSY)
StopPlayingMelody2( );
//StopMelody2(oldringstr);
timStop(hRingerStartTimer);
gPlayKeytoneFlag = 1;
break;
default:
break;
}
}
/*******************************************************************************
$Function: MelodyList_cb
$Description: Callback function for the melody list.
$Returns: none
$Arguments: Parent - parent window.
ListData - Menu item list
*******************************************************************************/
void MelodyList_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)Parent)->data;
T_MELODY_INFO * data = (T_MELODY_INFO *)win_data->user;
//T_MFW_HND * l_parent;
MMI_TRACE_EVENT(("glowing: MelodyList_cb-enter"));
if( (ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR)
|| (ListData->Reason EQ LISTS_REASON_HANGUP) ) // added hangup key
{
soundReason=SoundsNone; //add 2002.09.28
//if (melody_status==MELODY_BUSY)
//{
//StopMelody2(oldringstr);
StopPlayingMelody2( ); //glowing: use the new api 2003-12-01
//}
if( hRingerStartTimer != NULL )
timDelete(hRingerStartTimer); //add 2003.01.22
driverFlag&=0xFFFFFFFB; //add for KCD_LEFT 2003.01.14
listsDestroy(ListData->win); //moved from the end of this function for LISTS_REASON_UPDATE 2002.09.04
melody_destroy(data->sounds_win);
}
else if( (ListData->Reason EQ LISTS_REASON_SELECT) || (ListData->Reason EQ LISTS_REASON_OK) ) //xsf add for list menu KCD_OK=KCD_LEFT 2003.02.18
{
switch( soundReason )
{
case MelodySelect:
if( melody_status==MELODY_IDLE ) //add 2003.01.22
timStart(hRingerStartTimer);
FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].ringtype=ListData->ListPosition;
flash_environmentwrite();
break;
case SettingSMSTone:
StopPlayingMelody2( ); //glowing: use the new api 2003-12-01
//stopPlayingMelody();
break;
case SettingAlarm:
if( melody_status==MELODY_IDLE ) //add 2003.01.22
timStart(hRingerStartTimer);
FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].alarmtype=ListData->ListPosition;
flash_environmentwrite();
break;
case SettingPHBKGrouping:
{
FFS_PBOtherData.GroupingItem[RingSelect].GroupingRing=ListData->ListPosition;
flash_PBOtherWrite("PBOption");
}
break;
default:
break;
}
winShow(ListData->win); //xsf add 2002.09.05
// Store selected melody in PCM storage.
}
}
/*******************************************************************************
$Function: melody_destroy
$Description: Destroy the melody window.
$Returns: none
$Arguments: own_window- current window
*******************************************************************************/
static void melody_destroy(MfwHnd own_window)
{
T_MFW_WIN * win_data;
T_MELODY_INFO * data;
UBYTE numberOfMelodies;
UBYTE i;
//TRACE_EVENT ("melody_destroy()");
if( own_window )
{
win_data = ((T_MFW_HDR *)own_window)->data;
data = (T_MELODY_INFO *)win_data->user;
if( data )
{
/*
* Delete WIN handler
*/
win_delete (data->sounds_win);
gPlayKeytoneFlag = 1; //glowing,2003-12-15, enable Play Keytone
/*
* Free Memory
*/
/* //chenjun add to destroy alloced for dynamic menu list, user ring 2003-01-14
for(i=0;i<gCjMeloList2Free;i++)
FREE_MEMORY ((void *)data->menu_list_data->List[i].str, MAX_RING_NAME_LEN);
//chenjun add over for user ring 2003-01-14
*/
numberOfMelodies = resource_GetListCount(RES_MELODY);
numberOfMelodies+= GetUserRingNum();//chenjun add to destroy menu alloced for user ring 2003-01-14
if( data->menu_list_data != NULL )
{
if( soundReason==SettingPHBKGrouping ) //xsf add for distingish from group melody 2002.09.27
FREE_MEMORY ((void *)data->menu_list_data->List, numberOfMelodies * sizeof (T_MFW_MNU_ITEM));
else
FREE_MEMORY ((void *)data->menu_list_data->List, (numberOfMelodies-1) * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
}
FREE_MEMORY ((void *)data, sizeof (T_MELODY_INFO));
}
else
{
TRACE_EVENT ("melody_destroy() called twice");
}
}
}
/*******************************************************************************
$Function: melody_win_cb
$Description: Window callback function for the melody window.
$Returns: none
$Arguments: w - mfw window handler
e - mfw event
*******************************************************************************/
static int melody_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */
{
//TRACE_EVENT ("melody_win_cb()");
switch( e )
{
case MfwWinVisible: /* window is visible */
break;
case MfwWinFocussed: /* input focus / selected */
case MfwWinDelete: /* window will be deleted */
default:
return MFW_EVENT_REJECTED;
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: melody_menu_cb
$Description: Call back function for the melody menu.
$Returns:
$Arguments:
*******************************************************************************/
static int melody_menu_cb (MfwEvt e, MfwMnu *m){
T_MFW_HND win = mfwParent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
// T_call_menu * data = (T_call_menu *)win_data->user;
switch( e )
{
case E_MNU_ESCAPE:
//call_menu_destroy(win);
//call_data.win_menu = 0;
break;
default:
return 0;
}
return 1;
}
/*******************************************************************************
$Function: resource_GetListCount
$Description: Returns the number of entries in resource table.
$Returns: Number of entries in Melody table.
$Arguments: res - Resource Id.
*******************************************************************************/
int resource_GetListCount(res_ResourceID_type res)
// Returns the number of the resource type available in the phone.
{
int index=0;
switch( res )
{
case RES_MELODY:
//while (MelodyTable[index] !=0) //glowing: comment it: 2003-12-09
// index++;
//return index;
return(LAST_RING_MELODY - FIRST_RING_MELODY + 1); //glowing,2003-12-15
break;
case RES_MELODY_STR: //add for melodytablestr[] 12.26
//while (MelodyTablestr[index] !=0) //glowing: comment it: 2003-12-09
// index++;
//return index;
return(LAST_RING_MELODY - FIRST_RING_MELODY + 1); //glowing,2003-12-15
break;
case RES_MELODY_SMS:
//while (SmsMelodyTablestr[index] !=0) //glowing: comment it: 2003-12-09
// index++;
//return index;
return( LAST_SMS_MELODY - FIRST_SMS_MELODY +1 );
break;
case RES_LANGUAGE:
break;
case RES_STRING:
break;
default:
break;
}
return index;
}
// 2004.4.9 wyj modify
#if 0
/*******************************************************************************
$Function: buildOnOffMenu
$Description: builds an on/off menu and associates it with a context
$Returns: None
$Arguments: count, number of elements in menu
id3, prompt string
active, context into which the menu should be associated
*******************************************************************************/
static void buildOnOffMenu( int count, int id3, int active )
{
}
/*******************************************************************************
$Function: buildVolumeMenu
$Description: builds the volume menu and associates it with the volume
context
$Returns: None
$Arguments: volume, the context to be associated with
*******************************************************************************/
static void buildVolumeMenu( VOL_ENUM volume )
{
}
/*******************************************************************************
$Function: displayDynaMenu
$Description: show one page of the ringer list, determined by item.
$Returns: None
$Arguments: None
*******************************************************************************/
static void displayDynamenu( void )
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?