📄 mfw_mnu.c
字号:
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 + -