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\radisson\mstar ” 对应UI 目录 atv/dvb 下的makefile文件,如:“SRCS_LIST += app_guiobj_dtv_xxx.c”

  application\radisson\mstar\resources\menu  目录下的  TV_IDM_xxx.c   TV_IDM_xxx.h,有时需要修改“menu.in”

  增加/删除“application\radisson\mstar\UI_Project\TV_UIProject\Menus” 目录下的 “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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值