// ========================================================================= // 函数功能:确认键响应函数 // 输入参数:operatingDispara,当前正在操作的菜单项 // 输出参数: // 返回值 :经过更新的当前正在操作的菜单项 // 说明 :在九宫格中,对于确认键,主菜会切换到子菜单项,子菜单会切换到子菜单项 // 如果没有子菜单项,则会执行当前操作项的钩子函数 // ========================================================================= struct menu_displaypara* KeyEnterAction_9cell(struct menu_displaypara* operatingDispara) { if(NULL==operatingDispara->pre)//主菜单 { if(GetSonMenuitem(operatingDispara->OperatingMenuitem)) { operatingDispara=goto_submenu(operatingDispara); } else { operatingDispara= exe_menuitemfunc(operatingDispara); } } else//子菜单 { if(GetSonMenuitem(operatingDispara->OperatingMenuitem)) { operatingDispara=goto_submenu(operatingDispara); } else { operatingDispara= exe_menuitemfunc(operatingDispara); } } return operatingDispara; }
// ========================================================================= // 函数功能:确认键响应函数 // 输入参数:operatingDispara,当前正在操作的菜单项 // 输出参数: // 返回值 :经过更新的当前正在操作的菜单项 // 说明 :在下拉菜单中,对于确认键,当前菜单项有子菜单则会展开子菜单项,否则会 // 执行当前菜单项的钩子函数 // ========================================================================= struct menu_displaypara* KeyEnterAction_pull(struct menu_displaypara* operatingDispara) { if(GetSonMenuitem(operatingDispara->OperatingMenuitem)) { operatingDispara=goto_submenu(operatingDispara); } else { operatingDispara=exe_menuitemfunc(operatingDispara); } return operatingDispara; }
// ========================================================================= // 函数功能:为九格显示参数创建显示参数 // 输入参数:pre,前级显示参数,menuitem,当前显示参数所关联的菜单项,Appwin,应用程序提供的显示窗口 // 注意当pre为空的时候表示的是创建主显示参数,这时候会用到APPWIN和menuitem,否则这两项会从 // pre中提取 // 输出参数: // 返回值 : //需要说明的是:位置前面都计算好了,已经没有啥子好说的了 // ========================================================================= struct menu_displaypara *createmenudisparabypre_9cell(struct menu_displaypara *pre,struct menu_item *menuitem,struct GkWinRsc *Appwin) { bool_t result; struct menu_displaypara *cur=NULL; struct Rectangle Disparawin_rec; // struct GkWinRsc *win; //简单的根据前一个菜单窗口创建 if((NULL==pre)&&((NULL==menuitem)||(NULL==Appwin))) { printf("Not enough para to create the menudispara,You must be joking!\n"); } cur=mallocdisplaypara(); if(NULL==cur) { printf("Not enough mem for CreateParaMenuwinBypre!\n"); return cur; } if(NULL==pre) { // printf("This is the main menu!\n"); cur->AppWin=Appwin; cur->FVisualMenuitem=GetBBmenuitem(menuitem); cur->OperatingMenuitem=menuitem; cur->LVisualMenuitem=GetPreMenuitem(cur->FVisualMenuitem); cur->MyMenuDispalyFunction=NULL; cur->MyPeripheralGeneralAction=NULL; cur->MyDisplayPeripheralRespond=NULL; cur->AdjustVisualMenuitem=NULL; cur->CreateMenuDisparaBypre=NULL; cur->MyMenuInitFunction=NULL; } else { // printf("This is the sub menu!\n"); cur->AppWin=pre->AppWin; cur->FVisualMenuitem=GetSonMenuitem(pre->OperatingMenuitem); cur->OperatingMenuitem=cur->FVisualMenuitem; cur->LVisualMenuitem=GetPreMenuitem(cur->FVisualMenuitem); //初始化一些函数指针 cur->menukeyboard_action = pre->menukeyboard_action; cur->menumousetouch_ction = pre->menumousetouch_ction; cur->MyPeripheralGeneralAction = pre->MyPeripheralGeneralAction; cur->MyMenuDispalyFunction=pre->MyMenuDispalyFunction; cur->MyPeripheralGeneralAction=pre->MyPeripheralGeneralAction; cur->MyDisplayPeripheralRespond=pre->MyDisplayPeripheralRespond; cur->AdjustVisualMenuitem=pre->AdjustVisualMenuitem; cur->CreateMenuDisparaBypre=pre->CreateMenuDisparaBypre; cur->MyMenuInitFunction=pre->MyMenuInitFunction; //添加到链表中 adddisplaypara(pre,cur); } //计算空间 Disparawin_rec=CalDisAreaFromPre_9cell(pre,cur); //创建窗口 result=create_menudisparawin(cur, Disparawin_rec, cur->FVisualMenuitem->node.name); if(!result) { printf("Failed--- createmenudisparabypre_9cell!\n"); deldisplaypara(cur); cur=NULL; return cur; } return cur; }