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