⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmishortcutmnu.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*******************************************************************************

                    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 + -