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

📄 mmismsbroadcast.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
}

/*******************************************************************************

 $Function:    	smscb_M_CB_TOP_CONS_exec_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
void smscb_M_CB_TOP_CONS_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * dummy)
    /* callback handler for events sent to to trigger execution */
{

    T_MFW_WIN         * win_data = ((T_MFW_HDR *) win)->data;
    T_M_CB_TOP_CONS   * data = (T_M_CB_TOP_CONS *)win_data->user;
    T_MFW_HND         * l_parent;
    SHORT               l_id;
    UBYTE i;

    TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_exec_cb()");

    switch (event)
	{
	case E_INIT:
	    /* initialization of administrative data */
	    data->id = value;

	    /* initialization of the dialog data */
	    data->list_menu_data.ListPosition   = 1;/* True cursor position in list menu. */
	    data->list_menu_data.CursorPosition = 1;/* Cursor position in list snapshot.  */
	    data->list_menu_data.SnapshotSize   = 4;/* Number of list entries to view.    */
	    data->list_menu_data.Font           = 0;
	    data->list_menu_data.LeftSoftKey    = TxtDelete;
	    data->list_menu_data.RightSoftKey   = TxtSoftBack;
	    data->list_menu_data.KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
	    data->list_menu_data.Reason         = 0;
	    data->list_menu_data.Strings        = TRUE; // c020 rsa
	    data->list_menu_data.Attr           = (MfwMnuAttr*)&smscb_M_CB_TOP_CONSAttrib;
        data->list_menu_data.autoDestroy    = TRUE;

	    /* NOBREAK */
	case E_RETURN: 
	case E_EXIT: /* terminate EXIT from CB_EDT_MIDEDT|M_CB_TOP_CONS_SEL here */
	    /* (re)create the dialog handler */
        TRACE_FUNCTION ("EXIT in M_CB_TOP_CONS_exec_cb");	    

        //the special case : if the user deleted the last CB item
        //check if there is any more CB in the list when not
        //give a infoscreen and go back to the CB menu
		if (g_smscb_data.CBTopics.length EQ 0) 
 		{
		    info_screen(0, TxtEmptyList,TxtNull, NULL); 
		    l_parent = data->parent;
		    l_id = data->id;
		    smscb_M_CB_TOP_CONS_destroy(data->win);
		    SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */

		}
		else
		{
		    smscb_M_CB_TOP_CONS_recreate(data);

		    /* put the (new) dialog window on top of the window stack */
    	    /* winUpdate(data->win); c021 rsa */
    	}
	    break;
	case E_ABORT: /* defaultreaction */
	    TRACE_EVENT ("ABORT in M_CB_TOP_CONS_exec_cb");	    

	    l_parent = data->parent;
	    l_id = data->id;
	    smscb_M_CB_TOP_CONS_destroy(data->win);
	    SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */
	    break;
	default:
	    return;
	}
}

/*******************************************************************************

 $Function:    	smscb_M_CB_TOP_CONS_listmnu_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void smscb_M_CB_TOP_CONS_listmnu_cb (T_MFW_HND * win, ListMenuData * ListData)
    /* smscb_M_CB_TOP_CONS menu event handler */
{
    T_MFW_WIN            * win_data = ((T_MFW_HDR *)win)->data;
    T_M_CB_TOP_CONS      * data = (T_M_CB_TOP_CONS *)win_data->user;
    T_MFW_HND            * l_parent;
    SHORT                  l_id;
    int index;

    TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_listmnu_cb()");

    switch (ListData->Reason)
        {
	case LISTS_REASON_SELECT:
	    //on SELECT: menucreate M_CB_TOP_CONS_SEL(Index=selection)
	    index = ListData->ListPosition;
	    data->CB_index_param.index = index;

	  	smscb_M_CB_TOP_CONS_SEL_ExeDelete(win);

	    break;
	case LISTS_REASON_BACK: /* back to previous menu */
	    l_parent = data->parent;
	    l_id = data->id;
	    smscb_M_CB_TOP_CONS_destroy(data->win);
	    SEND_EVENT (data->parent, E_RETURN, data->id, NULL); // c007 rsa
	    break;
	default:
	    return;
        }
    return;
}


void ExeDelete_infoscreen_cb (T_MFW_HND win, USHORT identifier, UBYTE reason);

/*********************************************************************
**********************************************************************

			  M_CB_TOP_CONS_SEL   DYNAMIC MENU WINDOW. CONTENTS BEHAVIOUR

*********************************************************************
**********************************************************************/


/*******************************************************************************

 $Function:    	smscb_M_CB_TOP_CONS_SEL_ExeDelete

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static int smscb_M_CB_TOP_CONS_SEL_ExeDelete(T_MFW_HND * win)
{
    T_MFW_WIN          * win_data = ((T_MFW_HDR *)win)->data;
    T_M_CB_TOP_CONS    * data = (T_M_CB_TOP_CONS *)win_data->user;
    T_MFW_HND          * l_parent;
    SHORT                l_id;
    int index;

    //index is the selected MID
    index = data->CB_index_param.index;

    //delete now the user selected Topic MID
    smscb_delete_topic((UBYTE) index);

    //show infoscreen ("Deleted"); 
    info_screen(win, TxtDeleted, TxtNull, (T_VOID_FUNC) ExeDelete_infoscreen_cb); 


	//save the updated Topic list on the SIM
	smscb_setCBsettings(0);

    //selfdestroy; sendevent EXIT


    return MFW_EVENT_CONSUMED;
}

void ExeDelete_infoscreen_cb (T_MFW_HND win , USHORT identifier, UBYTE reason)
{
    T_MFW_WIN          * win_data = ((T_MFW_HDR *)win)->data;
    T_M_CB_TOP_CONS    * data     = (T_M_CB_TOP_CONS *)win_data->user;
    SHORT                l_id;

    l_id     = data->id;

   //nm go back and recreate the CB list
   SEND_EVENT (win, E_EXIT, l_id, NULL);
   
}

/*********************************************************************
**********************************************************************

			CB_EDT_TEXTEDT	 DYNAMIC MENU WINDOW. DECLARATION

*********************************************************************
**********************************************************************/

typedef struct
{
    /* administrative data */

    T_MMI_CONTROL   mmi_control;
    T_MFW_HND       win;
    SHORT           id;
    T_MFW_HND       parent;

    /* associated handlers */

    T_MFW_HND       editor;

    /* internal data */
    T_CB_index_param * param; /* pointer to parameter space in parent (index in list) */
#ifdef NEW_EDITOR
	T_AUI_EDITOR_DATA editor_info;	/* SPR#1428 - SH - New Editor data */
#else
    T_EDITOR_DATA   editor_info; /* storage for editor attributes */
#endif
    T_CB_EDT_MIDEDT_param CB_EDT_MIDEDT_param; /* parameter space for buffer for editing */
} T_CB_EDT_TEXTEDT;

static T_MFW_HND smscb_CB_EDT_TEXTEDT_create (T_MFW_HND parent);
static void smscb_CB_EDT_TEXTEDT_destroy (T_MFW_HND window);
static void smscb_CB_EDT_TEXTEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static void smscb_CB_EDT_TEXTEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event);

/*********************************************************************
**********************************************************************

			CB_EDT_TEXTEDT	DYNAMIC MENU WINDOW. IMPLEMENTATION

*********************************************************************
**********************************************************************/

T_MFW_HND smscb_CB_EDT_TEXTEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter)
{
    T_MFW_HND win;

    TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_start()");

    win = smscb_CB_EDT_TEXTEDT_create (parent_window);

    if (win NEQ NULL)
	{
	    SEND_EVENT (win, E_INIT, smscb_CB_EDT_TEXTEDT_ID, (void *)parameter);
	}
    return win;
}


/*******************************************************************************

 $Function:    	smscb_CB_EDT_TEXTEDT_create

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static T_MFW_HND smscb_CB_EDT_TEXTEDT_create(MfwHnd parent_window)
{
    T_CB_EDT_TEXTEDT      * data = (T_CB_EDT_TEXTEDT *)ALLOC_MEMORY (sizeof (T_CB_EDT_TEXTEDT));
    T_MFW_WIN             * win;

    TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_create()");

    /*
     * Create window handler
     */

    data->win = 
	win_create (parent_window, 0, 0, NULL);
    if (data->win EQ NULL)
	{
	    return NULL;
	}

    /* 
     * connect the dialog data to the MFW-window
     */

    data->mmi_control.dialog = (T_DIALOG_FUNC)smscb_CB_EDT_TEXTEDT_exec_cb;
    data->mmi_control.data   = data;
    win                      = ((T_MFW_HDR *)data->win)->data;
    win->user                = (void *)data;
    data->parent             = parent_window;

    /*
     * return window handle
     */

    winShow(data->win);
    return data->win;
}


/*******************************************************************************

 $Function:    	smscb_CB_EDT_TEXTEDT_destroy

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void smscb_CB_EDT_TEXTEDT_destroy(MfwHnd own_window)
{
    T_MFW_WIN            * win_data;
    T_CB_EDT_TEXTEDT     * data;

    TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_destroy()");

    if (own_window)
	{
	    win_data = ((T_MFW_HDR *)own_window)->data;
	    data     = (T_CB_EDT_TEXTEDT *)win_data->user;

	    if (data)
		{
		    /*
		     * Delete WIN handler
		     */ 
		    win_delete (data->win);

		    /*     
		     * Free Memory
		     */
		    FREE_MEMORY ((void *)data, sizeof (T_CB_EDT_TEXTEDT));
		}
	    else
		{
		    TRACE_EVENT ("smscb_CB_EDT_TEXTEDT_destroy() called twice");
		}
	}
}

/*******************************************************************************

 $Function:    	smscb_CB_EDT_TEXTEDT_exec_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
void smscb_CB_EDT_TEXTEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
    /* callback handler for events sent to to trigger execution */
{


    T_MFW_WIN            * win_data = ((T_MFW_HDR *) win)->data;
    T_CB_EDT_TEXTEDT     * data = (T_CB_EDT_TEXTEDT *)win_data->user;
    T_MFW_HND            * l_parent;
    SHORT                  l_id;
    int      
   	index;

#ifdef DEBUG_SMS_CB
    char buf[60];
#endif

    TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_exec_cb()");

    switch (event)
	{
	case E_INIT:
	    /* initialization of administrative data */
	    data->id = value;
	    data->param = (T_CB_index_param *)parameter; /* store the pointer to the parameter for later use */


#ifdef DEBUG_SMS_CB
    sprintf (buf, "the index is %d", data->param->index);
    TRACE_EVENT (buf);
#endif

	    /* initialization of the dialog data */
	    index = data->param->index;
	    data->CB_EDT_MIDEDT_param.index = index; /* copy the index to parameter space of next menu */

data->CB_EDT_MIDEDT_param.name[0] = '\0'; /* provide empty entry */

	    //on INIT: exec "copy params to dynamic memory <data>"; RECREATE
	    /* NOBREAK */
	case E_RETURN:    //on RETURN: RECREATE  // recreate editor if back from options

		/* SPR#1428 - SH - New Editor changes */
		
#ifdef NEW_EDITOR
		AUI_edit_SetDefault(&data->editor_info);
		AUI_edit_SetDisplay(&data->editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT);
		AUI_edit_SetEvents(&data->editor_info, value, TRUE, TEN_SECS,  (T_AUI_EDIT_CB)smscb_CB_EDT_TEXTEDT_editor_cb);
		AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtEnterName, NULL);
		AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->CB_EDT_MIDEDT_param.name, CB_TAG_LENGTH);
		AUI_edit_SetMode(&data->editor_info, ED_MODE_ALPHA, ED_CURSOR_BAR);

	    data->editor = AUI_edit_Start(data->win,&data->editor_info);  /* start the editor */
#else /* NEW_EDITOR */
	/*MC SPR 1488, got rid of hardcoded editor dimensions*/
	    data->editor_info.editor_attr.win.px   = 0;
	    data->editor_info.editor_attr.win.py   = Mmi_layout_line(2);
	    data->editor_info.editor_attr.win.sx   =SCREEN_SIZE_X;
	    data->editor_info.editor_attr.win.sy   =  2*Mmi_layout_line_height();
		data->editor_info.editor_attr.edtCol	= COLOUR_EDITOR_XX;
	    data->editor_info.editor_attr.font     = 0;
	    data->editor_info.editor_attr.mode     = edtCurBar1;
	    data->editor_info.editor_attr.controls = 0;
	    data->editor_info.editor_attr.text     = data->CB_EDT_MIDEDT_param.name;  /* buffer to be edited */
	    data->editor_info.editor_attr.size     = CB_TAG_LENGTH;
	    data->editor_info.LeftSoftKey       = TxtSoftOK;	    
	    data->editor_info.RightSoftKey      = TxtDelete;
	    data->editor_info.TextId            = TxtEnterName;
	    data->editor_info.Identifier        = value;  /* optional */
	    data->editor_info.mode              = ALPHA_MODE;
	    data->editor_info.Callback          = (T_EDIT_CB)smscb_CB_EDT_TEXTEDT_editor_cb;
		data->editor_info.destroyEditor		= TRUE;
	    data->editor_info.hide                 = FALSE;
	    data->editor_info.AlternateLeftSoftKey = TxtNull;
	    data->editor_info.TextString           = NULL;
	    data->editor_info.min_enter            = 0;
	    data->editor_info.timeout              = TEN_SECS;

	    /* create the dialog handler */
	    data->editor = editor_start(data->win,&data->editor_info);  /* start the editor */
#endif /* NEW_EDITOR */

	    break;
	case E_ABORT:
	case E_EXIT: /* defaultreaction */
	    l_parent = data->parent;
	    l_id = data->id;
	    smscb_CB_EDT_TEXTEDT_destroy(data->win);


	    SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */
	    break;

⌨️ 快捷键说明

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