📄 mmitimedate.c
字号:
if (day>30)
return FALSE;
break;
case 2: /* Feb */
/* Leap year... */
if ((year%4==0) && (year%400!=0))
{
if (day>29)
return FALSE;
}
else
{
if (day>28)
return FALSE;
}
break;
}
return TRUE;
}
/*******************************************************************************
$Function: tida_check_time
$Description: Checks a time to see if it's valid
$Returns: TRUE if it's valid, FALSE otherwise
$Arguments: timestring - The time string
*******************************************************************************/
UBYTE tida_check_time(char *timestring)
{
int hour;
int minute;
sscanf(timestring, "%d:%d", &hour, &minute);
TRACE_EVENT_P1("String: %s", timestring);
TRACE_EVENT_P2("Hour %d, minute %d", hour, minute);
if (hour<0 || hour>23 || minute<0 || minute>60)
return FALSE;
return TRUE;
}
#else /* NEW_EDITOR */
/* OLD VERSION */
/*******************************************************************************
$Function: date_time_create
$Description: create main dialog for time and date (SINGLE_DYNAMIC)
$Returns: none.
$Arguments:
*******************************************************************************/
T_MFW_HND date_time_create (T_MFW_HND parent_window)
{
T_MFW_WIN * win;
T_tida * data = (T_tida *)ALLOC_MEMORY (sizeof (T_tida));
data->tida_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)tida_win_cb);
TRACE_FUNCTION("MmiTimeDate:date_time_create");
if (data->tida_win EQ 0)
return 0;
/*
* Create window handler
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)tida_main;/* dialog main function */
data->mmi_control.data = data;
data->parent_win = parent_window;
win = ((T_MFW_HDR *)data->tida_win)->data;
win->user = (void *) data;
/*
* return window handle
*/
mfwSetSignallingMethod(1);
winShow(data->tida_win);
return data->tida_win;
}
/*******************************************************************************
$Function: date_time_destroy
$Description: destroy main dialog for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
void date_time_destroy (T_MFW_HND own_window)
{
T_tida * data;
T_MFW_WIN * win;
if (own_window)
{
TRACE_EVENT("MmiTimeDate:date_time_destroy");
win = ((T_MFW_HDR *)own_window)->data;
data = (T_tida *)win->user;
if(data)
{
win_delete (data->tida_win);
FREE_MEMORY((void *)data,(sizeof(T_tida)));
}
}
}
/*******************************************************************************
$Function: date_time_edt_create
$Description: create editor dialog for time and date(SINGLE_DYNAMIC)
$Returns: none.
$Arguments:
*******************************************************************************/
T_MFW_HND date_time_edt_create(T_MFW_HND parent_window)
{
T_tida_edt * data = (T_tida_edt *)ALLOC_MEMORY (sizeof (T_tida_edt));
T_MFW_WIN * win;
data->tida_edt_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)tida_edt_win_cb);
TRACE_FUNCTION("MmiTimeDate:date_time_edt_create");
if (data->tida_edt_win EQ 0)
return 0;
/*
* Create window handler
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)tida_editor;
data->mmi_control.data = data;
data->parent_win = parent_window;
win = ((T_MFW_HDR *)data->tida_edt_win)->data;
win->user = (void *) data;
/*
* Create any other handler
*/
editor_attr_init(&data->edit1Attr, TIMEDATE_EDITOR_AREA, edtCurBar1 | edtModOverWr, 0, (char*)data->edtbuf1,MAX_DIG_TIDA,COLOUR_EDITOR_XX );
data->tim_out_handle = tim_create(data->tida_edt_win,TIMERCLEAR,(T_MFW_CB)tida_edt_tim_out_cb);
data->editor_handle = edt_create(data->tida_edt_win,&data->edit1Attr,0,0);
data->kbd_handle = kbd_create(data->tida_edt_win,KEY_ALL,(T_MFW_CB)tida_edt_kbd_cb);
data->kbd_long_handle = kbd_create(data->tida_edt_win,KEY_ALL | KEY_LONG,(T_MFW_CB)tida_edt_kbd_long_cb);
/*
* return window handle
*/
return data->tida_edt_win;
}
/*******************************************************************************
$Function: date_time_edt_destroy
$Description: destroy editor dialog for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
void date_time_edt_destroy (T_MFW_HND own_window)
{
T_tida_edt * data ;
T_MFW_WIN * win;
if (own_window)
{
TRACE_FUNCTION ("MmiTimeDate:date_time_edt_destroy");
win = ((T_MFW_HDR *)own_window)->data;
data = (T_tida_edt *)win->user;
if(data)
{
win_delete (data->tida_edt_win);
FREE_MEMORY((void *)data,(sizeof(T_tida_edt)));
}
}
}
/*******************************************************************************
$Function: tida_main
$Description: main dialog function for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
static void tida_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida * tida_data = (T_tida *)win_data->user;//tida main data
T_tida_edt * tida_edt_data = (T_tida_edt *) parameter;//tida editor data
T_MFW_HND tida_edt_win;
T_DISPLAY_DATA display_info;
TRACE_FUNCTION("MmiTimeDate:tida_main");
switch(event)
{
case DATE_SHOW:
tida_data->state = DATE_SHOW;
tida_data->display_id1 = TxtEnterDate;
tida_edt_win = date_time_edt_create(tida_data->tida_win);
if(tida_edt_win)
{
SEND_EVENT(tida_edt_win,event,0,tida_data);
}
break;
case DATE_ENTRY:
tida_data->state = DATE_ENTRY;
tida_data->display_id1 = TxtEnterDate;
tida_edt_win = date_time_edt_create(tida_data->tida_win);
{
SEND_EVENT(tida_edt_win,event,0,tida_data);
}
break;
case TIME_ENTRY:
tida_data->state = TIME_ENTRY;
tida_data->display_id1 = TxtEnterTime;
tida_edt_win = date_time_edt_create(tida_data->tida_win);
{
SEND_EVENT(tida_edt_win,event,0,tida_data);
}
break;
case TIME_SHOW:
tida_data->state = TIME_SHOW;
tida_data->display_id1 = TxtEnterTime;
tida_edt_win = date_time_edt_create(tida_data->tida_win);
if(tida_edt_win)
{
SEND_EVENT(tida_edt_win,event,0,tida_data);
}
break;
case ENTRY_OK:
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtSaved, TxtNull, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)tida_info_cb, THREE_SECS, KEY_ALL );
display_info.Identifier = SAVED;
info_dialog(tida_data->tida_win,&display_info); /* information screen "Saved" */
break;
case SAVED:
case TIDA_ABORT:
case TIDA_CLEAR:
case TIDA_TO_IDLE:
date_time_destroy(tida_data->tida_win);
break;
default:
break;
}
}
/*******************************************************************************
$Function: tida_info_cb
$Description: callback function from info dialog for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
void tida_info_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida * tida_data = (T_tida *)win_data->user;
TRACE_FUNCTION ("MmiTimeDate: tida_info_cb");
switch(identifier)
{
case SAVED:
SEND_EVENT(tida_data->tida_win,identifier,0,NULL);
break;
default:
break;
}
}
/*******************************************************************************
$Function: tida_win_cb
$Description: windows main callback function for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
static int tida_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
TRACE_FUNCTION ("MmiTimeDate: tida_win_cb");
if (event EQ MfwWinVisible)
{
/*
* Top Window has no output
*/
dspl_ClearAll();
return 1;
}
return 0;
}
/*******************************************************************************
$Function: tida_edt_win_cb
$Description: windows callback function for editor for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
static int tida_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win)
{
T_tida_edt * edt_data = (T_tida_edt *)win->user;//tida edt data
T_MFW_WIN * win_tida =((T_MFW_HDR *)edt_data->parent_win)->data;
T_tida * tida_data = (T_tida *)win_tida->user; // tida main data
char lin1[MAX_LEN_DATE];
char lin2[MAX_LEN_TIME];
T_MFW_TIME* currclock; /*SPR 1725*/
T_MFW_DATE* currdate;
T_MFW_TIME alarmTime; /*SPR 1725*/
currclock = mfw_td_get_time(&currclock);/*SPR 1725*/
currdate = mfw_td_get_date(&currdate);
mfw_td_get_alarm(&alarmTime, &alarmDate);
TRACE_FUNCTION ("MmiTimeDate:tida_edt_win_cb");
if (event EQ MfwWinVisible)
{
dspl_ClearAll();
PROMPT(DATE_TEXT_X,DATE_TEXT_Y,0,tida_data->display_id1);
softKeys_displayId(TxtSoftOK,TxtSoftBack,0,COLOUR_EDITOR_XX);
if(tida_data->state EQ DATE_SHOW)
{
if ((DateTimeEntryMode == SETTING) || (FFS_flashData.alarm_day == 0))
{ if (currdate->day == 0) //if no date set
sprintf(lin1,"dd/mm/yyyy");
else
sprintf(lin1,"%02d/%02d/%04d",currdate->day,currdate->month,currdate->year);
}
else
sprintf(lin1,"%02d/%02d/%04d",alarmDate.day,alarmDate.month,alarmDate.year);
strncpy(edt_data->edtbuf1,lin1,MAX_LEN_DATE);
edtShow(edt_data->editor_handle);
}
else if(tida_data->state EQ DATE_ENTRY)
{
if ((DateTimeEntryMode == SETTING) || (alarmDate.day == 0))
{ if (currdate->day == 0)
sprintf(lin1,"dd/mm/yyyy");//if no date set
else
sprintf(lin1,"%02d/%02d/%04d",currdate->day,currdate->month,currdate->year);
}
else
sprintf(lin1,"%02d/%02d/%04d",alarmDate.day,alarmDate.month,alarmDate.year);
strncpy(edt_data->edtbuf1,lin1,MAX_LEN_DATE);
edt_data->index = 0;
edtShow(edt_data->editor_handle);
softKeys_displayId(TxtSoftOK,TxtSoftBack,0,COLOUR_EDITOR_XX);
}
else if(tida_data->state EQ TIME_ENTRY)
{
if ((DateTimeEntryMode == SETTING) || (alarmDate.day==0))
sprintf(lin2,"%02d:%02d",currclock->hour, currclock->minute);
else
sprintf(lin2,"%02d:%02d",alarmDate.hour, alarmDate.minute);
strncpy(edt_data->edtbuf1,lin2,MAX_LEN_TIME);
edt_data->index = 0;
edtShow(edt_data->editor_handle);
softKeys_displayId(TxtSoftOK,TxtSoftBack,0,COLOUR_EDITOR_XX);
}
else if(tida_data->state EQ TIME_SHOW)
{ if ((DateTimeEntryMode == SETTING) || (alarmDate.day == 0))
sprintf(lin2,"%02d:%02d",currclock->hour, currclock->minute);
else
sprintf(lin2,"%02d:%02d",alarmDate.hour, alarmDate.minute);
strncpy(edt_data->edtbuf1,lin2,MAX_LEN_TIME);
edtShow(edt_data->editor_handle);
}
return 1;
}
return 0;
}
/*******************************************************************************
$Function: tida_editor
$Description: dialog function for editor for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
static void tida_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida_edt * edt_data = (T_tida_edt *)win_data->user;
T_tida * tida_data = (T_tida *)parameter;//tida main data
edt_data->state = tida_data->state;
TRACE_FUNCTION("MmiTimeDate:tida_editor");
/*
* depending on event
*/
switch (event)
{
case DATE_SHOW:
case TIME_SHOW:
memset(edt_data->edtbuf1, '\0', sizeof(edt_data->edtbuf1));/* initial buffer */
edt_data->index = 0;
winShow(edt_data->tida_edt_win);
break;
case DATE_ENTRY:
case TIME_ENTRY:
winShow(edt_data->tida_edt_win);
break;
default:
break;
}
}
/*******************************************************************************
$Function: tida_edt_kbd_cb
$Description: keyboard event handler for time and date
$Returns: none.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -