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

📄 mmimmsmenu.c

📁 是一个手机功能的模拟程序
💻 C
字号:
#ifdef _MMS_ENABLE_

#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 "p_sim.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_icn.h"
#include "mfw_mnu.h"
#include "mfw_lng.h"
#include "mfw_sat.h"
#include "mfw_kbd.h"
#include "mfw_nm.h"
#include "mfw_str.h"
#include "dspl.h"

#include "MmiMain.h"
#include "MmiDummy.h"
#include "MmiMmi.h"
#include "MmiDialogs.h"
#include "MmiLists.h"
#include "MmiMenu.h"
#include "MmiSoftKeys.h"
#include "MmiEditor.h"
#include "Mmitextinput.h"
#include "phb.h"  
#include "mmiBookshared.h" 
#include "mmiSmsMenu.h"
#include "mmismssend.h"
#include "mmismsidle.h"

//begin xie
#include "mmimms_cfg.h"
#include "mmiMMSNew.h"
#include "mmseditor.h"
#include "mmiMMSGlobalDef.h"
#include "mmimms_cfg.h"  //#include "Mmiutilapi.h"  //modified by xie 04-07-12 
#include "player.h"
#include "mms_codec.h"
//end xie

#include "mmimmsmenu.h"
#include "mmiutilapi.h"

#ifdef MMI_MMSTASK_ENABLED
#define MMS_COMPILE_FORAPP
#include "mmstask.h"
#endif


typedef struct
{
    /* administrative data */	
    T_MMI_CONTROL   mmi_control;
    T_MFW_HND       win;
    T_MFW_HND       parent;	
    /* associated handlers */	
    T_MFW_HND       kbd;
    T_MFW_HND       kbd_long;
    T_MFW_HND       menu;
}T_MMS_MAIN_MENU; 

static T_MFW_HND MMS_MainMenu_start(MfwHnd parent_window , MfwMnuAttr *menuAttr);
static T_MFW_HND MMS_MainMenu_create(T_MFW_HND parent_window);
static void      MMS_MainMenu_destroy(T_MFW_HND win);
static void      MMS_MainMenu_dialog(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int       MMS_MainMenu_kbd_cb(MfwEvt e, MfwKbd *k);
static int       MMS_MainMenu_mnu_cb ( MfwEvt e, MfwMnu *m );
static int       MMS_MainMenu_win_cb(MfwEvt e, MfwWin *w);

int       MMS_MainMenu(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND    win  = mfwParent(mfw_header());
	P_MMS        mms  = getMMS();
    MMS_TRACE_FUNCTION("MMS_MainMenu");
	if(mms->player)
	{
		MMS_TRACE_EVENT(("MMS_MainMenu, palyer destroy"));
		switch(mmsPlayerState)
		{
		case PLAY:
			player_destrory(PLAYER_INIT_PLAY);
			mms->player = NULL;
			break;
		case PREVIEW:
			player_destrory(PLAYER_INIT_PREVIEW);
			mms->player = NULL;
			break;
		}
	}
	
	if(mms->editor)
	{
		MMS_TRACE_EVENT(("MMS_MainMenu, editor destroy"));
		editor_on_destroy();
		mms->editor = 0;
	}

/*talcon added*/
#ifdef MMI_MMSTASK_ENABLED
	{
			T_MMI_MMS_MIMNGRINIT_IND  parameter;
			if(mmsui_data ==0)
			{
				mmsui_data =(T_MMSUI_DATA *)malloc (sizeof (T_MMSUI_DATA));
			}
			mmsui_data->current_win= win;
			mmsui_data->temp_win = info_mms_dialog(win); 
			parameter.mask = MANAGER_MASK_MMSMNU;
			M_MMI_MMS_MIMNGRINIT_IND(  &parameter);
	}
#else
	MI_manager_on_initialize(MANAGER_MASK_MMSMNU);
	MMS_MainMenu_start(win, (MfwMnuAttr *)MMSMainMenuAttributes());
#endif
}

static T_MFW_HND MMS_MainMenu_start(MfwHnd parent_window , MfwMnuAttr *menuAttr)
{
    T_MFW_HND win;	
	MMS_TRACE_FUNCTION("MMS_MainMenu_start");
    win = MMS_MainMenu_create (parent_window);	
    if( win NEQ NULL )
    {
        SEND_EVENT (win, E_INIT, NULL, (void *)menuAttr);
    }
    return win;
}


static T_MFW_HND MMS_MainMenu_create(T_MFW_HND parent_window)
{
	T_MMS_MAIN_MENU      * data = (T_MMS_MAIN_MENU *)ALLOC_MEMORY (sizeof (T_MMS_MAIN_MENU));
    T_MFW_WIN            * win;
	MMS_TRACE_FUNCTION("MMS_MainMenu_create");

    /*talcon add mask: MfwWinDelete*/
    data->win = win_create (parent_window, 0, E_WIN_VISIBLE | MfwWinDelete, (T_MFW_CB)MMS_MainMenu_win_cb);
    if( data->win EQ NULL )
    {
        return NULL;
    }
	
    data->mmi_control.dialog = (T_DIALOG_FUNC)MMS_MainMenu_dialog;
    data->mmi_control.data   = data;
    win                      = ((T_MFW_HDR *)data->win)->data;
    win->user                = (void *)data;
    data->parent             = parent_window;
	
    return data->win;
}

static void MMS_MainMenu_destroy(T_MFW_HND win)
{
	T_MFW_WIN              * win_data;
    T_MMS_MAIN_MENU        * data;
	P_MMS mms = getMMS();
	MMS_TRACE_FUNCTION("MMS_MainMenu_destroy");
    if(win)
    {
        win_data = ((T_MFW_HDR *)win)->data;
        data = (T_MMS_MAIN_MENU *)win_data->user;
		
        if( data )
        {
            win_delete (data->win);
            FREE_MEMORY ((void *)data, sizeof (T_MMS_MAIN_MENU));
        }
        else
        {
            MMS_TRACE_EVENT((" "));
        }
    }
}

static void MMS_MainMenu_dialog(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN        * win_data  = ((T_MFW_HDR *) win)->data;
    T_MMS_MAIN_MENU  * data      = (T_MMS_MAIN_MENU *)win_data->user;
    T_MFW_HDR        * parent    =  data->parent;	
    char             * title;

	MMS_TRACE_FUNCTION("MMS_MainMenu_dialog");
    switch( event )
    {
    case E_INIT:
        /* initialization of administrative data */     
        data->kbd =      kbdCreate(data->win,KEY_ALL,         (MfwCb)MMS_MainMenu_kbd_cb);
        data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)MMS_MainMenu_kbd_cb);
        title = (char *) MmiRsrcGetText(TxtMMS); 
		
        data->menu = mnuListCreate(data->win,(MfwMnuAttr*)parameter, E_MNU_ESCAPE, (MfwCb)MMS_MainMenu_mnu_cb,title);
        mnuLang(data->menu,mainMmiLng);
        /* put the (new) dialog window on top of the window stack */
        mnuUnhide(data->menu);
        winShow(win);
        break;

	case E_RETURN: 
    case E_EXIT: 
    case E_BACK:
//		MMS_MainMenu_destroy(data->win);
//		MMS_MainMenu_start(parent, (MfwMnuAttr*)MMSMainMenuAttributes());
//      SEND_EVENT (parent, E_BACK, 0, NULL); 
		break;
	case E_ABORT:
		MMS_MainMenu_destroy(data->win);
        SEND_EVENT (parent, event, 0, NULL); 
		break;
    default:
        return;
    }
}

static int MMS_MainMenu_kbd_cb(MfwEvt e, MfwKbd *k)
{
	T_MFW_HND    win  = mfwParent(mfw_header());
    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
    T_MMS_MAIN_MENU      * data = (T_MMS_MAIN_MENU *)win_data->user;
	P_MMS  mms = getMMS();
	MMS_TRACE_FUNCTION("MMS_MainMenu_kbd_cb");
    if( e & KEY_LONG )
    {
        switch( k->code )
        {
        case KCD_HUP: /* back to previous menu */
            returntoidle(0);
            break;
        case KCD_RIGHT: 
            return MFW_EVENT_REJECTED; /* handled by idle */
        default: /* no response to all other keys */
            return MFW_EVENT_CONSUMED;
        }
    }
    else
    {
        switch( k->code )
        {
        case KCD_MNUUP: /* highlight previous entry */
            mnuUp(data->menu);
            break;
        case KCD_MNUDOWN: /* highlight next entry */
            mnuDown(data->menu);
            break;
        case KCD_LEFT: /* activate this entry */
        case KCD_OK:
            mnuSelect(data->menu);
            break;
        case KCD_HUP: /* back to previous menu */
            if( returntoidle(0) )
                break;
			break;
        case KCD_RIGHT: /* back to previous menu */
            mnuEscape(data->menu);
            break;
        default: /* no response to all other keys */
            return MFW_EVENT_CONSUMED;
        }
    }
    return MFW_EVENT_CONSUMED;
}

static int MMS_MainMenu_mnu_cb ( MfwEvt e, MfwMnu *m )
{
	T_MFW_HND           win      = mfwParent(mfw_header());
    T_MFW_WIN         * win_data = ((T_MFW_HDR *)win)->data;
    T_MMS_MAIN_MENU   * data     = (T_MMS_MAIN_MENU *)win_data->user;
	T_MFW_HND         * parent   = data->parent;

	MMS_TRACE_FUNCTION("MMS_MainMenu_mnu_cb");
    switch( e )
    {
    case E_MNU_ESCAPE: /* back to previous menu */
        MMS_MainMenu_destroy(data->win);
		//SEND_EVENT (parent, E_BACK, 0, NULL);
        break;
		
    default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */
        return MFW_EVENT_REJECTED;
    }
    return MFW_EVENT_CONSUMED;
}

static int MMS_MainMenu_win_cb(MfwEvt e, MfwWin *w)
{
	MMS_TRACE_FUNCTION("MMS_MainMenu_win_cb");
	switch( e )
    {
    case MfwWinVisible:  /* window is visible  */
        dspl_ClearAll();
        displaySoftKeys(TxtSoftSelect,TxtSoftBack);
        break;
    case MfwWinFocussed: /* input focus / selected   */
		break;
    case MfwWinDelete:   /* window will be deleted   */
		/*talcon add for manage destroy*/
		MMS_TRACE_EVENT(("MMS_MainMenu_win_cb-MfwWinDelete"));
		MI_manager_on_destroy(MANAGER_MASK_MMSMNU);
    #if (MMIMEM_INFORMATION == 1)
		{
			extern void MI_Dump_mmimem_Info();
			MI_Dump_mmimem_Info();
		}
    #endif
 		break;
    default:
        return MFW_EVENT_REJECTED;
    }
    return MFW_EVENT_CONSUMED;
}

#ifdef MMI_MMSTASK_ENABLED
/***************************************
$Description:
	MI_manager_on_initialize done in mms task
***************************************/
void  MI_manager_on_initialize_done(unsigned int mask)
{
	MMS_TRACE_FUNCTION("MI_manager_on_initialize_done");
	switch(mask)
	{
	case MANAGER_MASK_MMSMNU:
		SEND_EVENT(mmsui_data->temp_win, DIALOG_DESTROY, NULL, NULL);
		MMS_MainMenu_start(mmsui_data->current_win, (MfwMnuAttr *)MMSMainMenuAttributes());
		break;
	case MANAGER_MASK_MMSAGT:
		{
			extern void checkrecv_push_queue();
			extern void handle_push_queue();
			checkrecv_push_queue();
			handle_push_queue();
		}
		break;
	}
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -