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 + -
显示快捷键?