⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfw_mnu.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    {
       mnu->lCursor[mnu->level] = ca->nItems -1+mnu->lCursor[mnu->level]-3;
       mnu->flags |= E_MNU_TOPPED;
       if (mnu->handler)
          if (mnu->mask & E_MNU_TOPPED)
             mnu->handler(E_MNU_TOPPED,mnu);
    } else
    {
       mnu->lCursor[mnu->level] -= (U8) 3;
       mnu->flags &= ~E_MNU_TOPPED;
    }
    *end talcon */

    /* 2003/10/21,talcon add */
    /*2003/10/31,talcon comment */
#if 0 
    if( mnu->lCursor[mnu->level] == 0 )
    {
        mnu->lCursor[mnu->level] = ca->nItems - 1;
    }
    else if( mnu->lCursor[mnu->level]<4 )
    {
        mnu->lCursor[mnu->level] +=3;    
    }
    else
    {
        mnu->lCursor[mnu->level] +=4;
    }
    mnu->lCursor[mnu->level] %= ca->nItems;
    ci = ca->items + mnu->lCursor[mnu->level];
    if( mnu->lCursor[mnu->level] == ca->nItems -1 )
    {
        mnu->flags |= E_MNU_TOPPED;
        if( mnu->handler )
            if( mnu->mask & E_MNU_TOPPED )
                mnu->handler(E_MNU_TOPPED,mnu);
        if( (ci->flagFunc(mnu,ca,ci)==FLAGFUNC_GRAY) & MNU_ITEM_HIDE )
        {
            mnu->lCursor[mnu->level] += 4;
            mnu->lCursor[mnu->level] %=ca->nItems;
        }
    }
    else
    {
        mnu->flags |= E_MNU_BOTTOMED;
        if( mnu->handler )
            if( mnu->mask & E_MNU_BOTTOMED )
                mnu->handler(E_MNU_BOTTOMED,mnu);
    }
    /*end talcon*/
    ci = ca->items + mnu->lCursor[mnu->level];
#endif
    mfwmnuanim_t.IsMnuTextAnim = mfwmnuanim_t.MnuTextIdx= 0;

    mnuUpdate(mnu);
    dspl_Enable(uMode);
    return MfwResOk;
}
/*talcon 2003/10/31,talcon add */
U8 DomnuPageDown (MfwMnu *mnu)
{
    MfwMnuAttr *ca;
    MfwMnuItem *ci;

    U8 uRet = 0;

    ca = mnu->curAttr;

    if( mnu->lCursor[mnu->level] == 7 )
    {
        mnu->lCursor[mnu->level] = 0;
    }
    else if( mnu->lCursor[mnu->level]<4 )
    {
        mnu->lCursor[mnu->level] += 4;
    }
    else
    {
        mnu->lCursor[mnu->level] -=3;
    }

    if( mnu->lCursor[mnu->level] > ca->nItems-1 )
        return 2;

    ci = ca->items + mnu->lCursor[mnu->level];

    if( (ci->flagFunc(mnu,ca,ci)==FLAGFUNC_GRAY) & MNU_ITEM_HIDE )
        uRet = 1;
    return uRet;
}//////////
MfwRes mnuPageDown (MfwHnd m)
{
    MfwMnu *mnu;
    MfwMnuAttr *ca;
    MfwMnuItem *ci;
    U8 uMode;

    if( (mnu = mfwControl(m)) == 0 )
        return MfwResIllHnd;

    while( DomnuPageDown(mnu) )
    {
    }

    uMode = dspl_Enable(0);

    ca = mnu->curAttr;
    /*2003/10/21,talcon comment it*
    if (mnu->lCursor[mnu->level]==mnu->curAttr->nItems-1)
    {
       mnu->lCursor[mnu->level] =0;
       mnu->flags |= E_MNU_BOTTOMED;
       if (mnu->handler)
          if (mnu->mask & E_MNU_BOTTOMED)
             mnu->handler(E_MNU_BOTTOMED,mnu);
       ci = ca->items + mnu->lCursor[mnu->level];
       mnuUpdate(mnu);
       dspl_Enable(uMode);
       return MfwResOk;
    }
    if (mnu->lCursor[mnu->level]+3>mnu->curAttr->nItems-1)
    {
       TRACE_EVENT("mainmenu the last line");
       mnu->lCursor[mnu->level] =((mnu->lCursor[mnu->level]+3)-(mnu->curAttr->nItems-1));
       mnu->flags |= E_MNU_BOTTOMED;
       if (mnu->handler)
          if (mnu->mask & E_MNU_BOTTOMED)
             mnu->handler(E_MNU_BOTTOMED,mnu);
    } else
    {
       TRACE_EVENT("mainmenu add one line");
       mnu->lCursor[mnu->level] += (U8) 3;
       mnu->flags &= ~E_MNU_BOTTOMED;
 
    }
    * end talcon */

    /* 2003/10/21,talcon add */
    /* 200310/30,talcon comment it */
#if 0 
    if( mnu->lCursor[mnu->level]<4 )
    {
        mnu->lCursor[mnu->level] += 4;   
    }
    else
    {
        mnu->lCursor[mnu->level] +=5;
    }
    mnu->lCursor[mnu->level] %= 8;
    ci = ca->items + mnu->lCursor[mnu->level];
    /*2003/10/31,talcon modofy*/
    //if(mnu->lCursor[mnu->level] == ca->nItems -1 )
    if( mnu->lCursor[mnu->level] == ca->nItems -1 
        || mnu->lCursor[mnu->level] == ca->nItems -2 )
    {
        mnu->flags |= E_MNU_TOPPED;
        if( mnu->handler )
            if( mnu->mask & E_MNU_TOPPED )
                mnu->handler(E_MNU_TOPPED,mnu);
        if( (ci->flagFunc(mnu,ca,ci)==FLAGFUNC_GRAY) & MNU_ITEM_HIDE )
        {
            mnu->lCursor[mnu->level] ++;
            mnu->lCursor[mnu->level] %=ca->nItems;
        }
    }
    else
    {
        mnu->flags |= E_MNU_BOTTOMED;
        if( mnu->handler )
            if( mnu->mask & E_MNU_BOTTOMED )
                mnu->handler(E_MNU_BOTTOMED,mnu);
    }
    /*end talcon*/

    ci = ca->items + mnu->lCursor[mnu->level];
#endif
    mfwmnuanim_t.IsMnuTextAnim = mfwmnuanim_t.MnuTextIdx= 0;
    mnuUpdate(mnu);
    dspl_Enable(uMode);
    return MfwResOk;
}
/*.....................end of zy for mainmenu pageup and pagedown..............*/
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MNU            |
| STATE   : code                        ROUTINE : mnuDown            |
+--------------------------------------------------------------------+

  PURPOSE : one step down

*/

MfwRes mnuDown (MfwHnd m)
{
    MfwMnu *mnu;
    MfwMnuAttr *ca;
    MfwMnuItem *ci;
    U8 uMode;

    if( (mnu = mfwControl(m)) == 0 )
        return MfwResIllHnd;

    ca = mnu->curAttr;
    if( ca->nItems==1 )
        return MfwResOk;
    uMode = dspl_Enable(0);
    do
    {
        if( mnu->lCursor[mnu->level] >= mnu->curAttr->nItems - 1 )
        {
            mnu->lCursor[mnu->level] = 0;
            mnu->flags |= E_MNU_BOTTOMED;
            if( mnu->handler )
                if( mnu->mask & E_MNU_BOTTOMED )
                    mnu->handler(E_MNU_BOTTOMED,mnu);
        }
        else
        {
            mnu->lCursor[mnu->level] += (U8) 1;
            mnu->flags &= ~E_MNU_BOTTOMED;
        }
        ci = ca->items + mnu->lCursor[mnu->level];
    } while( (ci->flagFunc(mnu,ca,ci)==FLAGFUNC_GRAY)& MNU_ITEM_HIDE );//zy change for flagFunction retun vlaue

    if( mnu->scrollMode ) /* Simple scrolling */
    {
        U8 shift = mnu->lShift[mnu->level];
        U8 index = countVisible(mnu,ca,mnu->lCursor[mnu->level]);
        U8 visibleItems = countVisible(mnu,ca,ca->nItems); 
        int ah = ca->area->sy;
        int fh = dspl_GetFontHeight();
        int nLines = ah / fh;

        if( (((mnu->curAttr->mode & MNU_DISPLAY) == MNU_LIST)||((mnu->curAttr->mode & MNU_DISPLAY) == MNU_OVERLAPPED)) && mnu->level>0 ) //zy add mnudown for MNU_OVERLAPPED type
            nLines--;
        else if( (((mnu->curAttr->mode & MNU_DISPLAY) == MNU_LIST)||((mnu->curAttr->mode & MNU_DISPLAY) == MNU_OVERLAPPED))&&(mnu->listmnuflag==1) )//zy change when start dynamic listmenu with title
            nLines--;

        if( visibleItems<nLines )
            nLines = visibleItems;
        if( shift<nLines )
            shift++;
        mnu->lShift[mnu->level] = shift;    

    }
    //-----------ganchh 2002/9/6-----begin
    if( MenuBrowseAction==BrowseInit )  //ganchh 2002/9/6 
        MenuBrowseAction=BrowseNew;  //ganchh 2002/9/6 
    else
        MenuBrowseAction=BrowseDown;  //ganchh 2002/9/6 
    //-----------ganchh 2002/9/8----end

    mfwmnuanim_t.IsMnuTextAnim = mfwmnuanim_t.MnuTextIdx= 0;

    mnuUpdate(mnu);
    dspl_Enable(uMode);
    return MfwResOk;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MNU            |
| STATE   : code                        ROUTINE : mnuSelect          |
+--------------------------------------------------------------------+

  PURPOSE : select a menu item; if there is a submenu, go one level
            down

*/

MfwRes mnuSelect (MfwHnd m)
{
    MfwMnu *mnu;
    MfwMnuAttr *submenu, *ca;
    MenuFunc func;
    U8 dsplOld;

    U8 uMode;//nm
    /*2003/11/01,talcon modify */
    //if(_gMenuTextAnim && mainmenutimer)
    if( mainmenutimer )
    {
        gPlayKeytoneFlag = 1; //2004.1.30 WYJ add 
        timStop(mainmenutimer);
    }
    /*	if(mfwmnuanim_t.listmnulicontimer)
        {
            timStop(mfwmnuanim_t.listmnulicontimer);
        }
    */
    mfwmnuanim_t.IsMnuTextAnim = mfwmnuanim_t.MnuTextIdx= 0;

    if( (mnu = mfwControl(m)) == 0 )
        return MfwResIllHnd;

    ca = mnu->curAttr;

    /* glowing : comment the following block */
    /*
    if ((mnu->curAttr->mode & MNU_DISPLAY) == MNU_VIEWLIST)
    {
       timStop(mnu->ani_timer);
    }
    */

    uMode = dspl_Enable(0);//nm

    /*2003/11/10,talcon add*/
    if( (ca->mode & MNU_DISPLAY) == MNU_VIEWLIST )
    {
		/* 2004/05/28 sunsj modify for wap menu */
		if( mnu->lCursor[0] != 6 )
			displaySoftKeys( TxtSoftSelect, TxtSoftBack);
/*#if(MAIN_LCD_SIZE==3)
		draw_softkeybar_updown_arrow();//jhxu720
#endif*/
    }

    MenuBrowseAction=BrowseNew;   //ganchh 2002/9/6

    submenu = ca->items[mnu->lCursor[mnu->level]].menu;
    func = ca->items[mnu->lCursor[mnu->level]].func;

    if( func )                        /* perform submenu          */
    {
        if( func(mnu,&ca->items[mnu->lCursor[mnu->level]]) != MFW_EVENT_CONSUMED )
            timStart(mainmenutimer);
    }

    if( submenu )                      /* call menu function       */
    {
        MenuBrowseAction=BrowseInit;  //ganchh 2002/9/6 
        if( menuIsEmpty(mnu,submenu) )
        {
            mnu->flags |= E_MNU_EMPTY;
            if( mnu->handler && mnu->mask & E_MNU_EMPTY )
                mnu->handler(E_MNU_EMPTY,mnu);
            mnu->flags &= ~E_MNU_EMPTY;
        }
        else
        {
            dspl_Clear(ca->area->px, ca->area->py,
                       (U16) (ca->area->sx+ca->area->px-1),
                       (U16) (ca->area->sy+ca->area->py-1));
            mnu->level++;
            mnu->lCursor[mnu->level] = 0;
            ca = mnu->curAttr = submenu;
            if( (ca->items->flagFunc(mnu,ca,ca->items)==FLAGFUNC_GRAY)& MNU_ITEM_HIDE )//zy change for flagFunction retun vlaue
                mnuDown(m);
            else
            {
                MenuBrowseAction=BrowseNew;   //ganchh 2002/9/6
                /*2003/11/11,talcon modify */
                //mnuUpdate(mnu);
                mnuCommand(MfwCmdUpdate,m);
            }
        }

        dspl_Enable(uMode);//NM
        return MfwResOk;                      /* we do not have to check for !submenu */
    }

    if( !func && !submenu )                                /* inform mmi               */
    {
        mnu->flags |= E_MNU_SELECT;
        if( mnu->handler && mnu->mask & E_MNU_SELECT )
            mnu->handler(E_MNU_SELECT,mnu);
    }
    dspl_Enable(uMode);//NM
    return MfwResOk;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MNU            |
| STATE   : code                        ROUTINE : mnuEscape          |
+--------------------------------------------------------------------+

  PURPOSE : go back one level or leave the menu

*/

MfwRes mnuEscape (MfwHnd m)
{
    MfwMnu *mnu;
    MfwMnuAttr *attr;
    U8 lvl;
    U8 dsplOld;

    U8 uMode;//nm


    /*2003/11/01,talcon add*/
    mfwmnuanim_t.IsMnuTextAnim = mfwmnuanim_t.MnuTextIdx= 0;
    if( mainmenutimer )
    {
        timStop(mainmenutimer);
    }
    /*	if(mfwmnuanim_t.listmnulicontimer)
        {
            timStop(mfwmnuanim_t.listmnulicontimer);
        }
    */
    /*end ,talcon */
    if( (mnu = mfwControl(m)) == 0 )
        return MfwResIllHnd;

    if( (mnu->curAttr->mode & MNU_DISPLAY) == MNU_VIEWLIST )
    {
        mfwmnuanim_t.nMainMnuIdx = 0xff;
        stopMainMnuTone();
        gPlayKeytoneFlag = 1;
    }

    uMode = dspl_Enable(0);//nm
    MenuBrowseAction=BrowseNew;   //ganchh 2002/9/6
    MC_StopVibra();         //2004.4.16 WYJ modify
    //Stopplayingdevice();   //xsf add 2002.08.12 
    if( mnu->level != 0 )
    {
        mnu->lCursor[mnu->level] = UNUSED;
        mnu->lShift[mnu->level] = 1;
        mnu->level--;
        lvl = 0;                        /* set level 0              */
        attr = mnu->attr;               /* set start point          */
        while( lvl != mnu->level )
        {

⌨️ 快捷键说明

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