📄 mmismsbroadcast.c
字号:
/*
* connect the dialog data to the MFW-window
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)smscb_M_CB_MID_DEL_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;
}
static void smscb_M_CB_TOP_CONS_destroy(MfwHnd own_window)
{
T_MFW_WIN * win_data;
T_M_CB_TOP_CONS * data;
TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_destroy()");
if (own_window)
{
win_data = ((T_MFW_HDR *)own_window)->data;
data = (T_M_CB_TOP_CONS *)win_data->user;
if (data)
{
/*
* Delete WIN handler
*/
win_delete (data->win);
/*
* Free Memory
*/
if(data->list_menu_data.List)
FREE_MEMORY ((void *)data->list_menu_data.List, MAX_MIDS * sizeof (MfwMnuItem)); // c017 rsa
FREE_MEMORY ((void *)data, sizeof (T_M_CB_TOP_CONS));
}
else
{
TRACE_EVENT ("smscb_M_CB_TOP_CONS_destroy() called twice");
}
}
}
/*******************************************************************************
$Function: smscb_M_CB_TOP_CONS_recreate
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static void smscb_M_CB_TOP_CONS_recreate(T_M_CB_TOP_CONS *data)
{
int i;
int len;
#ifdef DEBUG_SMS_CB
UBYTE ii;
char buf[80];
TRACE_EVENT ("before create a list !");
for (ii = 0; ii < MAX_MIDS; ii++)
{
sprintf (buf, " 01 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii);
TRACE_EVENT (buf);
}
sprintf (buf, "01 length:%d", g_smscb_data.CBTopics.length);
TRACE_EVENT (buf);
#endif
//on RECREATE|INIT: menucreate dynamiclist (List=CBTopics, SoftLeft=SELECT, SoftRight=BACK) /* show: 1. Name 2. MID */
// c017 rsa
/* allocate sufficient memory to hold the maximum list of menu items */
data->list_menu_data.List = (MfwMnuItem *)ALLOC_MEMORY (MAX_MIDS * sizeof (MfwMnuItem));
// end c017 rsa
data->list_menu_data.ListMenuFlag=1;//for display the title
data->list_menu_data.ListMenuHeadStr=(char *) MmiRsrcGetText(TxtCBChanel);
for (i=0; i < g_smscb_data.CBTopics.length; i++) /* Fill Menu List */
{
/* 2004/06 sunsj modify for picture manage */
data->list_menu_data.List[i].icon = GET_ICONATTR(ICON_CB_CHANEL, 0);//cb_chanel_icon; //2004-04-20 Sunny modify old:0
data->list_menu_data.List[i].exta = 0;
data->list_menu_data.List[i].edit = 0;
data->list_menu_data.List[i].menu = 0;
data->list_menu_data.List[i].func = 0;
/* get the correct entry in list of CBTopics */
data->list_menu_data.List[i].str = g_smscb_data.CBTopics.entry[i].name;
data->list_menu_data.List[i].flagFunc = item_flag_none;
}
//actual number of entries in list menu
data->list_menu_data.ListLength = g_smscb_data.CBTopics.length;
data->list_menu_data.autoDestroy = TRUE;
listDisplayListMenu(data->win, &data->list_menu_data, (ListCbFunc)smscb_M_CB_TOP_CONS_listmnu_cb,0);
}
/*******************************************************************************
$Function: smscb_M_CB_MID_DEL_exec_cb
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void smscb_M_CB_MID_DEL_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * dummy)
/* callback handler for events sent to to trigger execution */
{
//submenu "Consult": M_CB_TOP_CONS
//on RECREATE|INIT: menucreate dynamiclist (List=CBTopics, SoftLeft=SELECT, SoftRight=BACK) /* show: 1. Name 2. MID */
//on SELECT: menucreate M_CB_TOP_CONS_SEL(Index=selection)
//on EXIT: RECREATE /* terminate EXIT from CB_EDT_MIDEDT|M_CB_TOP_CONS_SEL here */
//on BACK: RECREATE
//defaultreaction
//end
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_MID_DEL_exec_cb()");
switch (event)
{
case E_INIT:
#ifdef DEBUG_SMS_CB
UBYTE ii;
char buf[60];
for (ii = 0; ii < MAX_MIDS; ii++)
{
sprintf (buf, "g_smscb_data.CBTopics.entry[0].msg_id:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii);
TRACE_EVENT (buf);
}
#endif
#if 1//disable followed code because now the data is read from flash
if (!smsidle_get_ready_state())
{
l_parent = data->parent;
info_screen(l_parent, TxtSimNot, TxtPleaseWait, NULL,REMIND_WAITTING);
smscb_M_CB_TOP_CONS_destroy(data->win);
//info_screen(data->win, TxtSimNot, TxtReady,(T_VOID_FUNC) ExeDelete_infoscreen_cb,REMIND_FAILURE);
TRACE_EVENT ("SIM is not ready !!");
return;
}
#endif
if (g_smscb_data.CBTopics.length EQ 0)
{
l_parent = data->parent;
info_screen(l_parent, TxtNull, TxtEmptyList,NULL,REMIND_NORECORD);
smscb_M_CB_TOP_CONS_destroy(data->win);
TRACE_EVENT ("CellBroadcast Topic-list is empty !!");
return;
} /* initialization of administrative data */
else
{
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 = 8;/* Number of list entries to view. */
data->list_menu_data.Font = 0;
if(smscb_win_stat==smscb_CH_DEL)
data->list_menu_data.LeftSoftKey = TxtDelete;
else if(smscb_win_stat==smscb_CH_MODIFY)
data->list_menu_data.LeftSoftKey = TxtModify;
data->list_menu_data.RightSoftKey = TxtSoftBack;
data->list_menu_data.KeyEvents = KEY_CLEAR | KEY_RIGHT| KEY_HUP| 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 = &smscb_M_CB_TOP_CONSAttrib;
data->list_menu_data.autoDestroy = TRUE;
smscb_M_CB_TOP_CONS_recreate(data);
}
break;
/* 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, TxtNull, TxtEmptyList,NULL,REMIND_NORECORD);
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
{
l_parent = data->parent;
smscb_M_CB_TOP_CONS_destroy(data->win);
smscb_M_CB_TOP_CONS_start (l_parent, NULL);
//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;
char buf[80];
TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_listmnu_cb()");
switch (ListData->Reason)
{
case LISTS_REASON_SELECT:
case LISTS_REASON_OK: /* */
//on SELECT: menucreate M_CB_TOP_CONS_SEL(Index=selection)
index = ListData->ListPosition;
data->CB_index_param.index = index;
sprintf (buf, "smscb_M_CB_TOP_CONS_listmnu_cb DELETE the index is %d", index);
TRACE_EVENT (buf);
if(smscb_win_stat==smscb_CH_DEL)
smscb_M_CB_TOP_CONS_SEL_ExeDelete(win);
else if(smscb_win_stat==smscb_CH_MODIFY)
smscb_CB_EDT_MIDEDT_start(win, &data->CB_index_param);
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:
break;
}
return;
}
/*********************************************************************
**********************************************************************
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, TxtNull, TxtDeleted,(T_VOID_FUNC) ExeDelete_infoscreen_cb,REMIND_SUCCEED);
//save the updated Topic list on the SIM
//smscb_setCBsettings(0);
CBSetting();
//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);
}
#if 0
/*********************************************************************
**********************************************************************
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) */
T_EDITOR_DATA editor_info; /* storage for editor attributes */
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -