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

📄 mfw_mnu.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    if( !m )
        return MfwResIllHnd;

    /*2003/11/10,talcon add*/
    {
        // MfwMnu * mnu = (MfwMnu *) ((MfwHdr *) m)->data;

        {
            mfwmnuanim_t.nDepListMnu -- ;
            timStop( mfwmnuanim_t.listmnulicontimer );  
        }
        mfwmnuanim_t.currentmnu = 0;
        mfwmnuanim_t.currentwin = 0;
    }
    mnuHide(m);
    res = (mfwRemove(m)) ? MfwResOk : MfwResIllHnd;

    mfwFree(((MfwHdr *) m)->data,sizeof(MfwMnu));
    mfwFree(m,sizeof(MfwHdr));

    return res;
}


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

  PURPOSE : set / get whether the string is associated with an ID or if it is null-terminated

  GW 05/10/01 - Changed single value 'lng' to 2 values indicating if ID's should be 
            used (useStrID) and if the strings are ascii or unicode (uesDefLang).
*/

MfwHnd mnuLang (MfwHnd m, MfwHnd l)
{
    MfwHnd ol;
    MfwMnu *mnu;

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

    ol = mnu->useStrID;
    mnu->useStrID = l;
    mnu->useDefLang = l;

    return ol;
}

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

  PURPOSE : set / get language in use (1=use default ascii/unicode, 0=assume ascii)

  GW 05/10/01 - Changed single value 'lng' to 2 values indicating if ID's should be 
            used (useStrID) and if the strings are ascii or unicode (uesDefLang).
*/
MfwHnd mnuStrType (MfwHnd m, MfwHnd l)
{
    MfwHnd ol;
    MfwMnu *mnu;

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

    ol = mnu->useDefLang;
    mnu->useDefLang = l;

    return ol;
}


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

  PURPOSE : show menu

*/

MfwRes mnuShow (MfwHnd m)
{
    MfwMnu *mnu;
    U8 uMode;

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

    uMode = dspl_Enable(0);//ganchh 2002/6/12

    mnu->flags |= E_MNU_VISIBLE;
    mnuUpdate(mnu);

    dspl_Enable(uMode);//ganchh 2002/6/12
    return MfwResOk;
}


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

  PURPOSE : hide menu

*/

MfwRes mnuHide (MfwHnd m)
{
    MfwMnu *mnu;
    U8 dsplOld;

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

    mnu->flags &= ~E_MNU_VISIBLE;
    if( mnu->handler )
        if( mnu->mask & E_MNU_VISIBLE )
            mnu->handler(E_MNU_VISIBLE,mnu);

    return MfwResOk;
}


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

  PURPOSE : unhide menu (without drawing)

*/

MfwRes mnuUnhide (MfwHnd m)
{
    MfwMnu *mnu;
    U8 dsplOld;

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

    mnu->flags |= E_MNU_VISIBLE;
    if( mnu->handler )
        if( mnu->mask & E_MNU_VISIBLE )
            mnu->handler(E_MNU_VISIBLE,mnu);
    return MfwResOk;
}

int IsViewListMenu(MfwHnd m)
{
    MfwMnu *mnu;
    if( (mnu = mfwControl(m)) == 0 )
        return 0;
    if( (mnu->curAttr->mode & MNU_DISPLAY) == MNU_VIEWLIST )
        return 1;
    else
        return 0;

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

  PURPOSE : draw menu

*/

MfwRes mnuUpdate (MfwMnu *m)
{

    U8 dsplOld;
    UINT32 oldColor;
    UINT32 oldFontColor;
    if( !m )
        return MfwResIllHnd;
    if( !(m->flags & E_MNU_VISIBLE) )
        return MfwResOk;

    if( m->handler )
        if( m->mask & E_MNU_VISIBLE )
            m->handler(E_MNU_VISIBLE,m);

        /*JVJE Update to fit the menu to a visible item */
    {
        MfwMnuAttr *ma = m->curAttr;
        int index= m->lCursor[m->level];

        while( (ma->items[index].flagFunc(m,ma,&(ma->items[index]))==FLAGFUNC_GRAY) & MNU_ITEM_HIDE )//zy change for flagFunction retun vlaue
        {
            index++;
            if( index>=ma->nItems )
                index =0;
        } 
        m->lCursor[m->level]=index;       
    }
    if( (m->curAttr->mode & MNU_DISPLAY) != MNU_VIEWLIST )
    {
        mfwmnuanim_t.nMainMnuIdx = 0xff;
    }
    //timStop( m->ani_timer );
    if( mainmenutimer != NULL )
        timStop( mainmenutimer );

    /*2003/11/10,talcon add*/
    mfwmnuanim_t.currentmnu = m;

    if( mfwmnuanim_t.listmnulicontimer )
        timStop(mfwmnuanim_t.listmnulicontimer);

    MMI_TRACE_EVENT(("<<<talcon,mnuUpdate--mode:0x%08x",m->curAttr->mode));
    if( (m->curAttr->mode & MNU_DISPLAY) == MNU_OVERLAPPED )
    {
        // _gMenuTextIndex = _gMenuTextAnim = 0;
        mfwmnuanim_t.IsMnuTextAnim = 0;
        mfwmnuanim_t.MnuTextIdx = 0;

        mfwmnuanim_t.MnuLeftIconIdx = 0;
        mfwmnuanim_t.nMainTimer = 0;
        drawListMenu(m);
        mfwmnuanim_t.currentmnu = m;
        if( (m->curAttr->mode & MNU_BOOKPHONE) ==0 )//排除电话本
        {
            timSetTime(mfwmnuanim_t.listmnulicontimer,listmnu_timeout);
            timStart( mfwmnuanim_t.listmnulicontimer);
        }


    }
    else if( (m->curAttr->mode & MNU_DISPLAY) == MNU_PAGED )
        drawPageMenu(m);
    else if( (m->curAttr->mode & MNU_DISPLAY) == MNU_VIEWLIST )
    {
        drawViewListMenu( m);
        if( Mmi_getCurrentLanguage()==2 ) // 2004.4.13 WYJ not play voice in English
            gPlayKeytoneFlag = 2;
        else
            gPlayKeytoneFlag = 1;

        //timStart( m->ani_timer);
        timStart( mainmenutimer );
        if( mfwmnuanim_t.nMainMnuIdx != m->lCursor[(int)m->level] )
        {
            mfwmnuanim_t.nMainMnuIdx = m->lCursor[(int)m->level];
            if( FlashEnvironmentData.EnviroProfile[FlashEnvironmentData.CurrentEnv].KeypadTone == 2 
                && (Mmi_getCurrentLanguage()== 2) )
            {
                StopPlayingMelody2();
                playMainMnuTone(mfwmnuanim_t.nMainMnuIdx);
            }
        }
    }
    else if( (m->curAttr->mode & MNU_DISPLAY) == MNU_LIST )
    {
        mfwmnuanim_t.MnuLeftIconIdx = 0;
        mfwmnuanim_t.nMainTimer = 0;
        drawListMenu(m);

        mfwmnuanim_t.currentmnu = m;
        timSetTime(mfwmnuanim_t.listmnulicontimer,listmnu_timeout);
        timStart( mfwmnuanim_t.listmnulicontimer);
    }

    return MfwResOk;
}


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

  PURPOSE : one step up

*/

MfwRes mnuUp (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] == 0 )
        {
            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);
        }
        else
        {
            mnu->lCursor[mnu->level] -= (U8) 1;
            mnu->flags &= ~E_MNU_TOPPED;
        }
        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 mnuup for 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>1 )
            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=BrowseUp;  //ganchh 2002/9/6 
    //-----------ganchh 2002/9/8----end

    mfwmnuanim_t.IsMnuTextAnim = mfwmnuanim_t.MnuTextIdx= 0;

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

/*.....................zy for mainmenu pageup and pagedown..............*/

/*talcon 2003/10/31,talcon add */
U8 DomnuPageUp (MfwMnu *mnu)
{
    MfwMnuAttr *ca;
    MfwMnuItem *ci;

    U8 uRet = 0;

    ca = mnu->curAttr;

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

    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 mnuPageUp (MfwHnd m)
{
    MfwMnu *mnu;
    MfwMnuAttr *ca;
    MfwMnuItem *ci;
    U8 uMode;

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

    /* 2003/10/31,talcon add */
    while( DomnuPageUp(mnu) )
    {
    }
    /* end talcon */

    uMode = dspl_Enable(0);
    TRACE_EVENT("mnuPageUp");

    ca = mnu->curAttr;
    /*2003/10/21,talcon comment it *
    if (mnu->lCursor[mnu->level] == 0)
    {
       mnu->lCursor[mnu->level] = ca->nItems+2 ;           
       do
       {
          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);
          ci = ca->items + mnu->lCursor[mnu->level];
       }while ((ci->flagFunc(mnu,ca,ci)==FLAGFUNC_GRAY) & MNU_ITEM_HIDE);
       mnuUpdate(mnu);
       dspl_Enable(uMode);
       return MfwResOk;
    }
    if (mnu->lCursor[mnu->level] <= 2)

⌨️ 快捷键说明

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