📄 mmismsbroadcast.c
字号:
}
/*******************************************************************************
$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 + -