📄 mmismsbroadcast.c
字号:
default:
return;
}
}
/*******************************************************************************
$Function: smscb_CB_EDT_TEXTEDT_editor_cb
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static void smscb_CB_EDT_TEXTEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
/* smscb_CB_EDT_TEXTEDT editor event handler */
{
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;
TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_editor_cb()");
switch(event)
{
case INFO_KCD_LEFT:
//on OK: menucreate CB_EDT_MIDEDT(data)
smscb_CB_EDT_MIDEDT_start (win, &data->CB_EDT_MIDEDT_param);
break;
case INFO_KCD_RIGHT:
case INFO_KCD_HUP: /* defaultreaction */
l_parent = data->parent;
l_id = data->id;
smscb_CB_EDT_TEXTEDT_destroy(data->win);
SEND_EVENT (l_parent, E_RETURN, l_id, NULL); // c007 rsa
break;
default:
break;
}
return;
}
/*********************************************************************
**********************************************************************
CB_EDT_MIDEDT 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_EDT_MIDEDT_param * param; /* pointer to parameter space in parent (buffer for editing) */
#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;
static T_MFW_HND smscb_CB_EDT_MIDEDT_create (T_MFW_HND parent);
static void smscb_CB_EDT_MIDEDT_destroy (T_MFW_HND window);
static void smscb_CB_EDT_MIDEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static void smscb_CB_EDT_MIDEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event);
/*********************************************************************
**********************************************************************
CB_EDT_MIDEDT DYNAMIC MENU WINDOW. IMPLEMENTATION
*********************************************************************
**********************************************************************/
T_MFW_HND smscb_CB_EDT_MIDEDT_start(T_MFW_HND parent_window, T_CB_EDT_MIDEDT_param * parameter)
{
T_MFW_HND win;
TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_start()");
win = smscb_CB_EDT_MIDEDT_create (parent_window);
if (win NEQ NULL)
{
SEND_EVENT (win, E_INIT, smscb_CB_EDT_MIDEDT_ID, (void *)parameter);
}
return win;
}
/*******************************************************************************
$Function: smscb_CB_EDT_MIDEDT_create
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static T_MFW_HND smscb_CB_EDT_MIDEDT_create(MfwHnd parent_window)
{
T_CB_EDT_MIDEDT * data = (T_CB_EDT_MIDEDT *)ALLOC_MEMORY (sizeof (T_CB_EDT_MIDEDT));
T_MFW_WIN * win;
TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_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_MIDEDT_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_MIDEDT_destroy
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static void smscb_CB_EDT_MIDEDT_destroy(MfwHnd own_window)
{
T_MFW_WIN * win_data;
T_CB_EDT_MIDEDT * data;
TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_destroy()");
if (own_window)
{
win_data = ((T_MFW_HDR *)own_window)->data;
data = (T_CB_EDT_MIDEDT *)win_data->user;
if (data)
{
/*
* Delete WIN handler
*/
win_delete (data->win);
/*
* Free Memory
*/
FREE_MEMORY ((void *)data, sizeof (T_CB_EDT_MIDEDT));
}
else
{
TRACE_EVENT ("smscb_CB_EDT_MIDEDT_destroy() called twice");
}
}
}
/*******************************************************************************
$Function: smscb_CB_EDT_MIDEDT_exec_cb
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void smscb_CB_EDT_MIDEDT_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_MIDEDT * data = (T_CB_EDT_MIDEDT *)win_data->user;
T_MFW_HND * l_parent;
SHORT l_id;
int index;
TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_exec_cb()");
switch (event)
{
case E_INIT:
/* initialization of administrative data */
data->id = value;
data->param = (T_CB_EDT_MIDEDT_param *)parameter; /* store the pointer to the parameter for later use */
/* initialization of the dialog data */
index = data->param->index;
if (g_smscb_data.CBTopics.entry[index].msg_id NEQ NO_MID)
{
data->param->number[0] = '\0'; /* provide empty entry */
}
else
{
data->param->number[0] = '\0'; /* provide empty entry */
}
//on INIT: call editor (Type=numeric, Length=3, Prompt="Enter MID Number",
// Number=data->List.Number[data->ListIndex], SoftLeft=OK, SoftRight=BACK)
/* 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, EDITOR_FONT);
AUI_edit_SetEvents(&data->editor_info, value, TRUE, TEN_SECS, (T_AUI_EDIT_CB)smscb_CB_EDT_MIDEDT_editor_cb);
AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtEnterMid, NULL);
AUI_edit_SetAltTextStr(&data->editor_info, 1, TxtNull, TRUE, TxtSoftBack);
AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->param->number, CB_MID_LENGTH);
AUI_edit_SetMode(&data->editor_info, 0, ED_CURSOR_BAR);
data->editor = AUI_edit_Start(data->win,&data->editor_info); /* start the editor */
#else /* NEW_EDITOR */
editor_attr_init(&data->editor_info.editor_attr, ZONE_SMALL_EDITOR, edtCurBar1, 0, data->param->number, CB_MID_LENGTH, COLOUR_EDITOR );
editor_data_init(&data->editor_info,(T_EDIT_CB)smscb_CB_EDT_MIDEDT_editor_cb,TxtSoftOK,TxtDelete,TxtEnterMid,1 ,DIGITS_MODE, TEN_SECS);
data->editor_info.destroyEditor = TRUE;
data->editor_info.Identifier = value;
data->editor_info.hide = FALSE;
data->editor_info.TextString = NULL;
/* 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_MIDEDT_destroy(data->win);
SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */
break;
default:
return;
}
}
/*******************************************************************************
$Function: smscb_CB_EDT_MIDEDT_editor_cb
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static void smscb_CB_EDT_MIDEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
/* smscb_CB_EDT_MIDEDT editor event handler */
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_CB_EDT_MIDEDT * data = (T_CB_EDT_MIDEDT *)win_data->user;
T_MFW_HND * l_parent;
SHORT l_id;
int index;
#ifdef DEBUG_SMS_CB
char buf[80];
UBYTE ii;
#endif
TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_editor_cb()");
l_parent = data->parent;
l_id = data->id;
switch(event)
{
case INFO_KCD_LEFT:
index = data->param->index;
//nm "-1"the zero is counted as well
if (index < MAX_MIDS -1 )
{
/* add a new entry */
strncpy (g_smscb_data.CBTopics.entry[index].name, data->param->name, CB_TAG_LENGTH);
g_smscb_data.CBTopics.entry[index].msg_id = atoi(data->param->number);
#ifdef DEBUG_SMS_CB
sprintf (buf, "the index is %d", index);
TRACE_EVENT (buf);
#endif
/* add a new entry */
index += 1;
g_smscb_data.CBTopics.length = index;
smscb_setCBsettings(SMSCB_SWITCH_ON); /* save in SIM */
info_screen(win, TxtSaved ,TxtNull, NULL);
}
else
{
info_screen (win, TxtFull, TxtNull, NULL);
}
#ifdef DEBUG_SMS_CB
TRACE_EVENT ("after add a new one !");
for (ii = 0; ii < MAX_MIDS; ii++)
{
sprintf (buf, " 04 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii);
TRACE_EVENT (buf);
}
sprintf (buf, "04 midlist:%d", g_smscb_data.CBTopics.length);
TRACE_EVENT (buf);
#endif
smscb_CB_EDT_MIDEDT_destroy(data->win);
SEND_EVENT (l_parent, E_EXIT, l_id, NULL);
break;
case INFO_KCD_RIGHT:
case INFO_KCD_HUP: /* defaultreaction */
smscb_CB_EDT_MIDEDT_destroy(data->win);
SEND_EVENT (l_parent, E_RETURN, l_id, NULL); // c007 rsa
break;
default:
break;
}
return;
}
/*********************************************************************
**********************************************************************
cell broadcast routines IMPLEMENTATION
*********************************************************************
**********************************************************************/
/*******************************************************************************
$Function: smscb_InitData
$Description: Initialises CB message storage
$Returns: none.
$Arguments:
*******************************************************************************/
void smscb_InitData (void)
{
UBYTE i;
g_smscb_data.CBTopics.length = 0;
for (i = 0; i < MAX_MIDS; i++)
{
g_smscb_data.CBTopics.entry[i].msg_id = NO_MID; /* Set MID list default values. */
g_smscb_data.CBTopics.entry[i].name[0] = '\0';
g_smscb_data.CBTopics.entry[i].dcs = 0;
}
}
/*******************************************************************************
$Function: smscb_delete_topic
$Description: : This function is used to delete an MID from the
current list <g_smscb_data.CBTopics>.
$Returns:
$Arguments:
*******************************************************************************/
static T_MFW smscb_delete_topic(UBYTE MidOffset)
{
SHORT Mid;
UBYTE MidCount;
UBYTE i;
#ifdef DEBUG_SMS_CB
UBYTE ii;
char buf[80];
#endif
Mid = g_smscb_data.CBTopics.entry[MidOffset].msg_id;
/* Find out how many messages are stored.
* set MidCount to first entry which contains NO_MID or
* set MidCount to MAX_MIDS if list is full
*/
//
MidCount = g_smscb_data.CBTopics.length + 1;
/* Move the MID data up one. */
while (MidOffset < (MidCount)) //c005 rsa avoid co
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -