📄 mmitimedate.c
字号:
$Arguments:
*******************************************************************************/
static int tida_edt_kbd_cb (MfwEvt e, MfwKbd *kc)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida_edt * edt_data = (T_tida_edt *)win_data->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*/
currclock = mfw_td_get_time();/*SPR 1725*/
TRACE_FUNCTION ("MmiTimeDate: tida_edt_kbd_cb");
switch(kc->code)
{
case KCD_0:
case KCD_1:
case KCD_2:
case KCD_3:
case KCD_4:
case KCD_5:
case KCD_6:
case KCD_7:
case KCD_8:
case KCD_9:
if(edt_data->state EQ DATE_ENTRY) /* date entering */
{
if(edt_data->index < (MAX_LEN_DATE - 1))
{
if((edt_data->index NEQ 2) && (edt_data->index NEQ 5))
{
edt_data->edtbuf1[edt_data->index] = '0' + kc->code;
edtChar(edt_data->editor_handle,edt_data->edtbuf1[edt_data->index]);
edt_data->index++;
}
if((edt_data->index EQ 2) || (edt_data->index EQ 5))
{
edtChar(edt_data->editor_handle,'/');
edt_data->edtbuf1[edt_data->index] = '/';
edt_data->index++;
}
}
}
else if(edt_data->state EQ TIME_ENTRY) /* time entering */
{
if(edt_data->index < (MAX_LEN_TIME -1))
{
if(edt_data->index NEQ 2)
{
edt_data->edtbuf1[edt_data->index] = '0' + kc->code;
edtChar(edt_data->editor_handle,edt_data->edtbuf1[edt_data->index]);
edt_data->index++;
}
if(edt_data->index EQ 2)
{
edtChar(edt_data->editor_handle,':');
edt_data->edtbuf1[edt_data->index] = ':';
edt_data->index++;
}
}
}
break;
case KCD_MNUSELECT:
case KCD_LEFT: /* select and ok button */
if(edt_data->state EQ DATE_ENTRY)
{
if(check_date(win,edt_data))
{
TRACE_EVENT("datecheck ok");
edtClear(edt_data->editor_handle);
edtHide(edt_data->editor_handle); /* verification date successfull */
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,TIME_ENTRY,0,tida_data);
}
else
{
memset(edt_data->edtbuf1, '\0', sizeof(edt_data->edtbuf1));/* initial buffer */
edt_data->index = 0;
sprintf(lin1,"dd/mm/yyyy");
strncpy(edt_data->edtbuf1,lin1,MAX_LEN_DATE);
edtReset(edt_data->editor_handle);
edtShow(edt_data->editor_handle);
}
}
else if(edt_data->state EQ TIME_ENTRY)
{
if(check_time(win,edt_data))
{
TRACE_EVENT("timecheck ok");
edtClear(edt_data->editor_handle);
edtHide(edt_data->editor_handle); /* verification date successfull */
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,ENTRY_OK,0,tida_data);
}
else
{
memset(edt_data->edtbuf1, '\0', sizeof(edt_data->edtbuf1));/* initial buffer */
edt_data->index = 0;
sprintf(lin2,"%02d:%02d",currclock->hour, currclock->minute);
strncpy(edt_data->edtbuf1,lin2,MAX_LEN_TIME);
edtReset(edt_data->editor_handle);
edtShow(edt_data->editor_handle);
}
}
else if(edt_data->state EQ DATE_SHOW)
{
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,DATE_ENTRY,0,tida_data);
} /* start date entering */
else if(edt_data->state EQ TIME_SHOW)
{
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,TIME_ENTRY,0,tida_data); /* start time entering */
}
break;
case KCD_RIGHT: /* back to previous menu */
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,TIDA_ABORT,0,tida_data);
break;
case KCD_MNUUP: /* cursor to right */
if((edt_data->state EQ DATE_ENTRY) || (edt_data->state EQ TIME_ENTRY)) /* cursor to rigt */
{
edt_data->index++;
edtChar(edt_data->editor_handle,ecRight);
if(((edt_data->state EQ DATE_ENTRY) && ((edt_data->index EQ 2)||(edt_data->index EQ 5))) || ((edt_data->state EQ TIME_ENTRY) && (edt_data->index EQ 2)))
{
edt_data->index++;
edtChar(edt_data->editor_handle,ecRight);
}
}
break;
case KCD_HUP:
case KCD_MNUDOWN: /* cursor to left or clear */
if((!(edt_data->state EQ DATE_SHOW)) && (!(edt_data->state EQ TIME_SHOW)))
{
if(edt_data->state EQ DATE_ENTRY)
{
if(edt_data->index EQ 0)
;
else
edt_data->index--;
if((edt_data->index EQ 2)||(edt_data->index EQ 5))
{
if(edt_data->index EQ 0)
;
else
edt_data->index--;
edtChar(edt_data->editor_handle,ecLeft);
edtChar(edt_data->editor_handle,ecLeft);
}
else
edtChar(edt_data->editor_handle,ecLeft);
}
if(edt_data->state EQ TIME_ENTRY)
{
if(edt_data->index EQ 0)
;
else
edt_data->index--;
if(edt_data->index EQ 2)
{
if(edt_data->index EQ 0)
;
else
edt_data->index--;
edtChar(edt_data->editor_handle,ecLeft);
edtChar(edt_data->editor_handle,ecLeft);
}
else
edtChar(edt_data->editor_handle,ecLeft);
}
}
else
timStart(edt_data->tim_out_handle); /* waiting for release clear otherwise to previous screen */
break;
default:
return MFW_EVENT_CONSUMED;
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: check_date
$Description: check date after date entering
$Returns: none.
$Arguments:
*******************************************************************************/
static int check_date (T_MFW_HND win, void * edt_dat)
{
U8 i;
T_tida_edt * edt_data = (T_tida_edt *)edt_dat;
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida * tida_data = (T_tida *)win_data->user;
Date tempdate;
char internday[3];
char internmonth[3];
char internyear[5];
char debug[20];
T_MFW_TIME* currclock; /*SPR 1725*/
T_MFW_DATE* currdate;
T_MFW_TIME alarmTime; /*SPR 1725*/
currclock= mfw_td_get_time();/*SPR 1725*/
currdate =mfw_td_get_date();
mfw_td_get_alarm(&alarmTime, &alarmDate);
TRACE_FUNCTION ("MmiTimeDate:check_date");
memset(internday, '\0', sizeof(internday));/* initial string */
memset(internmonth, '\0', sizeof(internmonth));
memset(internyear, '\0', sizeof(internyear));
internday[0] = edt_data->edtbuf1[0];
internday[1] = edt_data->edtbuf1[1];
internmonth[0] = edt_data->edtbuf1[3];
internmonth[1] = edt_data->edtbuf1[4];
for(i = 0;i<4;i++)
{
internyear[i] = edt_data->edtbuf1[6+i];
}
tempdate.month = atoi(internmonth);
if((tempdate.month > 12) || (tempdate.month < 1))
return FALSE;
tempdate.day = atoi(internday);
if((tempdate.day > 30) || (tempdate.day < 1))
{
if(tempdate.day EQ 31)
{
switch(tempdate.month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
break;
default:
return FALSE;
}
}
else
return FALSE;
}
tempdate.year = atoi(internyear);
if(tempdate.year < 2000)
return FALSE;
if((tempdate.month EQ 2) && (tempdate.day EQ 29))
{
if(!(tempdate.year%4) || (tempdate.year EQ 2000))
{
if(DateTimeEntryMode == ALARM)
{
alarmDate.day = tempdate.day;
alarmDate.month = tempdate.month;
alarmDate.year = tempdate.year;
}
else
{
currdate->day = tempdate.day;
currdate->month = tempdate.month;
currdate->year = tempdate.year;
}
return TRUE;
}
else
return FALSE;
}
else
{
if(DateTimeEntryMode == ALARM)
{
alarmDate.day = tempdate.day;
alarmDate.month = tempdate.month;
alarmDate.year = tempdate.year;
}
else
{
currdate->day = tempdate.day;
currdate->month = tempdate.month;
currdate->year = tempdate.year;
}
return TRUE;
}
}
/*******************************************************************************
$Function: check_time
$Description: check time after time entering
$Returns: none.
$Arguments:
*******************************************************************************/
static int check_time (T_MFW_HND win, void * edt_dat)
{
T_tida_edt * edt_data = (T_tida_edt *)edt_dat;
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida * tida_data = (T_tida *)win_data->user;
CLOCK tempclock;
char debug[50];
char internmin[3];
char internhour[3];
T_MFW_TIME* currclock; /*SPR 1725*/
T_MFW_DATE* currdate;
T_MFW_TIME alarmTime; /*SPR 1725*/
currclock = mfw_td_get_time();/*SPR 1725*/
currdate = mfw_td_get_date();
mfw_td_get_alarm(&alarmTime, &alarmDate);
memset(internmin, '\0', sizeof(internmin));/* initial string */
memset(internhour, '\0', sizeof(internhour));
internhour[0] = edt_data->edtbuf1[0];
internhour[1] = edt_data->edtbuf1[1];
internmin[0] = edt_data->edtbuf1[3];
internmin[1] = edt_data->edtbuf1[4];
tempclock.hour = atoi(internhour);
if(tempclock.hour > 23)
return FALSE;
tempclock.min = atoi(internmin);
if(tempclock.min >59)
return FALSE;
if (DateTimeEntryMode == ALARM)
{
alarmTime.hour = tempclock.hour; /*SPR 1725*/
alarmTime.minute = tempclock.min;
mfw_td_set_alarm(&alarmTime, &alarmDate);
}
else
{
currclock->hour = tempclock.hour;
currclock->minute = tempclock.min;
mfw_td_set_time(&currclock);/*SPR 1725*/
}
return TRUE;
}
/*******************************************************************************
$Function: tida_edt_tim_out_cb
$Description: Callback function for timer for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
static void tida_edt_tim_out_cb(T_MFW_EVENT event,T_MFW_TIM * t)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida_edt * tida_edt_data = (T_tida_edt *)win_data->user;
T_MFW_WIN * win_tida =((T_MFW_HDR *)tida_edt_data->parent_win)->data;
T_tida * tida_data = (T_tida *)win_tida->user; // tida main data
date_time_edt_destroy(tida_edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,TIDA_CLEAR,0,tida_data);
}
/*******************************************************************************
$Function: tida_edt_kbd_long_cb
$Description: keyboard long event handler for time and date
$Returns: none.
$Arguments:
*******************************************************************************/
static int tida_edt_kbd_long_cb (MfwEvt e, MfwKbd *kc)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_tida_edt * edt_data = (T_tida_edt *)win_data->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
TRACE_FUNCTION("MmiTimeDate:tida_edt_kbd_long_cb");
if ((e & KEY_CLEAR) && (e & KEY_LONG))
{
if((!(edt_data->state EQ DATE_SHOW)) && (!(edt_data->state EQ TIME_SHOW)))
{
if(edt_data->state EQ DATE_ENTRY)
{
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,DATE_SHOW,0,tida_data);
}
else if(edt_data->state EQ TIME_ENTRY)
{
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,TIME_ENTRY,0,tida_data);
}
return MFW_EVENT_CONSUMED;
}
else
{
timStop(edt_data->tim_out_handle);
date_time_edt_destroy(edt_data->tida_edt_win);
SEND_EVENT(tida_data->tida_win,TIDA_TO_IDLE,0,tida_data);
return MFW_EVENT_CONSUMED;
}
}
else
return MFW_EVENT_CONSUMED;
}
#endif /* NEW_EDITOR */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -