📄 mmitoolkit_timer.c
字号:
{
if(timer_counter<30)
timer_counter++;
else
{
Stopplayingdevice();
timer_flag=FALSE;
timer_status=TIMER_EDT;
}
}
void timer_dialog_cb(T_MFW_HND win, USHORT event, UBYTE reason)
{
switch(reason)
{
case INFO_KCD_F4:
/* 2004/07/09 sunsj add for forbidden hall off */
//break;
default:
//Stopplayingdevice(); xsf changed 12.31
/* 2004/07/12 sunsj fix MI18800000460 if current win is change so we only need to destroy
timer win */
if(call_data.win_incoming||call_data.win_calling||call_win_flag)
{
}
else
{
StopPlayByReasonId(ALARMPLAY);
}
timer_flag=FALSE;
timer_status=TIMER_EDT;
if(timer_win)
{
timerdestroy(timer_win);
}
setOuterState(OUTERIDLESTATE_ALERT,0,0);//2004-04-23 Sunny add
break;
}
}
/* 2003.10.16 wyj 修改,重写输入检查部分*/
static int timer_kbd_cb (MfwEvt e, MfwKbd *kc)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
timer_data* data = (timer_data*)win_data->user; // tida main data
T_DISPLAY_DATA display_info;
int flag=1;
int t;
TRACE_EVENT("timer_kbd_cb");
if(timer_status==TIMER_EDT)
{
TRACE_EVENT("timer_status==TIMER_EDT");
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:
/* 2003.10.16 wyj 修改,重写输入检查部分*/
checkTimerNumInput(data, kc->code);
timer_counter=chartoint((char*)data->timebuffer);
winShow(win);
break;
case KCD_MNULEFT:
/* 2003.10.16 wyj 修改,重写输入检查部分*/
checkTimerLeftInput(data);
winShow(win);
break;
case KCD_MNURIGHT:
/* 2003.10.16 wyj 修改,重写输入检查部分*/
checkTimerRightInput(data);
winShow(win);
break;
case KCD_LEFT: /* select and ok button */
case KCD_OK:
TRACE_EVENT("timer:KCD_LEFT");
if(((((int)data->timebuffer[0]-48)*10+((int)data->timebuffer[1]-48))>=24)||((((int)data->timebuffer[3]-48)*10+((int)data->timebuffer[4]-48))>59)
||((((int)data->timebuffer[6]-48)*10+((int)data->timebuffer[7]-48))>59))
{
memset((char*)data->timebuffer,0,sizeof(data->timebuffer));
sprintf(data->timebuffer,"00:00:00");
data->index=0;
dialog_info_init(&display_info);
display_info.TextId2 =TxtInputError;
display_info.Time = FOREVER;
display_info.iconindex = REMIND_NORECORD;
display_info.Callback = (T_VOID_FUNC)NULL;//timer_memo_dialog_cb;
/*
* Call Info Screen
*/
info_dialog(data->win, &display_info);
break;
}
data->LeftKey=TRUE;
strcpy(timer_string,data->timebuffer);
timer_counter=chartoint((char*)data->timebuffer);
timer_flag=TRUE;
timer_status=TIMER_COUNT;
iconsSetState(iconIdTimer);
SEND_EVENT(win, timer_status, 0, 0);
break;
case KCD_RIGHT: /* back to previous menu */
case KCD_HUP:
TRACE_EVENT("KCD_RIGHT");
//tim_stop(timer_Hnd);
//iconsDeleteState(iconIdTimer);
//tim_delete(timer_Hnd);
//timer_Hnd=NULL;
timerdestroy(timer_win);
break;
default:
break;
}
winShow(win);
}
else if(timer_status==TIMER_COUNT)
{
TRACE_EVENT("timer_status==TIMER_COUNT");
switch(kc->code)
{
case KCD_LEFT:
case KCD_OK:
TRACE_EVENT("KCD_LEFT");
timer_counter=0;
if(timer_flag)
{
timer_flag=FALSE;
tim_stop(timer_Hnd);
//tim_delete(timer_Hnd);
timer_start=FALSE;
//timer_Hnd=NULL;
iconsDeleteState(iconIdTimer);
}
dialog_info_init(&display_info);//gdy add
display_info.TextId = TxtTimer;
display_info.TextId2 =TxtCancelled;
display_info.TextId = '\0';
display_info.Time = FOREVER;
display_info.iconindex= REMIND_NORECORD;
display_info.Callback = (T_VOID_FUNC)NULL;//timer_memo_dialog_cb;
/*
* Call Info Screen
*/
info_dialog(data->win, &display_info);
data->index=0;
timer_flag=FALSE;
timer_status=TIMER_EDT;
SEND_EVENT(data->win, TIMER_EDT, 0, 0);
//else
// {
// timer_flag=TRUE;
// }
//winShow(win);
break;
case KCD_RIGHT:
case KCD_HUP:
TRACE_EVENT("data->LeftKey=TRUE");
//if(!timer_flag)
//iconsDeleteState(iconIdTimer);
//timer_status=TIMER_EDT;
timerdestroy(timer_win);
break;
default:
break;
}
}
//
return MFW_EVENT_CONSUMED;
}
static int chartoint(char* str)
{
int result=0,number=0;
TRACE_EVENT("char to int");
/* get the number of seconds*/
number=(int)str[1]-48+((int)str[0]-48)*10;
result=result+number*3600;
number=0;
/*get the number of munites and turn it into seconds*/
number=(int)str[4]-48+((int)str[3]-48)*10;
result=result+number*60;
number=0;
/*get the number of hours and turn it into seconds*/
number=(int)str[7]-48+((int)str[6]-48)*10;
result=result+number;
return result;
}
void timerdestroy (T_MFW_HND own_window)
{
T_MFW_WIN * win = ((T_MFW_HDR *)own_window)->data;
timer_data* data = (timer_data*)win->user;
TRACE_EVENT ("timerdestroy()");
timer_win=NULL;
if (own_window)
{
/*
* Delete WIN Handler
*/
win_delete (own_window);
/*
* Free Memory
*/
FREE_MEMORY ((void *)data, sizeof (timer_data));
}
}
/*void trace_timer()
{
MfwTim *prev, *curr;
int i=0;
TRACE_EVENT("trace_timer");
if (!timRoot)
{
TraceInt(i);
return;
}
prev = timRoot;
curr = timRoot->next;
while (curr)
{
i++;
prev = curr;
curr = curr->next;
}
TraceInt(i);
}*/
void drawSolidRectangle(int x1,int y1,int x2,int y2,int type,int fillcolor,int color)
{
game_Line line;
game_Rectangle rectangle;
int old_color;
if(type==1)
{
dspl_Clear(x1, y1, x2, y2);
rectangle.x1=x1;
rectangle.y1=y1;
rectangle.x2=x2;
rectangle.y2=y2;
rectangle.fillcolor=fillcolor;
rectangle.color=fillcolor;
DrawRectagle(rectangle);
line.x1=x1;
line.y1=y1;
line.x2=x1;
line.y2=y2;
line.color=fillcolor;
DrawLine(line);
line.x1=x1;
line.y1=y1-1;
line.x2=x2;
line.y2=y1-1;
line.color=color;
DrawLine(line);
line.x1=x1-1;
line.y1=y1;
line.x2=x1-1;
line.y2=y2;
line.color=color;
DrawLine(line);
line.x1=x1;
line.y1=y2+1;
line.x2=x2;
line.y2=y2+1;
line.color=color;
DrawLine(line);
line.x1=x2+1;
line.y1=y1;
line.x2=x2+1;
line.y2=y2;
line.color=color;
DrawLine(line);
}
else if(type==0)
{
old_color=dspl_GetBkgColor();
dspl_SetBkgColor(fillcolor);
dspl_Clear(x1, y1, x2+1, y2+1);
dspl_SetBkgColor(old_color);
/*rectangle.x1=x1;
rectangle.x2=x2;
rectangle.y1=y1;
rectangle.y2=y2;
rectangle.color=0x0000ff;
rectangle.fillcolor=0x0000ff;
DrawRectagle(rectangle);*/
line.x1=x1+1;
line.y1=y2+1;
line.x2=x2;
line.y2=y2+1;
line.color=color;
DrawLine(line);
line.x1=x2+1;
line.y1=y1+1;
line.x2=x2+1;
line.y2=y2;
line.color=color;
DrawLine(line);
}
else if(type==2)
{
old_color=dspl_GetBkgColor();
dspl_SetBkgColor(fillcolor);//0x77ECB1
dspl_Clear(x1, y1, x2+1, y2+1);
dspl_SetBkgColor(old_color);
line.x1=x1+1;
line.y1=y2+1;
line.x2=x2-1;
line.y2=y2+1;
line.color=color;//0x006400
DrawLine(line);
line.x1=x2+1;
line.y1=y1+1;
line.x2=x2+1;
line.y2=y2-1;
line.color=color;
DrawLine(line);
}
else if(type==3)
{
rectangle.x1=x1;
rectangle.y1=y1;
rectangle.x2=x2;
rectangle.y2=y2;
rectangle.fillcolor=fillcolor;
rectangle.color=fillcolor;
DrawRectagle(rectangle);
line.x1=x1;
line.y1=y1;
line.x2=x1;
line.y2=y2;
line.color=color;
DrawLine(line);
line.x1=x1;
line.y1=y1-1;
line.x2=x2;
line.y2=y1-1;
line.color=color;
DrawLine(line);
line.x1=x1-1;
line.y1=y1;
line.x2=x1-1;
line.y2=y2;
line.color=color;
DrawLine(line);
line.x1=x1;
line.y1=y2+1;
line.x2=x2;
line.y2=y2+1;
line.color=color;
DrawLine(line);
line.x1=x2+1;
line.y1=y1;
line.x2=x2+1;
line.y2=y2;
line.color=color;
DrawLine(line);
}
}
/**********************************************************************************
* Function Name : checkTimerNumInput
* Function Description : 改写定时器时间设置的数字键处理函数,使之不接受错误输入
*
* Parameters : timer_data *data I/O
* : U8 keynum I
*
* Return : void
*
* Author Name : Wu Yajun
* Date : 2002.10.16
* History: Date :
* Author :
* Modify :
***********************************************************************************/
static void checkTimerNumInput(timer_data *data, U8 keynum)
{
/* 检查输入的数子,保证小时分钟秒钟没有越界 */
switch(data->index)
{
case 0: //小时十位
if(keynum > 2)
return;
//data->timer_data格式hh:mm:ss
data->timebuffer[data->index++] = '0' + keynum;
break;
case 1: //小时个位
if( (data->timebuffer[data->index-1]=='2') && (keynum>3) )
return;
data->timebuffer[data->index++] = '0' + keynum;
data->index++;
break;
case 3: //分钟十位
case 6: //秒钟十位
if(keynum > 5)
return;
data->timebuffer[data->index++] = '0' + keynum;
break;
case 4: //分钟个位
data->timebuffer[data->index++] = '0' + keynum;
data->index++;
break;
case 7: //秒钟个位
data->timebuffer[data->index++] = '0' + keynum;
data->index = 0;
break;
default:
break;
}
}
/**********************************************************************************
* Function Name : checkTimerLeftInput
* Function Description : 改写定时器时间设置的菜单左键处理函数,使之不接受错误输入
*
* Parameters : timer_data *data I/O
*
* Return : void
*
* Author Name : Wu Yajun
* Date : 2002.10.16
* History: Date :
* Author :
* Modify :
***********************************************************************************/
static void checkTimerLeftInput(timer_data *data)
{
int h;
/* 不需要检查,光标左移 */
switch(data->index)
{
case 1:
case 4:
case 7:
data->index--;
return;
}
/* 检查小时 */
h = (data->timebuffer[0]-48)*10 + (data->timebuffer[1]-48);
if(h > 23)
return;
/* 检查分钟 */
h = (data->timebuffer[3]-48)*10 + (data->timebuffer[4]-48);
if(h>59)
return;
/* 检查秒钟 */
h = (data->timebuffer[6]-48)*10 + (data->timebuffer[7]-48);
if(h>59)
return;
/* 输入正确,则修改index,光标下移 */
switch(data->index)
{
case 3:
case 6:
data->index -= 2;
break;
case 0:
data->index = 7;
break;
default:
break;
}
}
/**********************************************************************************
* Function Name : checkTimerRightInput
* Function Description : 改写时间设置的菜单右键处理函数,使之不接受错误输入
*
* Parameters : timer_data *data I/O
*
* Return : void
*
* Author Name : Wu Yajun
* Date : 2002.10.14
* History: Date :
* Author :
* Modify :
***********************************************************************************/
static void checkTimerRightInput(timer_data *data)
{
int h;
/* 不需要检查,光标右移 */
switch(data->index)
{
case 0:
case 3:
case 6:
data->index++;
return;
}
/* 检查小时 */
h = (data->timebuffer[0]-48)*10+ (data->timebuffer[1]-48);
if(h > 23)
return;
/* 检查分钟 */
h = (data->timebuffer[3]-48)*10 + (data->timebuffer[4]-48);
if(h>59)
return;
/* 检查秒钟 */
h = (data->timebuffer[6]-48)*10 + (data->timebuffer[7]-48);
if(h>59)
return;
/* 输入正确,则修改index,光标下移 */
switch(data->index)
{
case 1:
case 4:
data->index += 2;
break;
case 7:
data->index = 0;
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -