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 + -
显示快捷键?