展讯 List控件的一些基础结构

GUILIST_ITEM_INFO_T *item_info_ptr
  │
  ├─void*              ctrl_ptr[GUIITEM_CONTENT_MAX_NUM]; //每个元素都可能内嵌控件
  ├─MMI_STRING_T       text_buffer;                       //使用大内存管理所有buffer
  └─GUILIST_ITEM_T     item;                              //用户传入的item
    │
    ├─GUIITEM_STYLE_E          item_style;        // item风格,可以指示出列表项是几行的,
    │                                              // 每行有几项内容及内容的类型(图片或文字)
    │                                              // 根据这个风格的指示,可以从s_item_style_table中
    │                                              // 取出风格所对应的GUIITEM_STYLE_T
    ├─GUIITEM_STATE_T          item_state;        // item状态
    ├─GUILIST_ITEM_DATA_T*     item_data_ptr;     // item数据
    │  │
    │  ├─MMI_TEXT_ID_T        softkey_id[GUISOFTKEY_BUTTON_NUM];        // softkey对应的文字资源id
    │  └─GUIITEM_CONTENT_T    item_content[GUIITEM_CONTENT_MAX_NUM];    // item的content,
    │      │                                                             // 最多支持双行5/6个content
    │      │
    │      ├─GUIITEM_DATA_TYPE_E         item_data_type;    // content数据类型,文字或图片
    │      └─GUIITEM_DATA_U              item_data;         // content数据结构,存放具体的文字/图片的ID或指针
    │
    └─uint32                   user_data;           /*!< 用户自定义数据*/
    
   
GUIITEM_STYLE_T
  │
  ├─GUIITEM_THEME_ID_E       content_theme_id[GUIITEM_CONTENT_MAX_NUM];    // 列表item中各content的主题
  ├─GUIITEM_CONTENT_STATE_T  content_state[GUIITEM_CONTENT_MAX_NUM];       //item content state
  ├─GUIITEM_LAYOUT_ID_E      layout_id;                                    //item layout id
  └─uint16                   main_index;                                   //item main index, use for scroll

 

GUIITEM_LAYOUT_DATA_T
  │
  ├─uint16        item_height;                                  //item height
  ├─GUI_RECT_T    item_content_rect[GUIITEM_CONTENT_MAX_NUM];   //item content rect
  ├─GUI_RECT_T    item_select_icon_rect;                        //item selected icon rect
  └─GUI_RECT_T    item_num_icon_rect;                           //item num icon rect

 

画ListItem的基本流程

DrawListItem
├─GetItemInfoPtr    获取项数据的指针 item_info_ptr
├─若列表控件需要在窗口中插入项数据,而且当前项数据的指针为空,则SendNotify到窗口函数
├─MMITHEME_GetItemStyle    获取item_style_ptr GUIITEM_STYLE_T
├─GetItemThemeState    判断列表项的主题状态,如正常、高亮、无效、高亮无效
├─GetSelectIconId
├─GetNumberIconId
├─根据主题状态和GUIITEM_STYLE_T中的layout_id,从s_item_layout_id_table中提取合适的GUIITEM_LAYOUT_DATA_T
├─若整个item仅作为分隔符,则画出分隔符的背景
├─若item需要分隔线,则画分隔线
├─若需要画数字图标,则画出图标
├─画出item中的所有content
│  │
│  ├─根据列表item的主题状态和当前content的主题,来获取当前content的主题数据,如字体、颜色、字符间隔
│  ├─从GUIITEM_LAYOUT_DATA_T中提取content的区域,这个区域是相对于item区域而言的
│  ├─根据显示方向(左向右或者右向左),调整content的区域为相对于屏幕的区域
│  └─根据content数据的类型(文字或图片)进行显示

└─若需要画选择图标,则画出图标

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页