mmiautopower.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,497 行 · 第 1/4 页
C
1,497 行
//2003.10.28 AM/PM问题 wyj
if( FFS_flashData.time_format == TWELVE_HOUR )
{
if( edt_data->AMANDPM ) //下午
{
if( temp_hour<12 && temp_hour>0 )
temp_hour += 12;
}
sprintf(edt_data->time,"%02d:%02d",temp_hour,temp_minute);
}
TRACE_EVENT(edt_data->time);
if( ((((int)edt_data->time[0]-48)*10+((int)edt_data->time[1]-48))>=24)||((((int)edt_data->time[3]-48)*10+((int)edt_data->time[4]-48))>59) )
{
//memset((char*)edt_data->time,0,sizeof(edt_data->time));
edt_data->index=0;
dialog_info_init(&display_info);
display_info.KeyEvents = KEY_OK | KEY_RIGHT | KEY_LEFT;
display_info.LeftSoftKey = '\0';
display_info.RightSoftKey = '\0';
display_info.TextString = '\0';
display_info.TextString2 = '\0';
display_info.TextId2 = TxtInputError;
display_info.TextId = '\0';
display_info.Time = FOREVER;
display_info.Callback = (T_VOID_FUNC)auto_dialog_cb;
display_info.Identifier = 0;
display_info.iconindex = REMIND_NORECORD;
/*
* Call Info Screen
*/
info_dialog (edt_data->win, &display_info);
SEND_EVENT(win, edt_data->id, 0, 0);
}
else
{
if( time_status==OPENTIME )
{
FFS_flashData.poweron_switch=edt_data->power_switch;
FFS_flashData.opentime[0]=0;
FFS_flashData.opentime[1]=0;
/* if(((((int)edt_data->time[0]-48)*10+(int)edt_data->time[1]-48-currclock.hour)*60+
((int)edt_data->time[3]-48)*10+(int)edt_data->time[4]-48-currclock.min>0)&&
((((int)edt_data->time[0]-48)*10+(int)edt_data->time[1]-48-currclock.hour)*60+
((int)edt_data->time[3]-48)*10+(int)edt_data->time[4]-48-currclock.min<4))
{
edt_data->index=0;
dialog_info_init(&display_info);
display_info.TextId2=TxtError;
}*/
FFS_flashData.opentime[0]=((int)edt_data->time[0]-48)*10+(int)edt_data->time[1]-48;
FFS_flashData.opentime[1]=((int)edt_data->time[3]-48)*10+(int)edt_data->time[4]-48;
}
else
{
FFS_flashData.poweroff_switch=edt_data->power_switch;
FFS_flashData.closetime[0]=0;
FFS_flashData.closetime[1]=0;
FFS_flashData.closetime[0]=((int)edt_data->time[0]-48)*10+(int)edt_data->time[1]-48;
FFS_flashData.closetime[1]=((int)edt_data->time[3]-48)*10+(int)edt_data->time[4]-48;
}
flash_write();
autopower_flag=FALSE;
set_latest_alarm();
//TRACE_EVENT((char*)edt_data->offtime);
dialog_info_init(&display_info);
if( edt_data->power_switch )
{
display_info.TextId2 =TxtActivated;
}
else
{
display_info.TextId2 =TxtDeActivated;
}
display_info.Time = FOREVER;
display_info.Callback = (T_VOID_FUNC)NULL;//auto_dialog_cb;
display_info.iconindex = REMIND_COMPLETE;
/*
* Call Info Screen
*/
info_dialog (win, &display_info);
auto_destroy(edt_data->win);
}
break;
case KCD_RIGHT: /* back to previous menu */
case KCD_HUP:
SEND_EVENT(edt_data->win,AUTODESTROY,0,0);
break;
default:
break;
}
return MFW_EVENT_CONSUMED;
}
/* 自动开关机的窗口显示回调函数 */
static int auto_win_cb(T_MFW_EVENT event,T_MFW_WIN * win)
{
autodata *data = (autodata*)win->user;
char string[4];
int old_color;
game_Line line;
game_Rectangle rectangle;
TD_Line l;
TRACE_FUNCTION ("timer_edt_win_cb");
if( event EQ MfwWinVisible )
{
U8 uMode = 0;
int color;
uMode = dspl_Enable(0);
dspl_ClearAll();
/* background display */
TD_drawBkg(BG_rect, BG_attr);
displayTitle( 0, (char *)MmiRsrcGetText(TxtEnterTime), NULL, TITLE_MIDDLE, 0x000000, 0x000000);
/* 2004/05/25 sunsj modify */
//displayTitle( 0, (char *)MmiRsrcGetText(TxtMemoryState), NULL, TITLE_MIDDLE, 0x000000, 0x000000);
#if 0
/* title display */
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);
//title需修改为“开机时间”
/* 2004/05/20 yhf modify */
if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
dspl_colorTextOut(28+EX,0,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtEnterTime),0xffffff);
else
dspl_colorTextOut(20+EX,0,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtEnterTime),0xffffff);
#endif
/* input rect display */
if( data->positon == 0 ) //focus on input rect
{
TD_drawSolidRectangle(AU_input_rect, AU_input_attr1);
l = AU_index_l;
#if(MAIN_LCD_SIZE==4)
l.x1 = AU_index_l.x1 + data->index*8;
l.x2 = AU_index_l.x2 + data->index*8;
#elif (MAIN_LCD_SIZE==3)
l.x1 = AU_index_l.x1 + data->index*6;
l.x2 = AU_index_l.x2 + data->index*6;
#endif
TD_drawLine(l, AU_index_c);
}
else
{
TD_drawSolidRectangle(AU_input_rect, AU_input_attr2);
}
#if(MAIN_LCD_SIZE==4)
dspl_colorTextOut(40+EX, 57, DSPL_TXTATTR_TRANSPARENT, data->time, 0);
#elif (MAIN_LCD_SIZE==3)
dspl_colorTextOut(36+EX, 18, DSPL_TXTATTR_TRANSPARENT, data->time, 0);
#endif
/* switch on/off rect display */
if( data->positon == 1 ) //focus on switch on/off rect
{
#if(MAIN_LCD_SIZE==4)
/* 2004/06 sunsj modify for picture manage */
DRAW_ICON_ATTRIBUTE(ICON_TIMEARROW_KEY, 33+EX, 86, 0, ICON_LOCATION);
DRAW_ICON_ATTRIBUTE(ICON_TIMEARROW_KEY, 84+EX, 86, 1, ICON_LOCATION);
#elif (MAIN_LCD_SIZE==3)
/* 2004/06 sunsj modify for picture manage */
DRAW_ICON_ATTRIBUTE(ICON_TIMEARROW_KEY, 33+EX, 39, 0, ICON_LOCATION|ICON_MASK);
DRAW_ICON_ATTRIBUTE(ICON_TIMEARROW_KEY, 65+EX, 39, 1, ICON_LOCATION|ICON_MASK);
#endif
/*dspl_BitBlt(65+EX, 39, 4, 8, 0, (void *)right_key, DSPL_BMPXOR);
dspl_BitBlt(65+EX, 39, 4, 8, 0, (void *)right_key_mask, DSPL_BMPAND);
dspl_BitBlt(65+EX, 39, 4, 8, 0, (void *)right_key, DSPL_BMPXOR);*/
TD_drawSolidRectangle(AU_SW_rect, AU_SW_attr);
color = 0xffffff;
}
else
{
color = 0x0;
}
if( data->power_switch ) //开启
{
#if(MAIN_LCD_SIZE==4)
if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
dspl_colorTextOut(44+EX,83,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtOpen),color);
else
dspl_colorTextOut(52+EX,83,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtOpen),color);
#elif (MAIN_LCD_SIZE==3)
if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
dspl_colorTextOut(38+EX,36,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtOpen),color);
else
dspl_colorTextOut(45+EX,36,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtOpen),color);
#endif
}
else //关闭
{
#if(MAIN_LCD_SIZE==4)
if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
dspl_colorTextOut(44+EX,83,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtClose),color);
else
dspl_colorTextOut(48+EX,83,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtClose),color);
#elif (MAIN_LCD_SIZE==3)
if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
dspl_colorTextOut(38+EX,36,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtClose),color);
else
dspl_colorTextOut(42+EX,36,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtClose),color);
#endif
}
/* AM/PM rect diaplay */
if( data->positon == 2 ) //focus on AM/PM rect
{
/* 2004/06 sunsj modify for picture manage */
DRAW_ICON_ATTRIBUTE(ICON_TIMEARROW_KEY, 44+EX, 105, 0, ICON_LOCATION);
DRAW_ICON_ATTRIBUTE(ICON_TIMEARROW_KEY, 73+EX, 105, 1, ICON_LOCATION);
//dspl_BitBlt(44+EX, 105, 4, 8, 0, (void *)left_key, 0);
//dspl_BitBlt(73+EX, 105, 4, 8, 0, (void *)right_key, 0);
/*dspl_BitBlt(35+EX, 53, 4, 8, 0, (void *)left_key, DSPL_BMPXOR);
dspl_BitBlt(35+EX, 53, 4, 8, 0, (void *)left_key_mask, DSPL_BMPAND);
dspl_BitBlt(35+EX, 53, 4, 8, 0, (void *)left_key, DSPL_BMPXOR);
dspl_BitBlt(64+EX, 53, 4, 8, 0, (void *)right_key, DSPL_BMPXOR);
dspl_BitBlt(64+EX, 53, 4, 8, 0, (void *)right_key_mask, DSPL_BMPAND);
dspl_BitBlt(64+EX, 53, 4, 8, 0, (void *)right_key, DSPL_BMPXOR);*/
TD_drawSolidRectangle(AU_AP_rect, AU_AP_attr);
if( data->AMANDPM )
dspl_colorTextOut(52+EX,102,DSPL_TXTATTR_TRANSPARENT,"PM",0xffffff);
else
dspl_colorTextOut(52+EX,102,DSPL_TXTATTR_TRANSPARENT,"AM",0xffffff);
}
else
{
if( FFS_flashData.time_format==TWELVE_HOUR )
{
if( data->AMANDPM )
dspl_colorTextOut(52+EX,102,DSPL_TXTATTR_TRANSPARENT,"PM",0);
else
dspl_colorTextOut(52+EX,102,DSPL_TXTATTR_TRANSPARENT,"AM",0);
}
}
/***end yhf modify***/
displaySoftKeys(TxtSoftOK,TxtSoftBack);//confirm
dspl_Enable(uMode);
return 1;
}
return 0;
}
void auto_dialog_cb(T_MFW_HND win, USHORT event, UBYTE reason)
{
TRACE_EVENT ("auto_dialog_cb()");
switch( reason )
{
case INFO_KCD_LEFT:
/* no break; */
case INFO_KCD_HUP:
/* no break; */
case INFO_KCD_RIGHT:
/* no break; */
case INFO_KCD_CLEAR:
//go back to the previous dialog
break;
}
//auto_destroy(win);
}
/* 自动开关机的窗口销毁函数 */
void auto_destroy (T_MFW_HND own_window)
{
T_MFW_WIN *win = ((T_MFW_HDR *)own_window)->data;
autodata *data = (autodata*)win->user;
TRACE_EVENT ("autodestroy()");
if( own_window )
{
/*
* Delete WIN Handler
*/
win_delete (own_window);
/*
* Free Memory
*/
FREE_MEMORY ((void *)data, sizeof (autodata));
}
}
static void reset_edt_attr_sett2(U16 winPx,U16 winPy,U16 winSx,U16 winSy,U8 fgColor,U8 font,U8 mode,
U8 *controls, char *text,U16 size,MfwEdtAttr* attr,U8 dsplTitel)
{
attr->win.px = winPx;
attr->win.py = winPy;
attr->win.sx = winSx;
attr->win.sy = winSy;
attr->fgColor = fgColor;
attr->font = font;
attr->mode = mode;
attr->controls = controls;
attr->text = text;
attr->size = size;
attr->titleMode = dsplTitel;
}
/* 菜单项状态检查 */
USHORT autopower_check (struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
{
char string[8];
TRACE_EVENT("autopower_check");
if( ((!FFS_flashData.poweron_switch) && (!FFS_flashData.poweroff_switch) && (((int)mi->str)==TxtClose))
||(
( ((FFS_flashData.poweron_switch==1) && (((int)mi->str)==TxtAutoPowerOn))
||((FFS_flashData.poweroff_switch==1) && (((int)mi->str)==TxtAutoPowerOff)) )
)
)
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
/* 关机窗口初始化 */
void ConfirmAutopower()
{
T_MFW_HND parent_win = mfwParent( mfw_header());
T_MFW_HND win = ConAutopower_create(parent_win);
if( win NEQ NULL )
SEND_EVENT(win, 0, 0, 0);
}
/* 关机窗口创建 */
static T_MFW_HND ConAutopower_create(MfwHnd parent_window)
{
confirmdata *data = (confirmdata*)ALLOC_MEMORY (sizeof (confirmdata));
T_MFW_WIN *win;
TRACE_EVENT("timer_create");
if( data EQ NULL )
{
return NULL;
}
// Create window handler
data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)conAuto_win_cb);
if( data->win EQ NULL )
{
return NULL;
}
// connect the dialog data to the MFW-window
data->mmi_control.dialog = (T_DIALOG_FUNC)confirm_DialogCB;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->win)->data;
win->user = (void *)data;
data->parent_win = parent_window;
data->info_tim = tim_create (data->win, 1000, (T_MFW_CB)confirm_tim_cb);
data->kbd = kbd_create(data->win,KEY_ALL,(T_MFW_CB)confirm_kbd_cb);
return data->win;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?