soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SGridLayout.h
1#ifndef __SGRIDLAYOUT__H__
2#define __SGRIDLAYOUT__H__
3
4#include <interface/slayout-i.h>
5#include <layout/SGridLayoutParamStruct.h>
6#include <sobject/Sobject.hpp>
7
8SNSBEGIN
9
10// Int = %d StringA
11#define ATTR_GRIDGRAVITY(attribname, varname, allredraw) \
12 if (0 == strAttribName.CompareNoCase(attribname)) \
13 { \
14 varname = SGridLayoutParam::parseGridGravity(strValue); \
15 hRet = allredraw ? S_OK : S_FALSE; \
16 } \
17 else
18
19/**
20 * @class SGridLayoutParam
21 * @brief 网格布局参数类
22 */
24 : public TObjRefImpl<SObjectImpl<ILayoutParam>>
25 , protected SGridLayoutParamStruct {
26 DEF_SOBJECT(TObjRefImpl<SObjectImpl<ILayoutParam>>, L"GridLayoutParam")
27
28 friend class SGridLayout;
29
30 public:
31 /**
32 * @brief 解析网格对齐方式
33 * @param strValue 对齐方式字符串
34 * @return 解析后的对齐方式枚举值
35 */
36 static GridGravity parseGridGravity(const SStringW &strValue);
37
38 /**
39 * @brief 构造函数
40 */
42
43 /**
44 * @brief 清除布局参数
45 */
46 STDMETHOD_(void, Clear)(THIS) OVERRIDE;
47
48 /**
49 * @brief 检查是否匹配父容器大小
50 * @param orientation 方向(水平或垂直)
51 * @return 如果匹配父容器大小返回TRUE,否则返回FALSE
52 */
53 STDMETHOD_(BOOL, IsMatchParent)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
54
55 /**
56 * @brief 检查是否包裹内容大小
57 * @param orientation 方向(水平或垂直)
58 * @return 如果包裹内容大小返回TRUE,否则返回FALSE
59 */
60 STDMETHOD_(BOOL, IsWrapContent)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
61
62 /**
63 * @brief 检查是否指定大小
64 * @param orientation 方向(水平或垂直)
65 * @return 如果指定大小返回TRUE,否则返回FALSE
66 */
67 STDMETHOD_(BOOL, IsSpecifiedSize)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
68
69 /**
70 * @brief 获取指定大小
71 * @param orientation 方向(水平或垂直)
72 * @return 指定大小
73 */
74 STDMETHOD_(SLayoutSize, GetSpecifiedSize)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
75
76 /**
77 * @brief 设置匹配父容器大小
78 * @param orientation 方向(水平或垂直)
79 */
80 STDMETHOD_(void, SetMatchParent)(THIS_ ORIENTATION orientation) OVERRIDE;
81
82 /**
83 * @brief 设置包裹内容大小
84 * @param orientation 方向(水平或垂直)
85 */
86 STDMETHOD_(void, SetWrapContent)(THIS_ ORIENTATION orientation) OVERRIDE;
87
88 /**
89 * @brief 设置指定大小
90 * @param orientation 方向(水平或垂直)
91 * @param layoutSize 指定大小
92 */
93 STDMETHOD_(void, SetSpecifiedSize)
94 (THIS_ ORIENTATION orientation, const SLayoutSize &layoutSize) OVERRIDE;
95
96 /**
97 * @brief 获取原始数据指针
98 * @return 原始数据指针
99 */
100 STDMETHOD_(void *, GetRawData)(THIS) OVERRIDE;
101
102 /**
103 * @brief 克隆布局参数
104 * @return 克隆的布局参数对象指针
105 */
106 STDMETHOD_(ILayoutParam *, Clone)(THIS) SCONST OVERRIDE;
107
108 public:
109 SOUI_ATTRS_BEGIN()
110 ATTR_INT(L"rowSpan", nRowSpan, TRUE) // 行跨越数
111 ATTR_INT(L"columnSpan", nColSpan, TRUE) // 列跨越数
112 ATTR_CUSTOM(L"width", OnAttrWidth) // 宽度
113 ATTR_CUSTOM(L"height", OnAttrHeight) // 高度
114 ATTR_CUSTOM(L"size", OnAttrSize) // 大小
115 ATTR_GRIDGRAVITY(L"layout_xGravity", layoutGravityX, TRUE) // 水平对齐方式
116 ATTR_GRIDGRAVITY(L"layout_yGravity", layoutGravityY, TRUE) // 垂直对齐方式
117 ATTR_GRIDGRAVITY(L"layout_gravity", layoutGravityX = layoutGravityY, TRUE) // 对齐方式(水平和垂直相同)
118 ATTR_FLOAT(L"columnWeight", fColWeight, TRUE) // 列权重
119 ATTR_FLOAT(L"rowWeight", fRowWeight, TRUE) // 行权重
120 SOUI_ATTRS_BREAK()
121
122 protected:
123 /**
124 * @brief 处理大小属性
125 * @param strValue 属性值字符串
126 * @param bLoading 是否正在加载
127 * @return 处理结果
128 */
129 HRESULT OnAttrSize(const SStringW &strValue, BOOL bLoading);
130
131 /**
132 * @brief 处理宽度属性
133 * @param strValue 属性值字符串
134 * @param bLoading 是否正在加载
135 * @return 处理结果
136 */
137 HRESULT OnAttrWidth(const SStringW &strValue, BOOL bLoading);
138
139 /**
140 * @brief 处理高度属性
141 * @param strValue 属性值字符串
142 * @param bLoading 是否正在加载
143 * @return 处理结果
144 */
145 HRESULT OnAttrHeight(const SStringW &strValue, BOOL bLoading);
146};
147
148/**
149 * @class SGridLayout
150 * @brief 网格布局类
151 */
152class SOUI_EXP SGridLayout : public TObjRefImpl<SObjectImpl<ILayout>> {
153 DEF_SOBJECT_EX(SObjectImpl<ILayout>, L"gridLayout", L"grid")
154
155 public:
156 /**
157 * @brief 构造函数
158 */
159 SGridLayout(void);
160
161 /**
162 * @brief 析构函数
163 */
164 ~SGridLayout(void);
165
166 /**
167 * @brief 检查布局参数是否可接受
168 * @param pLayoutParam 布局参数对象指针
169 * @return 如果可接受返回TRUE,否则返回FALSE
170 */
171 STDMETHOD_(BOOL, IsParamAcceptable)(THIS_ const ILayoutParam *pLayoutParam) SCONST OVERRIDE;
172
173 /**
174 * @brief 布局子窗口
175 * @param pParent 父窗口指针
176 */
177 STDMETHOD_(void, LayoutChildren)(THIS_ IWindow *pParent) OVERRIDE;
178
179 /**
180 * @brief 创建布局参数对象
181 * @return 布局参数对象指针
182 */
183 STDMETHOD_(ILayoutParam *, CreateLayoutParam)(THIS) SCONST OVERRIDE;
184
185 /**
186 * @brief 测量子窗口大小
187 * @param pParent 父窗口指针
188 * @param nWidth 宽度
189 * @param nHeight 高度
190 * @return 测量结果大小
191 */
192 STDMETHOD_(SIZE, MeasureChildren)
193 (THIS_ const IWindow *pParent, int nWidth, int nHeight) SCONST OVERRIDE;
194
195 SOUI_ATTRS_BEGIN()
196 ATTR_INT(L"columnCount", m_nCols, TRUE) // 列数
197 ATTR_INT(L"rowCount", m_nRows, TRUE) // 行数
198 ATTR_LAYOUTSIZE(L"xInterval", m_xInterval, TRUE) // 水平间距
199 ATTR_LAYOUTSIZE(L"yInterval", m_yInterval, TRUE) // 垂直间距
200 ATTR_LAYOUTSIZE(L"interval", m_xInterval = m_yInterval, TRUE) // 间距(水平和垂直相同)
201 ATTR_GRIDGRAVITY(L"xGravity", m_GravityX, TRUE) // 水平对齐方式
202 ATTR_GRIDGRAVITY(L"yGravity", m_GravityY, TRUE) // 垂直对齐方式
203 ATTR_GRIDGRAVITY(L"gravity", m_GravityX = m_GravityY, TRUE) // 对齐方式(水平和垂直相同)
204 SOUI_ATTRS_BREAK()
205
206 protected:
207 /**
208 * @brief 计算网格单元格数量
209 * @param pParent 父窗口指针
210 * @return 网格单元格数量
211 */
212 int CalcCells(const IWindow *pParent) const;
213
214 int m_nCols; /**< 列数 */
215 int m_nRows; /**< 行数 */
216 SLayoutSize m_xInterval; /**< 水平间距 */
217 SLayoutSize m_yInterval; /**< 垂直间距 */
218
219 GridGravity m_GravityX; /**< 水平对齐方式 */
220 GridGravity m_GravityY; /**< 垂直对齐方式 */
221};
222
223SNSEND
224
225#endif // __SGRIDLAYOUT__H__
BOOL IsParamAcceptable(const ILayoutParam *pLayoutParam) SCONST OVERRIDE
检查布局参数是否可接受
int CalcCells(const IWindow *pParent) const
计算网格单元格数量
ILayoutParam * CreateLayoutParam() SCONST OVERRIDE
创建布局参数对象
SLayoutSize m_yInterval
GridGravity m_GravityX
SIZE MeasureChildren(const IWindow *pParent, int nWidth, int nHeight) SCONST OVERRIDE
测量子窗口大小
GridGravity m_GravityY
SLayoutSize m_xInterval
SGridLayout(void)
构造函数
void LayoutChildren(IWindow *pParent) OVERRIDE
布局子窗口
BOOL IsMatchParent(ORIENTATION orientation) SCONST OVERRIDE
检查是否匹配父容器大小
ILayoutParam * Clone() SCONST OVERRIDE
克隆布局参数
BOOL IsWrapContent(ORIENTATION orientation) SCONST OVERRIDE
检查是否包裹内容大小
void SetSpecifiedSize(ORIENTATION orientation, const SLayoutSize &layoutSize) OVERRIDE
设置指定大小
void Clear() OVERRIDE
清除布局参数
HRESULT OnAttrHeight(const SStringW &strValue, BOOL bLoading)
处理高度属性
void SetWrapContent(ORIENTATION orientation) OVERRIDE
设置包裹内容大小
HRESULT OnAttrWidth(const SStringW &strValue, BOOL bLoading)
处理宽度属性
static GridGravity parseGridGravity(const SStringW &strValue)
解析网格对齐方式
void * GetRawData() OVERRIDE
获取原始数据指针
SLayoutSize GetSpecifiedSize(ORIENTATION orientation) SCONST OVERRIDE
获取指定大小
void SetMatchParent(ORIENTATION orientation) OVERRIDE
设置匹配父容器大小
BOOL IsSpecifiedSize(ORIENTATION orientation) SCONST OVERRIDE
检查是否指定大小
SGridLayoutParam()
构造函数
HRESULT OnAttrSize(const SStringW &strValue, BOOL bLoading)
处理大小属性
布局大小类
Definition SLayoutSize.h:10
A class representing an ASCII string.
Definition sstringw.h:96