📄 mmistopwatch.c
字号:
winShow(win);
return data->win;
}
/* 秒钟窗口事件处理函数 若记录不满则启动定时器,开始计时 */
static void stopw_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data;
StopwData *data = (StopwData *) win_data->user;
T_EDITOR_DATA editor_data;
T_DISPLAY_DATA display_info;
TRACE_EVENT("stopw_DialogCB");
data->event = event;
data->type = value;
switch( event )
{
case STOPW_COUNT:
strcpy((char*)data->timebuffer,"00:00:00:0");
data->RightKey=TRUE;
data->recordNumber=0;
winShow(win);
//dspl_Clear(20, 69, 117, 89);
reset();
data->groupNumber=StopwMemoRead();//gdy add 27/08/02
if( data->groupNumber>4 ) //记录满
{
dialog_info_init(&display_info);//gdy add
display_info.TextId2 =TxtFull;
display_info.Time = FOREVER;
display_info.Callback = (T_VOID_FUNC)NULL;//sepa_dialog_cb;
display_info.iconindex = REMIND_NORECORD;
/*
* Call Info Screen
*/
info_dialog (win, &display_info);
stopwatch_destroy(stopw_win);
break;
}
data->kbd = kbd_create(win, KEY_ALL, (T_MFW_CB)stopw_kbd_cb);
data->info_tim=timCreate(data->win,100,(T_MFW_CB)stopw_tim_cb); //0.1S为单位
tim_start(data->info_tim);
break;
case STOPW_EXIT:
stopwatch_destroy(win);
break;
}
}
/* 定时器溢出处理函数 不满一小时继续启动定时器 满一小时 */
static T_MFW_CB stopw_tim_cb(MfwEvt e, MfwTim *tc)
{
T_MFW_HND win = mfw_parent (mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
StopwData * data = (StopwData*)win_data->user;
T_DISPLAY_DATA display_info;
unsigned int t = 0;
char str[4];
TRACE_EVENT("stopwatch_tim_cb");
if( data->counter<36000 ) /*The maxmum record number is 5 by name*/
{
if( data->recordNumber<A_GROUP_NUMBER ) /*Tne maxemu record number of each name is 40*/
{
data->counter++;
tim_start(data->info_tim);
}
else
{
data->groupNumber++;
data->recordNumber=0;
tim_stop(data->info_tim);
//SEND_EVENT(win, SUBMENU, data->Identifier,0);/*create submenu to choice the next step*/
}
sprintf((char*)str,"%02d:",data->counter/36000);
strcpy((char*)data->timebuffer,(char*)str);
sprintf((char*)str,"%02d:",(data->counter%36000)/600);
strcat((char*)data->timebuffer,(char*)str);
sprintf((char*)str,"%02d:",((data->counter%36000)%600)/10);
strcat((char*)data->timebuffer,(char*)str);
sprintf((char*)str,"%d",((data->counter%36000)%600)%10);
strcat((char*)data->timebuffer,(char*)str);
/*
* Print the elapsed time
*/
/* 2003.11.19 WYJ 修正电话进来时窗口显示的bug */
if( (stopw_win NEQ NULL) && winIsFocussed(stopw_win) )
#if(MAIN_LCD_SIZE==4)
dspl_colorTextOut(28, 72, 0,(char*)data->timebuffer,0x5474A7);
#elif (MAIN_LCD_SIZE==3)
dspl_colorTextOut(20, 18, 0,(char*)data->timebuffer,0x5474A7);
#endif
/***end yhf modify***/
//dspl_colorTextOut(22, 66, 0,(char*)data->timebuffer,0x0000ff);
/*
* Print softkeys */
}
else
{
dialog_info_init(&display_info);//gdy add
display_info.KeyEvents = KEY_OK | KEY_RIGHT | KEY_LEFT;
display_info.LeftSoftKey = '\0';
display_info.RightSoftKey = TxtSoftBack;
display_info.TextString = '\0';
display_info.TextString2 = '\0';
display_info.TextId2 =TxtFull;
display_info.TextId = '\0';
display_info.Time = FOREVER;
display_info.Callback = (T_VOID_FUNC)NULL;//sepa_dialog_cb;
display_info.iconindex = REMIND_COMPLETE;
display_info.Identifier =0;
/*
* Call Info Screen
*/
info_dialog (win, &display_info);
stopwatch_destroy(stopw_win);
}
return 0;
}
/* 秒表窗口显示回调函数 */
static int stopw_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
StopwData* data = (StopwData *)win->user;
T_DISPLAY_DATA display_info;
char str[4];
int old_color;
game_Line line;
TRACE_EVENT ("stopw_win_cb()");
if( data EQ 0 )
return 1;
switch( event )
{
case E_WIN_VISIBLE:
if( win->flags & E_WIN_VISIBLE )
{
U8 uMode = 0;
uMode = dspl_Enable(0);
//title display
dspl_ClearAll();
#if(MAIN_LCD_SIZE==3)
/* 2004/05/18 yhf modify */
TD_drawBkg(BG_rect, BG_attr);
#endif
/* 2004/06 sunsj modify for picture manage */
DRAW_ICON(ICON_MENUUP);
/*
dspl_BitBlt( menuup[FlashSettingData.theme].area.px,menuup[FlashSettingData.theme].area.py,
menuup[FlashSettingData.theme].area.sx,menuup[FlashSettingData.theme].area.sy,
menuup[FlashSettingData.theme].nIcons,menuup[FlashSettingData.theme].icons,0);
*/
// icon display
#if(MAIN_LCD_SIZE==4)
/* 2004/05/31 yhf modify */
if( !data->type )
dspl_colorTextOut(28, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtSeparately), 0x0);
else
dspl_colorTextOut(28, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtBycircle), 0x0);
if( data->type )
{
DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_CIRCLE, 2, 72, 0, ICON_LOCATION|ICON_MASK_OWN);
/*
dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle_mask, DSPL_BMPAND);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
*/
}
else
{
DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_SEPA, 2, 72, 0, ICON_LOCATION|ICON_MASK_OWN);
/*
dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa_mask, DSPL_BMPAND);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
*/
}
#elif(MAIN_LCD_SIZE==3)
if( !data->type )
dspl_colorTextOut(32, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtSeparately), 0x0);
else
dspl_colorTextOut(32, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtBycircle), 0x0);
if( data->type )
{
DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_CIRCLE, 2, 20, 0, ICON_LOCATION|ICON_MASK_OWN);
/*
dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle_mask, DSPL_BMPAND);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
*/
}
else
{
DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_SEPA, 2, 20, 0, ICON_LOCATION|ICON_MASK_OWN);
/*
dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa_mask, DSPL_BMPAND);
dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
*/
}
#endif
#if(MAIN_LCD_SIZE==4)
drawSolidRectangle(20, 69, 116 , 88, 1,0xFFFFFF,0x95668A);//0x5AC7FF
line.x1=20;
line.x2=116;
line.y1=89;
line.y2=89;
line.color=0xCDAAC5;
DrawLine(line);
line.x1=117;
line.x2=117;
line.y1=69;
line.y2=88;
line.color=0xCDAAC5;
DrawLine(line);
dspl_colorTextOut(28, 72, DSPL_TXTATTR_TRANSPARENT,(char*)data->timebuffer,0x000000);
#elif(MAIN_LCD_SIZE==3)
drawSolidRectangle(20, 18, 99, 30, 1,0xFFFFFF,0x95668A);//0x5AC7FF
line.x1=20;
line.x2=99;
line.y1=31;
line.y2=31;
line.color=0xCDAAC5;
DrawLine(line);
line.x1=99;
line.x2=99;
line.y1=19;
line.y2=30;
line.color=0xCDAAC5;
DrawLine(line);
dspl_colorTextOut(20, 18, DSPL_TXTATTR_TRANSPARENT,(char*)data->timebuffer,0x000000);
#endif
if( (data->RightKey)&&(data->recordNumber<A_GROUP_NUMBER) )
displaySoftKeys(TxtSoftOK, TxtStop);//confirm
else
displaySoftKeys(TxtSoftOptions, TxtSoftBack);
dspl_Enable(uMode );
}
break;
default:
return 0;
}
return 1;
}
/* 计时窗口按键处理 */
static int stopw_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
T_MFW_HND win = mfw_parent (mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
StopwData* data = (StopwData *)win_data->user;
T_DISPLAY_DATA display_info;
TRACE_EVENT("stopw_kbd_cb");
g_norejectkeyflag=1;
switch( keyboard->code )
{
case KCD_LEFT:
case KCD_OK:
if( (data->RightKey)&&(data->recordNumber<A_GROUP_NUMBER) ) //计时没停且记录未满
{
if( !data->type ) //分别计时
{
temp_data.record[data->recordNumber]=data->counter;
temp_data.group_number=data->groupNumber+1;
}
else //以圈计时
{
temp_data.record[data->recordNumber]=data->counter;
temp_data.group_number=data->groupNumber+1;
data->counter=0;
}
temp_data.type=data->type;
data->recordNumber++;
if( data->recordNumber==A_GROUP_NUMBER )
{
tim_stop(data->info_tim);
data->RightKey=FALSE;
displaySoftKeys(TxtSoftOptions, TxtSoftBack);
#if(MAIN_LCD_SIZE==3)
draw_softkeybar_updown_arrow();//jhxu720
#endif
winShow(win);
}
}
else
{
if( !temp_data.record[0] )
{
dialog_info_init(&display_info);//gdy add
display_info.TextId2 =TxtNorecord;
display_info.Time = FOREVER;
display_info.Callback = (T_VOID_FUNC)NULL;//sepa_dialog_cb;
display_info.iconindex = REMIND_NORECORD;
/*
* Call Info Screen
*/
info_dialog (win, &display_info);
g_norejectkeyflag=0;
stopwatch_destroy(stopw_win);
break;
}
dspl_Clear(20, 69, 117, 89);
g_norejectkeyflag=0;
ToolkitTitle=TxtStopwatch;
data->menu_options_win = bookMenuStart(stopw_menu_win,CountMenuAttributes(),PhbkToolkit);
SEND_EVENT(data->menu_options_win, ADD_CALLBACK, NULL, (void*)stopw_menu_cb);
}
break;
case KCD_RIGHT:
if( data->RightKey ) //没停
{
tim_stop(data->info_tim);
data->RightKey=FALSE;
displaySoftKeys(TxtSoftOptions, TxtSoftBack);
winShow(win);
}
else
SEND_EVENT(win, STOPW_EXIT, 0, 0);
break;
case KCD_HUP:
SEND_EVENT(win, STOPW_EXIT, 0, 0);
break;
default:
break;
}
return MFW_EVENT_CONSUMED;
}
static void stopw_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
{
T_MFW_WIN *win_data = ( (T_MFW_HDR *) parent_win )->data;
StopwData* data = (StopwData *) win_data->user;
switch( reason )
{
case INFO_KCD_RIGHT:
bookMenuDestroy(data->menu_options_win);
stopwatch_destroy(parent_win);
break;
default:
break;
}
}
/* 销毁秒表窗口 */
void stopwatch_destroy(MfwHnd own_window)
{
T_MFW_WIN * win = ((T_MFW_HDR *)own_window)->data;
StopwData* data = (StopwData*)win->user;
TRACE_EVENT ("stopwatch_destroy()");
g_norejectkeyflag=0;
if( own_window )
{
/*
* Delete WIN Handler
*/
stopw_win=NULL;
win_delete (own_window);
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -