📄 mmiservices.c
字号:
/*******************************************************************************
$Function: servicesExit
$Description: exit services handling
$Returns:
$Arguments:
*******************************************************************************/
void servicesExit (void)
{
TRACE_FUNCTION("servicesExit");
ss_delete(ss_data.win);
ss_exit();
}
/*******************************************************************************
$Function: services_create
$Description: Creation of an instance for the Services dialog.
$Returns:
$Arguments:
*******************************************************************************/
T_MFW_HND services_create (T_MFW_HND parent_window)
{
T_ss * data = &ss_data;
T_MFW_WIN * win;
TRACE_FUNCTION("services_create");
data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)services_win_cb);
if (data->win EQ 0)
return 0;
/*
* Create window handler
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)services;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->win)->data;
win->user = (void *) data;
/*
* Create any other handler
*/
data->info_win = 0;
data->info_wait = 0;
data->cb_menu_win = 0;
/* SPR#1428 - SH - New Editor changes - this editor never used */
#if 0
data->ussd_num_win = 0;
data->ussd_name_win = 0;
#endif
data->input_number_win = 0;
memset(data->edt_buf_name,'\0',sizeof(data->edt_buf_name));
memset(data->edt_buf_number,'\0',sizeof(data->edt_buf_number));
memset(data->edt_buf_cb_password,'\0',sizeof(data->edt_buf_number));
/* SPR#1428 - SH - New Editor changes - no longer required*/
#ifndef NEW_EDITOR
bookSetEditAttributes(SERVICE_CREATE_EDITOR,COLOUR_EDITOR_XX,0,edtCurBar1,0,(char*)data->edt_buf_name,PHB_MAX_LEN,&data->edt_attr_name);
bookSetEditAttributes(SERVICE_CREATE_EDITOR,COLOUR_EDITOR_XX,0,edtCurBar1,0,(char*)data->edt_buf_number,PHB_MAX_LEN,&data->edt_attr_number);
#endif /* ifndef NEW_EDITOR */
winShow (data->win);
/*
* return window handle
*/
return data->win;
}
/*******************************************************************************
$Function: services_destroy
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void services_destroy (T_MFW_HND own_window)
{
T_MFW_WIN * win;
T_ss * data = &ss_data;
TRACE_FUNCTION("=== services_destroy");
if (data)
{
/*
* Delete WIN Handler
*/
if (data->info_win)
{
SEND_EVENT(data->info_win, DIALOG_DESTROY, 0, 0);
data->info_win=0;
}
if (ss_data.info_wait)
{
TRACE_FUNCTION("destroying the wait screen b");
SEND_EVENT(ss_data.info_wait, DIALOG_DESTROY, 0, 0);
ss_data.info_wait = 0;
}
if (data->input_number_win)
{
TRACE_FUNCTION("killing input number win");
services_input_destroy( data->input_number_win );
data->input_number_win=0;
}
}
}
/*******************************************************************************
$Function: services_win_cb
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int services_win_cb(T_MFW_EVENT e, T_MFW_SS_PARA * para)
{
/*
* Top Window has no output
*/
TRACE_FUNCTION ("services_win_cb()");
switch (e)
{
case MfwWinVisible:
break;
default:
return 0;
}
return 1;
}
/*******************************************************************************
$Function: destroyInfoWindow
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static void destroyInfoWindow( void)
{
TRACE_FUNCTION("destroyInfoWindow");
/* kill info win if there */
if (ss_data.info_wait)
{
TRACE_FUNCTION("destroying the wait screen a");
SEND_EVENT(ss_data.info_wait, DIALOG_DESTROY, 0, 0);
ss_data.info_wait = 0;
}
if (ss_data.input_number_win)
{
TRACE_FUNCTION("destroying input window!!!");
SEND_EVENT(ss_data.input_number_win, SERVICES_INPUT_DESTROY, 0, 0);
ss_data.input_number_win = 0;
}
}
/*******************************************************************************
$Function: services_ss_cb
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int services_ss_cb(T_MFW_EVENT e, T_MFW_HND para)
{
TRACE_FUNCTION ("services_ss_cb()");
{
T_MFW_WIN * win;
win = (T_MFW_WIN *) ((T_MFW_HDR *)ss_data.win)->data;
}
switch (e)
{
case E_SS_RES:
if (!ss_data.info_wait)
{
TRACE_FUNCTION ("show the wait screen");
showWait( ss_data.win );
}
/*
* ignore the event
*/
break;
case E_SS_NOTIFY:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_NOTIFY,0, para);
destroyInfoWindow();
break;
case E_SS_CF_CNF:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_CF_CNF,0, para);
destroyInfoWindow();
break;
case E_SS_CW_CNF:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_CW_CNF,0, para);
destroyInfoWindow();
break;
case E_SS_CLI_CNF:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_CLI_CNF,0, para);
destroyInfoWindow();
break;
case E_SS_CB_CNF:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_CB_CNF,0, para);
destroyInfoWindow();
break;
/* we must display the ussd info and then edit and send a user ussd */
case E_SS_USSD_REQ:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_USSD_REQ,0, para);
destroyInfoWindow();
break;
/* just display the ussd info */
case E_SS_USSD_CNF:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_USSD_CNF,0, para);
destroyInfoWindow();
break;
case E_SS_IMEI:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_IMEI,0, para);
destroyInfoWindow();
break;
case E_SS_GET_PW:
if(!ss_data.info_win)
SEND_EVENT(ss_data.win,E_SS_GET_PW,0, para);
destroyInfoWindow();
break;
default:
break;
}
return 1; /* consumed */
}
/*******************************************************************************
$Function: services
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void services (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
T_ss * data = (T_ss *)win_data->user;
T_MFW_SS_PARA * ss_cnf = (T_MFW_SS_PARA *)parameter;
unsigned int i = 0;
char line[MAX_LINE];
TRACE_FUNCTION ("services()");
switch (event)
{
case ServicesError:
TRACE_FUNCTION ("ServicesError");
showError(win, ss_cnf->cb_cnf.ss_error);
break;
case ServicesFailed:
TRACE_FUNCTION ("ServicesFailed");
showFailed(win);
break;
case ServicesOtherNumber:
TRACE_FUNCTION("ServicesOtherNumber");
ServicesGetOtherNumber(win);
break;
case ServicesOk:
TRACE_FUNCTION ("ServicesOk");
showOk(win);
break;
case ServicesUSSDEnter:
{
#ifdef NEW_EDITOR
T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */
#else
T_EDITOR_DATA editor_data;
#endif /* NEW_EDITOR */
TRACE_FUNCTION("ServicesUSSDEnter");
memset(ss_data.edt_buf_number,'\0',PHB_MAX_LEN);
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR /* NEW_EDITOR */
AUI_edit_SetDefault(&editor_data);
AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT);
AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE);
AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)ss_data.edt_buf_number, MAX_USSD_LEN);
AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtSoftBack, TxtEntAnw, NULL);
AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, FALSE, TxtNull);
AUI_edit_SetEvents(&editor_data, ServicesUSSDEnter, TRUE, FOREVER, (T_AUI_EDIT_CB)services_info_cb);
AUI_edit_Start(ss_data.win, &editor_data); /* start the editor */
#else /* NEW_EDITOR */
editor_data.editor_attr.win.px = 6;
editor_data.editor_attr.win.py = 12;
editor_data.editor_attr.win.sx = 80;
editor_data.editor_attr.win.sy = 20;
editor_data.editor_attr.edtCol = COLOUR_EDITOR_XX,
editor_data.editor_attr.font = 0;
editor_data.editor_attr.mode = edtCurBar1;
editor_data.editor_attr.controls = 0;
editor_data.hide = FALSE;
editor_data.editor_attr.text = (char*)ss_data.edt_buf_number;
editor_data.editor_attr.size = sizeof(ss_data.edt_buf_number);
editor_data.LeftSoftKey = TxtSoftOK;
editor_data.RightSoftKey = TxtSoftBack;
editor_data.AlternateLeftSoftKey = TxtNull;
editor_data.TextString = '\0';
editor_data.TextId = TxtEntAnw;
editor_data.Identifier = ServicesUSSDEnter;
editor_data.mode = DIGITS_MODE;
editor_data.timeout = FOREVER;
editor_data.min_enter = 1;
editor_data.Callback = (T_EDIT_CB)services_info_cb;
editor_data.destroyEditor = TRUE;
/* create the dialog handler */
editor_start(ss_data.win, &editor_data); /* start the editor */
#endif /* NEW_EDITOR */
}
break;
case SERVICES_DO_CALL_VOICE_DIVERT:
servicesStoreVoiceMailNumber();
servicesSendCallDivert(0);
break;
case ServicesDoCallDivert:
servicesSendCallDivert(0);
break;
case E_SS_RES:
/*
* event is ignored
*/
break;
case E_SS_NOTIFY:
TRACE_FUNCTION(" E_SS_NOTIFY");
showSSNotify( win, (T_MFW_SS_NOTIFY*) parameter ); /* all short ss-related notfications */
break;
/*
* modified handling for results taking lists in account
*/
case E_SS_CF_CNF:
/*
* check whether we received data what was requested / consistent
*/
switch(ss_cnf->cf_cnf.ss_code)
{
case SS_CODES_UNKNOWN:
/* Marcus: Issue 1652: 03/02/2003: Start */
TRACE_EVENT("SS_CODES_UNKNOWN");
{
T_DISPLAY_DATA display_info;
dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtNull, TxtNull, TxtExecuted, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)services_info_cb, FOREVER, KEY_CLEAR | KEY_LEFT );
display_info.Identifier = E_SS_CF_CNF; // can be used also for CF and CW
/*
* Call Info Screen
*/
ss_data.info_win = info_dialog (ss_data.win, &display_info);
}
/* Marcus: Issue 1652: 03/02/2003: End */
break;
case SS_CF_CFU:
case SS_CF_ALL:
TRACE_EVENT("SS_CF_CFU/SS_CF_ALL");
/*
* Update icons for idle screen if CFU and telephony
*/
//SPR#984 - DS - Only update icons if activating / cancelling.
if (ss_cnf->cf_cnf.ss_category != SS_INTERROGATION)
{
switch (srv_check_CF_telephony_status ( &ss_cnf->cf_cnf ))
{
case CF_ACTIVE_STATUS:
iconsSetState(iconIdCallFor);
break;
case CF_PROVISIONED_STATUS: // Marcus: Issue 1652: 02/03/2003
case CF_INACTIVE_STATUS:
iconsDeleteState(iconIdCallFor);
break;
/* Marcus: Issue 1652: 02/03/2003: Start */
case CF_UNKNOWN_STATUS:
TRACE_EVENT("CF_UNKNOWN_STATUS");
default:
if ((ss_cnf->cf_cnf.ss_category == SS_ERASURE) ||
(ss_cnf->cf_cnf.ss_category == SS_DEACTIVATION))
iconsDeleteState(iconIdCallFor);
/* Marcus: Issue 1652: 02/03/2003: End */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -