mmiautopower.c

来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,497 行 · 第 1/4 页

C
1,497
字号
    {
        dialog_info_init(&display_info);
        display_info.RightSoftKey   = TxtSoftBack;
        display_info.TextId2        = TxtDeActivated;
        display_info.iconindex      = REMIND_NORECORD;
        display_info.Time           = FOREVER;
        display_info.Callback       = (T_VOID_FUNC)autoBrowse_dialog_cb;
        info_dialog(win, &display_info);
        return;
    }
    /* background display */
    /* 2004/05/20 yhf remove */
    //TD_drawBkg(BG_rect, BG_attr);

    /* 2004/05/26 sunsj modify */
    displayTitle( 0, (char *)MmiRsrcGetText(TxtBrowseAlarm), NULL, TITLE_MIDDLE, 0x000000, 0x000000);
#if 0
    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);

    /* 2004/05/20 yhf modify */
    if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
        dspl_colorTextOut(28+EX, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtBrowseAlarm),0xffffff);
    else
        dspl_colorTextOut(8+EX, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtBrowseAlarm),0xffffff);
#endif

    if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
        dspl_colorTextOut(14+EX, 23, 0, MmiRsrcGetText(TxtPowerOnTime),0);
    else
        dspl_colorTextOut(6+EX, 23, 0, MmiRsrcGetText(TxtPowerOnTime),0);

    if( FFS_flashData.poweron_switch )
    {
        memset(string,0,8);
        sprintf(string,"%02d:%02d",FFS_flashData.opentime[0],FFS_flashData.opentime[1]);
        drawSolidRectangle(57+EX, 43, 106+EX, 62, 3,0xDBFFFF,0xDBFFFF);          
        dspl_colorTextOut(63+EX,45,DSPL_TXTATTR_TRANSPARENT,string,0);
    }
    else
    {
        drawSolidRectangle(59+EX, 43, 100+EX, 62, 3,0x5AC7FF,0x5AC7FF);
        dspl_colorTextOut(67+EX, 45,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtClose),0xffffff);
    }
    /***end yhf modify***/
    /*2004/05/20 yhf add*/
    line.x1=7+EX;
    line.y1=79;
    line.x2=113+EX;
    line.y2=79;
    line.color=0xB9D9EA;
    DrawLine(line);
    line.x1=6+EX;
    line.y1=80;
    line.x2=114+EX;
    line.y2=80;
    line.color=0x5474A7;
    DrawLine(line);
    line.x1=7+EX;
    line.y1=81;
    line.x2=113+EX;
    line.y2=81;
    line.color=0xB9D9EA;
    DrawLine(line); 
    /***end yhf add***/

    /* 2004/05/20 yhf modify */
    if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
        dspl_colorTextOut(14+EX, 87, 0, MmiRsrcGetText(TxtPowerOffTime),0);
    else
        dspl_colorTextOut(6+EX, 87, 0, MmiRsrcGetText(TxtPowerOffTime),0);

    if( FFS_flashData.poweroff_switch )
    {
        memset(string,0,8);
        sprintf(string,"%02d:%02d",FFS_flashData.closetime[0],FFS_flashData.closetime[1]);
        drawSolidRectangle(57+EX, 106, 106+EX, 125, 3,0xDBFFFF,0xDBFFFF);         
        dspl_colorTextOut(63+EX,108,DSPL_TXTATTR_TRANSPARENT,string,0);
    }
    else
    {
        drawSolidRectangle(59+EX, 106, 100+EX, 125, 3,0x5AC7FF,0x5AC7FF);
        dspl_colorTextOut(67+EX,108,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtClose),0xffffff);
    }
    /***end yhf modify***/

    displaySoftKeys(0, TxtSoftBack);
}
/* 查看状态的按键处理函数 */
static int autoBrowse_kbd_cb(MfwEvt e, MfwKbd *kc)
{
    T_MFW_HND        win        = mfw_parent(mfw_header());
    T_MFW_WIN       *win_data   = ((T_MFW_HDR *)win)->data;
    auto_browse_data *edt_data  = (auto_browse_data*)win_data->user;

    switch( kc->code )
    {
    case KCD_RIGHT:
    case KCD_HUP:
        autoBrowse_destroy(win);
        break;
    default:
        break;
    }
    return 1;
}
/* 查看状态的窗口销毁函数 */
static void autoBrowse_destroy(T_MFW_HND own_window)
{
    T_MFW_WIN           *win    = ((T_MFW_HDR *)own_window)->data;
    auto_browse_data    *data   = (auto_browse_data*)win->user;

    if( own_window )
    {
        /*
        * Delete WIN Handler
         */
        win_delete (own_window);
        /*
        * Free Memory
        */
        FREE_MEMORY ((void *)data, sizeof (auto_browse_data));
    }
}

/* 查看状态信息窗口的回调函数 */
void autoBrowse_dialog_cb(T_MFW_HND win, USHORT event, UBYTE reason)
{
    autoBrowse_destroy(win);
}

/* 自动开关机的窗口创建函数 */
static T_MFW_HND auto_create(MfwHnd parent_window)
{
    autodata    *data   = (autodata*)ALLOC_MEMORY (sizeof (autodata));
    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)auto_win_cb);
    if( data->win EQ NULL )
    {
        return NULL;
    }
    // connect the dialog data to the MFW-window
    data->mmi_control.dialog = (T_DIALOG_FUNC)auto_DialogCB;
    data->mmi_control.data= data;
    win= ((T_MFW_HDR *)data->win)->data;
    win->user= (void *)data;
    data->parent_win= parent_window;

    //reset_edt_attr_sett2(32,60,70,16,0,0,edtCurBar1,0,(char*)data->time,5,&data->editAttr,0);

    data->editor_handle = edt_create(data->win,&data->editAttr,0,0);
    data->kbd= kbd_create(data->win,KEY_ALL,(T_MFW_CB)auto_kbd_cb);    

    return data->win;
}

/* 自动开关机的窗口事件处理函数 
 * 2003.10.28 wyj 修改 12/24小时制问题 */
static void auto_DialogCB(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
    T_MFW_WIN   *win_data   = ((T_MFW_HDR *)win)->data;
    autodata    *data       = (autodata*)win_data->user;
    int hour;

    TRACE_EVENT("auto_DialogCB");

    switch( event )
    {
    case AUTOPOWERON:
        TraceInt(FFS_flashData.opentime[0]);
        TraceInt(FFS_flashData.opentime[1]);
        data->id            = AUTOPOWERON;
        data->index         = 0;
        data->positon       = 0;
        data->power_switch  = TRUE;
        time_status         = OPENTIME;
        memset(data->ontime,0,6);
        memset(data->time,0,6);
        hour = FFS_flashData.opentime[0];
        memset(data->time,0,6);
        /* 2003.10.28 wyj 修改 12/24小时制问题 */
        if( FFS_flashData.time_format == TWELVE_HOUR )
        {
            if( hour > 11 )                   //PM
            {
                data->AMANDPM = 1;
                if( hour != 12 )
                    hour %= 12;
            }
            else                            //AM
            {
                data->AMANDPM = 0;
            }
        }
        sprintf(data->ontime,"%02d:%02d",hour,FFS_flashData.opentime[1]);        
        //sprintf(data->offtime,"%02d:%02d",FFS_flashData.closetime[0],FFS_flashData.closetime[1]);
        strcpy(data->time,data->ontime);
        winShow(data->win);
        break;
    case AUTOPOWEROFF:
        data->id=AUTOPOWEROFF;
        data->index=0;
        data->positon=0;
        data->power_switch=TRUE;
        time_status=CLOSETIME;
        //memset(data->ontime,0,6);
        memset(data->offtime,0,6); 
        memset(data->time,0,6);
        hour=FFS_flashData.closetime[0]; 
        /* 2003.10.28 wyj 修改 12/24小时制问题 */
        if( FFS_flashData.time_format==TWELVE_HOUR )
        {
            if( hour > 11 )                   //PM
            {
                data->AMANDPM = 1;
                if( hour != 12 )
                    hour %= 12;
            }
            else                            //AM
            {
                data->AMANDPM = 0;
            }
        }
        //sprintf(data->ontime,"%02d:%02d",FFS_flashData.opentime[0],FFS_flashData.opentime[1]);        
        sprintf(data->offtime,"%02d:%02d",hour,FFS_flashData.closetime[1]);
        strcpy(data->time,data->offtime);
        winShow(data->win);
        break;
    case DEACTIVIATE:
    case AUTODESTROY:
        auto_destroy(win);
        break;
    default:
        break;
    }
}

/* 2003.10.16 wyj 加入对时间参数的检查
 * 2003.10.28 wyj 解决AM/PM问题  
 * 自动开关机窗口的按键处理函数
 */
static int auto_kbd_cb (MfwEvt e, MfwKbd *kc)
{
    T_MFW_HND       win         = mfw_parent(mfw_header());
    T_MFW_WIN       *win_data   = ((T_MFW_HDR *)win)->data;
    autodata        *edt_data   = (autodata*)win_data->user;//tida edt data
    char            hour[3];
    char            minute[3];
    int             temp_hour;
    int             temp_minute;
    game_Rectangle  rectangle;
    game_Line       line;
    T_DISPLAY_DATA  display_info;
    int flag = 1,t;

    TRACE_EVENT("auto_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->positon )
            break;

        /* 2003.10.16 wyj 加入对时间参数的检查 */
        checkAutoNumInput(edt_data, kc->code);

        winShow(win);
        break;

    case KCD_MNULEFT:
        if( !edt_data->positon )      //焦点在时间输入框
        {
            /* 2003.10.16 wyj 加入对时间参数的检查 */
            checkAutoLeftInput(edt_data);
        }
        else if( edt_data->positon==1 )   //焦点在开启/关闭框
        {
            edt_data->power_switch=!edt_data->power_switch;
        }
        else                        //焦点在AM/PM设置框
        {
            if( FFS_flashData.time_format==TWELVE_HOUR )
            {
                edt_data->AMANDPM=!edt_data->AMANDPM;
            }
        }
        winShow(win);
        break;

    case KCD_MNURIGHT:
        if( !edt_data->positon )
        {
            /* 2003.10.16 wyj 加入对时间参数的检查 */
            checkAutoRightInput(edt_data);
        }
        else if( edt_data->positon==1 )
        {
            edt_data->power_switch=!edt_data->power_switch;
        }
        else
        {
            if( FFS_flashData.time_format==TWELVE_HOUR )
            {
                edt_data->AMANDPM=!edt_data->AMANDPM;
            }
        }
        winShow(win);
        break;

    case KCD_MNUDOWN:               
        edt_data->index=0;
        if( FFS_flashData.time_format==TWELVE_HOUR )
        {
            if( edt_data->positon==2 )
                edt_data->positon=0;
            else
                edt_data->positon++;
        }
        else
        {
            if( edt_data->positon )
                edt_data->positon=0;
            else
                edt_data->positon=1;
        }
        winShow(win);
        break;

    case KCD_MNUUP:
        edt_data->index=0;
        if( FFS_flashData.time_format==TWELVE_HOUR )
        {
            if( edt_data->positon==0 )
                edt_data->positon=2;
            else
                edt_data->positon--;
        }
        else
        {
            if( edt_data->positon )
                edt_data->positon=0;
            else
                edt_data->positon=1;
        }
        winShow(win);
        break;

    case KCD_LEFT:                                 /* select and ok button */
    case KCD_OK:
        TRACE_EVENT("KCD_LEFT");            
        memset(hour,0,3);
        memset(minute,0,3);
        hour[0]=edt_data->time[0];
        hour[1]=edt_data->time[1];
        minute[0]=edt_data->time[3];
        minute[1]=edt_data->time[4];
        temp_hour=atoi(hour);
        temp_minute=atoi(minute);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?