📄 mmitimedate.c
字号:
$Arguments:
*******************************************************************************/
int settingsTimeDate(MfwMnu* m, MfwMnuItem* i)
{
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
T_MFW_HND idle_win = idle_get_window();
T_MFW_HND win = tida_create(idle_win); /* Parent_window is idle */
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_tida *data = (T_tida *)win_data->user;
TRACE_FUNCTION ("MmiTimeDate:settingsTimeDate()");
if(data->win)
{
SEND_EVENT(data->win, TIDA_DATE,0,0);
}
#else /* NEW_EDITOR */
T_MFW_HND idle_win = idle_get_window();
T_MFW_HND win = date_time_create(idle_win);// parent_window is idle
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida * tida_data = (T_tida *)win_data->user;
TRACE_FUNCTION ("MmiTimeDate:settingsTimeDate()");
tida_data->state = DATE_ENTRY;
DateTimeEntryMode = SETTING;
if(tida_data->tida_win)
{
SEND_EVENT(tida_data->tida_win,DATE_ENTRY,0,tida_data);
}
#endif /* NEW_EDITOR */
return 1;
}
/* SPR#1428 - SH - New Editor changes
* New time/date code below. Uses tida_exec_cb as main "object". */
#ifdef NEW_EDITOR
/*******************************************************************************
$Function: tida_create
$Description: Create the main time/date window
$Returns: The window handle
$Arguments: parent_win - The parent window
*******************************************************************************/
T_MFW_HND tida_create(T_MFW_HND parent_win)
{
T_MFW_WIN * win_data;
T_tida * data = (T_tida *)ALLOC_MEMORY (sizeof (T_tida));
data->win = win_create (parent_win, 0, MfwWinVisible, (T_MFW_CB)tida_win_cb);
TRACE_FUNCTION("MmiTimeDate:date_time_create");
if (data->win EQ 0)
return 0;
/*
* Create window handler
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)tida_exec_cb;/* dialog main function */
data->mmi_control.data = data;
data->parent_win = parent_win;
win_data = ((T_MFW_HDR *)data->win)->data;
win_data->user = (void *) data;
/*
* return window handle
*/
return data->win;
}
/*******************************************************************************
$Function: tida_destroy
$Description: Destroy the main time/date window
$Returns: None
$Arguments: win - The main time/date window
*******************************************************************************/
T_MFW_HND tida_destroy(T_MFW_HND win)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_tida *data = (T_tida *)win_data->user;//tida main data
if (win == NULL)
{
TRACE_EVENT ("Error : tida_destroy called with NULL Pointer");
return;
}
if (data->win)
{
win_delete(data->win);
}
if (data)
{
FREE_MEMORY((void *)data, sizeof(T_tida));
}
return;
}
/*******************************************************************************
$Function: tida_win_cb
$Description: Window callback function for time and date. This is a non-displaying
window, so does nothing!
$Returns: None.
$Arguments:
*******************************************************************************/
static int tida_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
TRACE_FUNCTION ("MmiTimeDate: tida_win_cb");
return;
}
/*******************************************************************************
$Function: tida_exec_cb
$Description: Main dialog function for time and date
$Returns: None.
$Arguments:
*******************************************************************************/
static void tida_exec_cb(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_tida *data = (T_tida *)win_data->user;//tida main data
T_MFW_TIME* currclock; /*SPR 1725*/
T_MFW_DATE* currdate;
TRACE_FUNCTION("MmiTimeDate:tida_main");
switch(event)
{
case TIDA_INIT:
break;
case TIDA_DATE:
/*SPR 1725*/
currdate = mfw_td_get_date();
/* No date is set */
if (currdate->day == 0)
{
sprintf(data->buffer, "dd/mm/yyyy");
}
/* Date is already set */
else
{
sprintf(data->buffer, "%02.02d/%02d/%04d", currdate->day, currdate->month, currdate->year);
}
data->edit_win = tida_edit_create(win, event, TxtEnterDate, data->buffer, "NN\\/NN\\/NNNN");
break;
case TIDA_TIME:
currclock = mfw_td_get_time();/*SPR 1725*/
sprintf(data->buffer, "%02d:%02d", currclock->hour, currclock->minute);
data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN");
break;
case TIDA_ALARMDATE:
/*SPR 1725*/
mfw_td_get_alarm(&alarmTime, &alarmDate);
/* No date is set */
if (alarmDate.day == 0)/*SPR 1725*/
{ currdate = mfw_td_get_date();
/* If date is set, insert today's date */
if (currdate->day!=0)
{
sprintf(data->buffer, "%02d/%02d/%04d", currdate->day, currdate->month, currdate->year);
}
else
{
sprintf(data->buffer, "dd/mm/yyyy");
}
}
/* Date is already set */
else
{/*SPR 1725*/
sprintf(data->buffer, "%02d/%02d/%04d", alarmDate.day, alarmDate.month, alarmDate.year);
}
data->edit_win = tida_edit_create(win, event, TxtEnterDate, data->buffer, "NN\\/NN\\/NNNN");
break;
case TIDA_ALARMTIME:
/*SPR 1725*/
sprintf(data->buffer,"%02d:%02d",alarmTime.hour, alarmTime.minute);
data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN");
break;
case TIDA_SAVE:
tida_show_dlg(win, TxtSaved, TxtNull);
AUI_edit_Destroy(data->edit_win);
tida_destroy(data->win);
break;
}
return;
}
/*******************************************************************************
$Function: tida_edit_create
$Description: Creates an editor with the supplied properties
$Returns: The editor window.
$Arguments: parent - The parent window
Identifier - ID used in callback to identify type of editor
TitleId - The title of the editor
buffer - The text buffer
formatString - The formatting that governs the input
*******************************************************************************/
T_MFW_HND tida_edit_create(T_MFW_HND parent, USHORT Identifier, USHORT TitleId, char *buffer, char *formatString)
{
T_AUI_EDITOR_DATA editor_data;
AUI_edit_SetDefault(&editor_data);
AUI_edit_SetDisplay(&editor_data, TIMEDATE_EDITOR_AREA, COLOUR_EDITOR, EDITOR_FONT);
AUI_edit_SetEvents(&editor_data, Identifier, FALSE, FOREVER, (T_AUI_EDIT_CB)tida_edit_cb);
AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtSoftBack, TitleId, NULL);
AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)buffer, strlen(formatString));
AUI_edit_SetFormatStr(&editor_data, formatString, FALSE, 0);
AUI_edit_SetMode(&editor_data, ED_MODE_FORMATTED, ED_CURSOR_UNDERLINE);
return AUI_edit_Start(parent, &editor_data);
}
/*******************************************************************************
$Function: tida_edit_cb
$Description: Callback function for editor
$Returns: None
$Arguments: win - The main time/date window
Identifier - ID used in callback to identify type of editor
value - What prompted the callback
*******************************************************************************/
void tida_edit_cb(T_MFW_HND win, USHORT Identifier, SHORT value)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_tida *data = (T_tida *)win_data->user;//tida main data
int minute, hour, day, month, year;
T_MFW_TIME* currclock; /*SPR 1725*/
T_MFW_DATE* currdate;
switch(value)
{
/* Terminate editor */
case INFO_KCD_HUP:
case INFO_KCD_RIGHT:
AUI_edit_Destroy(data->edit_win);
/* If on the time editing screen, go back to the date editing screen.
* Otherwise exit. */
switch(Identifier)
{
case TIDA_TIME:
SEND_EVENT(data->win, TIDA_DATE, 0, 0);
break;
case TIDA_ALARMTIME:
SEND_EVENT(data->win, TIDA_ALARMDATE, 0, 0);
break;
default:
tida_destroy(win);
break;
}
break;
/* OK */
case INFO_KCD_LEFT:
switch(Identifier)
{
case TIDA_DATE:
if (tida_check_date(data->buffer))
{
currdate = mfw_td_get_date();
sscanf(data->buffer, "%d/%d/%d", &day, &month, &year);
currdate->day = day;
currdate->month = month;
currdate->year = year;
mfw_td_set_date(currdate);/*SPR 1725*/
AUI_edit_Destroy(data->edit_win);
SEND_EVENT(data->win, TIDA_TIME, 0, 0);
}
else
{
tida_show_dlg(data->win, TxtNotAllowed, TxtNull);
}
break;
case TIDA_TIME:
if (tida_check_time(data->buffer))
{ currclock = mfw_td_get_time();/*SPR 1725*/
sscanf(data->buffer, "%d:%d", &hour, &minute);
currclock->hour = hour;
currclock->minute = minute;
currclock->second = 0;
mfw_td_set_time(currclock);/*SPR 1725*/
SEND_EVENT(data->win, TIDA_SAVE, 0, 0);
}
else
{
tida_show_dlg(data->win, TxtNotAllowed, TxtNull);
}
break;
case TIDA_ALARMDATE:
if (tida_check_date(data->buffer))
{
sscanf(data->buffer, "%d/%d/%d", &day, &month, &year);
alarmDate.day = (UBYTE)day;
alarmDate.month = (UBYTE) month;
alarmDate.year = (USHORT)year;
AUI_edit_Destroy(data->edit_win);
SEND_EVENT(data->win, TIDA_ALARMTIME, 0, 0);/*SPR1725*/
}
else
{
tida_show_dlg(data->win, TxtNotAllowed, TxtNull);
}
break;
case TIDA_ALARMTIME:
if (tida_check_time(data->buffer))
{
sscanf(data->buffer, "%d:%d", &hour, &minute);
alarmTime.hour = (UBYTE)hour;
alarmTime.minute = (UBYTE)minute;
alarmTime.second = 0;
mfw_td_set_alarm(&alarmTime, &alarmDate);
SEND_EVENT(data->win, TIDA_SAVE, 0, 0);
}
else
{
tida_show_dlg(data->win, TxtNotAllowed, TxtNull);
}
break;
}
break;
default:
break;
}
return;
}
/*******************************************************************************
$Function: tida_show_dlg
$Description: Displays a dialog
$Returns: None.
$Arguments: win - The parent window
textId - Will display "<textId> Not Allowed"
*******************************************************************************/
void tida_show_dlg(T_MFW_HND win, USHORT textId1, USHORT textId2)
{
T_DISPLAY_DATA display_info;
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, textId1, textId2, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT );
/* Call Info Screen
*/
info_dialog( win, &display_info );
return;
}
/*******************************************************************************
$Function: tida_check_date
$Description: Checks a date to see if it's valid
$Returns: TRUE if it's valid, FALSE otherwise
$Arguments: datestring - The date string
*******************************************************************************/
UBYTE tida_check_date(char *datestring)
{
int day;
int month;
int year;
sscanf(datestring, "%d/%d/%d", &day, &month, &year);
TRACE_EVENT_P1("String: %s", datestring);
TRACE_EVENT_P3("Day: %d, Month: %d, Year: %d", day, month, year);
/* Check for quick fails... */
if (year<2000 || day<1 || day>31 || month<1 || month>12)
return FALSE;
/* Check 'day' */
switch(month)
{
case 4: /* Apr */
case 6: /* Jun */
case 9: /* Sep */
case 11: /* Nov */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -