-
Notifications
You must be signed in to change notification settings - Fork 71
Expand file tree
/
Copy pathListCtrlIconView.h
More file actions
123 lines (101 loc) · 4.53 KB
/
ListCtrlIconView.h
File metadata and controls
123 lines (101 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef UI_CONTROL_LIST_CTRL_ICON_VIEW_H_
#define UI_CONTROL_LIST_CTRL_ICON_VIEW_H_
#include "duilib/Control/ListCtrlDefs.h"
namespace ui
{
/** 列表数据显示和布局功能(Icon类型)
* 基本结构:
* <ListCtrlIconView>
* <ListCtrlIconViewItem> <ListCtrlIcon/><ListCtrlLabel/> </ListCtrlIconViewItem>
* ...
* <ListCtrlIconViewItem> <ListCtrlIcon/><ListCtrlLabel/> </ListCtrlIconViewItem>
* </ListCtrlIconView>
* 其中的ListCtrlIcon和ListCtrlLabel的属性,支持从配置文件读取
*/
class ListCtrl;
class ListCtrlData;
class ListCtrlIconView : public ListCtrlView, public IListCtrlView
{
typedef ListCtrlView BaseClass;
public:
explicit ListCtrlIconView(Window* pWindow);
virtual ~ListCtrlIconView() override;
virtual DString GetType() const override { return _T("ListCtrlIconView"); }
virtual void SetAttribute(const DString& strName, const DString& strValue) override;
virtual void HandleEvent(const EventArgs& msg) override;
public:
/** 设置ListCtrl控件接口
*/
void SetListCtrl(ListCtrl* pListCtrl);
/** 设置数据代理对象
* @param[in] pProvider 数据代理对象
*/
virtual void SetDataProvider(VirtualListBoxElement* pProvider) override;
/** 刷新界面,保持数据与显示同步
* @param [in] bSync true表示同步刷新,立即重绘当前视图; false表示异步刷新,刷新动作为异步重绘,标记为脏区域,交给系统重绘界面
*/
virtual void Refresh(bool bSync = false) override;
public:
/** 设置布局方向(默认情况下,Icon视图是纵向布局)
* @param [in] bHorizontal true表示横向布局,false表示纵向布局
*/
void SetHorizontalLayout(bool bHorizontal);
/** 判断当前布局方向是否为横向布局
*/
bool IsHorizontalLayout() const;
/** 获取子项大小,该宽度和高度,是包含了控件的外边距和内边距的
*/
UiSize GetItemSize() const;
/** 设置子项大小
* @param [in] szItem 子项大小数据,该宽度和高度,是包含了控件的外边距和内边距的
*/
void SetItemSize(const UiSize& szItem);
/** 设置是否使用单行文本
*/
void SetTextSingleLine(bool bSingleLine);
/** 获取是否使用单行文本
*/
bool IsTextSingleLine(bool& bSingleLine) const;
/** 监听Icon视图数据项UI元素填充事件(虚表)
* @param [in] callback 要绑定的回调函数
* @param [in] callbackID 该回调函数对应的ID(用于删除回调函数)
* 参数说明:
* wParam: 关联的UI容器子项索引号,有效范围:[0, GetItemCount()),如果值为Box::InvalidIndex,表示未关联任何子项
* lParam: 关联的UI容器子项索引号对应的数据项索引号,有效范围:[0, GetDataItemCount()),如果值为Box::InvalidIndex,表示无关联的数据项
* pEventData: 关联的UI容器子项的界面控件接口指针,类型为:ListCtrlIconViewItem*指针
*/
void AttachIconViewItemFilled(const EventCallback& callback, EventCallbackID callbackID = 0) { this->AttachEvent(kEventIconViewItemFilled, callback, callbackID); }
protected:
/** 创建一个数据项
* @return 返回创建后的数据项指针
*/
virtual Control* CreateDataItem() override;
/** 填充指定数据项
* @param [in] pControl 数据项控件指针
* @param [in] nElementIndex 数据元素的索引ID,范围:[0, GetElementCount())
* @param [in] itemData 数据项(代表行的属性)
* @param [in] subItemList 数据子项(代表每一列的数据, 第1个是列的ID,第2个是列的数据)
*/
virtual bool FillDataItem(Control* pControl,
size_t nElementIndex,
const ListCtrlItemData& itemData,
const std::vector<ListCtrlSubItemData2Pair>& subItemList) override;
/** 获取某列的宽度最大值
* @param [in] subItemList 数据子项(代表每一列的数据)
* @return 返回该列宽度的最大值,返回的是DPI自适应后的值; 如果失败返回-1
*/
virtual int32_t GetMaxDataItemWidth(const std::vector<ListCtrlSubItemData2Ptr>& subItemList) override;
private:
/** ListCtrl 控件接口
*/
ListCtrl* m_pListCtrl;
/** 数据接口
*/
ListCtrlData* m_pData;
/** 是否使用单行文本
*/
bool m_bSingleLine;
bool m_bSingleLineFlag;
};
}//namespace ui
#endif //UI_CONTROL_LIST_CTRL_ICON_VIEW_H_