zoukankan      html  css  js  c++  java
  • RDA GUI

    创建服务:“sysapp_table.h” / "dvb_guiobj_table.h" / "atv_guiobj_table.h"

      “服务”与“回调”

            

    1、不同服务的“共享菜单”

      

    2、切换到不同的服务,动态加载对应的UI:如“多媒体服务”

      

    3、窗口“句柄”与“回调”管理:“app_guimgr.c”  

      先声明句柄

      

      再关联资源:

      

      注意枚举与回调数组的对应关系:

        如:DVB的窗口枚举与 公共+DVB回调的对应

       

    4、具体到某一个窗口的回调实例(主菜单窗口):

    const GUI_Object_Definition_t stAPPGuiObjMainMenu =
    {
        GUI_OBJ_CAN_BE_FOCUSED,
        GUI_OBJ_UPDATE_PERIOD * 10,  
        _APP_GUIOBJ_MainMenu_OnCreate,
        _APP_GUIOBJ_MainMenu_OnRelease,
        _APP_GUIOBJ_MainMenu_OnFocused,
        _APP_GUIOBJ_MainMenu_OnLoseFocus,
        _APP_GUIOBJ_MainMenu_OnTimerUpdate,
        _APP_GUIOBJ_MainMenu_OnEvent,
    };

    5、创建/显示窗口的6个步骤:

      最常用的为步骤3、4。

      步骤3:获取部件句柄。    步骤4:动态设置部件参数

      

       刷新部件的两种方式:

      

     6、主菜单绘制

      

    /*主要参数*/
    static MenuPage_Handle_t g_stMenuPage_Handle;            //主菜单窗口句柄
    APP_Mainmenu_SubItemParam_t g_stMainMenuParam;            //标签页内容
    APP_Mainmenu_SubItemParam_t g_stMenuParam;                //ListView内容
    static INT32 g_arTextItemString[MAINMENU_MAX_ITEM+1][2];//ComboBox内容
    
    // g_stMainMenuParam  对应
    static APP_Mainmenu_SubItemEx_t g_stMainmenuItem_Ex[] =
    {
        {TV_IDS_String_Channel,             MAIN_CHANNEL_ITEM,            FALSE},
        {TV_IDS_String_Picture,                MAIN_PICTURE_ITEM,            FALSE},
        {TV_IDS_String_Sound,                 MAIN_SOUND_ITEM,            FALSE},
        {TV_IDS_String_Time,                 MAIN_FEATURE_ITEM,            FALSE},
        {TV_IDS_String_Lock,                 MAIN_LOCK_ITEM,                FALSE},
        {TV_IDS_String_Option,                 MAIN_SETUP_ITEM,            FALSE},
        {TV_IDS_String_SCREEN,                 MAIN_SCREEN_ITEM,            FALSE},
    };
    
    // g_stMenuParam  对应
    static APP_Mainmenu_SubItemEx_t g_stMainmenuItem_PictureEx[] =
    {
        {TV_IDS_String_PictureMode,            PICTURE_MODE_ITEM,            FALSE},
        {TV_IDS_String_Contrast,             CONTRAST_ITEM,                FALSE},
        {TV_IDS_String_Brightness,             BRIGHTNESS_ITEM,            FALSE},
        {TV_IDS_String_Colour,                 COLOUR_ITEM,                FALSE},
        {TV_IDS_String_3D_Steup,             PICTURE_3D_SETUP_ITEM,        FALSE},
    };

    主菜单窗口类型定义:

    /*Handle*/
    typedef struct{
        HWND h_MainMenu_TitleBitmap[MAINMENU_PAGE_MAX];            //主菜单抬头ICON
        HWND h_MainMenu_Icon_Handle;                            //标签页ICON
        HWND h_MainMenu_Title_Handle;                            //标签页title
        HWND h_MenuLayer_Listview_Handle;                        //ListView
        HWND h_MainMenu_TextItem_Handle[MAINMENU_MAX_ITEM];        //ComboBox
    }MenuPage_Handle_t;

    对应资源获取窗口句柄:

    void APP_GUIOBJ_MainMenu_SetHandle(void)
    {
        INT32 i32Count = 0;
    
        GUI_FUNC_CALL(GEL_GetHandle(IDM_MainPage_control,TV_E_IDC_BTN_Button_MainPage_Title,&(g_stMenuPage_Handle.h_MainMenu_Title_Handle)));
        GUI_FUNC_CALL(GEL_GetHandle(IDM_MainPage_control,TV_E_IDC_BTN_Button_MainPage_LeftIcon,&(g_stMenuPage_Handle.h_MainMenu_Icon_Handle)));
        GUI_FUNC_CALL(GEL_GetHandle(IDM_MenuLayer_control,TV_E_IDC_LIST_ListView_MenuLayerText,&(g_stMenuPage_Handle.h_MenuLayer_Listview_Handle)));
    
        for (i32Count = 0; i32Count < MAINMENU_PAGE_MAX; i32Count++)    //MAINMENU_PAGE_MAX=6        TABLE
        {
            GUI_FUNC_CALL(GEL_GetHandle(IDM_MainPage_control,TV_E_IDC_BTN_Button_MainPage_Picture+i32Count,
                &(g_stMenuPage_Handle.h_MainMenu_TitleBitmap[i32Count])));
        }
        for (i32Count = 0; i32Count < MAINMENU_MAX_ITEM; i32Count++)    //MAINMENU_MAX_ITEM=13        ITEM
        {
            GUI_FUNC_CALL(GEL_GetHandle(IDM_MenuLayer_control,TV_E_IDC_COMBO_ComboBox_MenuLayer_Item0+i32Count,
                &(g_stMenuPage_Handle.h_MainMenu_TextItem_Handle[i32Count])));
        }
    }

    标签页内容获取“g_stMainMenuParam”:

    static void _APP_GUIOBJ_MainMenu_GetItemParam(void)
    {
        UINT8 SupportDTV;
        UINT8 SupportATV;
        UINT16 i;
        UINT16 u16Count;
        al_uint32 Support_Input_Source_temp = 0;/*Clear item*/
        memset(&g_stMainMenuParam,0x0,sizeof(APP_Mainmenu_SubItemParam_t));for(i = 0;i < MAIN_MAX_ITEM;i ++)
        {
            u16Count = 0;
            for(i = 0;i < g_u16MainmenuItem_Size;i++)
            {
                if(g_stMainmenuItem_Ex[i].HideFlag)
                {
                    continue;
                }
                g_stMainMenuParam.ItemListStr[u16Count] = g_stMainmenuItem_Ex[i].dStrID;
                g_stMainMenuParam.ItemType[u16Count] = g_stMainmenuItem_Ex[i].Type;
                u16Count ++;
            }
            g_stMainMenuParam.ItemListStr[u16Count] = STRING_LAST;
            g_stMainMenuParam.ItemTotalNum = u16Count;
        }
    }

     ListView内容获取g_stMenuParam

    static void _APP_GUIOBJ_MainMenu_GetSubItemParam(MainMenuItem_t Item)
    {
        UINT16 i = 0;
        UINT16 u16Count = 0;
        memset(&g_stMenuParam,0x0,sizeof(APP_Mainmenu_SubItemParam_t));
        for(i = 0;i<MAINMENU_TOTALITEM_MAX;i++)
        {
            g_stMenuParam.ItemListStr[i] = STRING_ID_INVALID;
            g_stMenuParam.ItemType[i] = 0;
        }
        g_stMenuParam.ItemListStr[MAINMENU_TOTALITEM_MAX] = STRING_LAST;
        g_stMenuParam.ItemType[MAINMENU_TOTALITEM_MAX] = 0;
        g_stMenuParam.ItemTotalNum = 0;
        switch(Item)
        {
            case MAIN_PICTURE_ITEM:
                u16Count = 0;
                for(i = 0;i<g_u16MainmenuItem_PictureEx_Size;i++)
                {
                    if(g_stMainmenuItem_PictureEx[i].HideFlag)
                    {
                        continue;
                    }
                    g_stMenuParam.ItemListStr[u16Count] = g_stMainmenuItem_PictureEx[i].dStrID;
                    g_stMenuParam.ItemType[u16Count] = g_stMainmenuItem_PictureEx[i].Type;
                    u16Count ++;
                }
                g_stMenuParam.ItemListStr[u16Count] = STRING_LAST;
                g_stMenuParam.ItemType[u16Count] = PICTURE_MAX_ITEM;
                g_stMenuParam.ItemTotalNum = u16Count;
                break;
            default:
                break;
        }
    }

    Layer层ComboBox内容获取:

    绘制PICTURE菜单:

    void _APP_GUIOBJ_MainMenu_SetPicture(UINT8 u8PageNum)
    {
        INT32 i32Count = 0;
        UINT32 enString_Id = 0;
        UINT32 u32PictureMode;
        UINT8 index = 0;
        bool u8DisableFlag = FALSE;
        APP_Video_ImageSharpnessAction_t ePictureSharpnessState;
        APP_Video_ImageTintAction_t ePictureTintState;
        APP_Video_ImageNRAction_t ePictureNRState;    
        Picture_Data_t stUIPictureData;
    
        /*清除菜单*/
        _APP_GUIOBJ_MainMenu_ClearSubItem();
    
        /*动态更改或隐藏ITEM*/
        _APP_GUIOBJ_MainMenu_InitSubItemParam(MAIN_PICTURE_ITEM);
    
        /*获取ListView字串g_stMenuParam*/
        _APP_GUIOBJ_MainMenu_GetSubItemParam(MAIN_PICTURE_ITEM);
    
        /*重绘ListView*/
        GUI_FUNC_CALL(GEL_SetParam(g_stMenuPage_Handle.h_MenuLayer_Listview_Handle,PARAM_STATIC_STRING, g_stMenuParam.ItemListStr));
    
        for (i32Count = 0; i32Count < g_stMenuParam.ItemTotalNum; i32Count++)
        {
            index = i32Count%MAINMENU_MAX_ITEM;
            switch(g_stMenuParam.ItemType[i32Count])
            {
                case PICTURE_MODE_ITEM:
                    APP_GUIOBJ_Picture_GetPictureMode(&u32PictureMode);
                    g_arTextItemString[index][0] = u32PictureMode;
                    g_arTextItemString[index][1] = STRING_LAST;
                    /*重绘ComboBox*/
                    GUI_FUNC_CALL(GEL_SetParam(g_stMenuPage_Handle.h_MainMenu_TextItem_Handle[index],PARAM_STATIC_STRING, &g_arTextItemString[index]));
                    break;
                case BRIGHTNESS_ITEM:
                    /*Set brightness*/
                    sprintf(stUIPictureData.pBrightness[0],"%d",stUIPictureData.Brightness);
                    GUI_FUNC_CALL(GEL_SetParam(g_stMenuPage_Handle.h_MainMenu_TextItem_Handle[index],
                        PARAM_DYNAMIC_STRING, stUIPictureData.pBrightness));
                    break;
                default:
                    break;
            }
        }
    
        APP_GUIOBJ_Picture_SetPictureData(&stUIPictureData);
    
        /*设置DISABLE状态*/
        for (i32Count = 0; i32Count < g_stMenuParam.ItemTotalNum; i32Count++)
        {
            /*init disable state*/
            index = i32Count%MAINMENU_MAX_ITEM;
            APP_GUIOBJ_MainMenu_SwitchItemEnorDisable(u8PageNum,i32Count,TRUE);
            u8DisableFlag = FALSE;
            /*Get disabled item*/
            switch(g_stMenuParam.ItemType[i32Count])
            {
                case SHARPNESS_ITEM:
                    APP_Video_CheckSharpnessState(&ePictureSharpnessState);
                    g_ePictureSharpnessState = ePictureSharpnessState;
                    if (ePictureSharpnessState == APP_VIDEO_IMAGE_SHARPNESS_DISABLED)
                    {
                        u8DisableFlag = TRUE;
                    }
                    break;
                    break;
                default:
                    break;
            }
            if(u8DisableFlag)    /*Set diabled item as disable*/
            {
                APP_GUIOBJ_MainMenu_SwitchItemEnorDisable(u8PageNum,i32Count,FALSE);
            }
        }
    
    }

    7、增加/删除窗口

      修改“application adissonmstar ” 对应UI 目录 atv/dvb 下的makefile文件,如:“SRCS_LIST += app_guiobj_dtv_xxx.c”

      application adissonmstar esourcesmenu  目录下的  TV_IDM_xxx.c   TV_IDM_xxx.h,有时需要修改“menu.in”

      增加/删除“application adissonmstarUI_ProjectTV_UIProjectMenus” 目录下的 “uim” 文件,注意使用“uiDesign”工具处理

      增加对应窗口API   app_guiobj_dtv_xxx.c,以及修改Makefile

      app_menumgr.c   //销毁资源

      sysapp_table.h 增加窗口回调

      新建窗口,完成功能示例如下:

      

    8、常用API相关

      //刷新一个部件
        GUI_FUNC_CALL(GEL_RGNBUF_RenderControl(h_List_BinName));

      //刷新一组部件
        APP_GuiMgr_RegionBufferControl(hRegionBuf, u32RegionBufCnt);

      app_menumgr.c

      g_stUserInfoData.AutoInstalled

  • 相关阅读:
    界面开发注意要素,降低界面BUG
    软件测试及其重要性
    浅谈自动化测试工具之Selenium
    浅谈探索式软件测试
    浅谈功能测试流程
    关于软件测试中测试用例的重要性
    第1章 性能测试整体认知
    数据库对比,优化
    2、补充介绍
    1、MarkDown基本语法
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/7285523.html
Copyright © 2011-2022 走看看