soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SLinearLayout.h
1#ifndef __SLINEARLAYOUT__H__
2#define __SLINEARLAYOUT__H__
3
4#include <interface/slayout-i.h>
5#include <layout/SLinearLayoutParamStruct.h>
6#include <sobject/Sobject.hpp>
7
8SNSBEGIN
9
10/**
11 * @class SLinearLayoutParam
12 * @brief 线性布局参数类
13 */
15 : public TObjRefImpl<SObjectImpl<ILayoutParam>>
16 , protected SLinearLayoutParamStruct {
17 DEF_SOBJECT(SObjectImpl<ILayoutParam>, L"LinearLayoutParam")
18
19 friend class SLinearLayout;
20
21 public:
22 /**
23 * @brief 构造函数
24 */
26
27 /**
28 * @brief 清除布局参数
29 */
30 STDMETHOD_(void, Clear)(THIS) OVERRIDE;
31
32 /**
33 * @brief 检查是否匹配父容器大小
34 * @param orientation 方向(水平或垂直)
35 * @return 如果匹配父容器大小返回TRUE,否则返回FALSE
36 */
37 STDMETHOD_(BOOL, IsMatchParent)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
38
39 /**
40 * @brief 检查是否包裹内容大小
41 * @param orientation 方向(水平或垂直)
42 * @return 如果包裹内容大小返回TRUE,否则返回FALSE
43 */
44 STDMETHOD_(BOOL, IsWrapContent)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
45
46 /**
47 * @brief 检查是否指定大小
48 * @param orientation 方向(水平或垂直)
49 * @return 如果指定大小返回TRUE,否则返回FALSE
50 */
51 STDMETHOD_(BOOL, IsSpecifiedSize)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
52
53 /**
54 * @brief 获取指定大小
55 * @param orientation 方向(水平或垂直)
56 * @return 指定大小
57 */
58 STDMETHOD_(SLayoutSize, GetSpecifiedSize)(THIS_ ORIENTATION orientation) SCONST OVERRIDE;
59
60 /**
61 * @brief 设置匹配父容器大小
62 * @param orientation 方向(水平或垂直)
63 */
64 STDMETHOD_(void, SetMatchParent)(THIS_ ORIENTATION orientation) OVERRIDE;
65
66 /**
67 * @brief 设置包裹内容大小
68 * @param orientation 方向(水平或垂直)
69 */
70 STDMETHOD_(void, SetWrapContent)(THIS_ ORIENTATION orientation) OVERRIDE;
71
72 /**
73 * @brief 设置指定大小
74 * @param orientation 方向(水平或垂直)
75 * @param layoutSize 指定大小
76 */
77 STDMETHOD_(void, SetSpecifiedSize)
78 (THIS_ ORIENTATION orientation, const SLayoutSize &layoutSize) OVERRIDE;
79
80 /**
81 * @brief 获取原始数据指针
82 * @return 原始数据指针
83 */
84 STDMETHOD_(void *, GetRawData)(THIS) OVERRIDE;
85
86 /**
87 * @brief 克隆布局参数
88 * @return 克隆的布局参数对象指针
89 */
90 STDMETHOD_(ILayoutParam *, Clone)(THIS) SCONST OVERRIDE;
91
92 public:
93 SOUI_ATTRS_BEGIN()
94 ATTR_CUSTOM(L"width", OnAttrWidth) // 宽度
95 ATTR_CUSTOM(L"height", OnAttrHeight) // 高度
96 ATTR_CUSTOM(L"size", OnAttrSize) // 大小
97 ATTR_FLOAT(L"weight", weight, FALSE) // 权重
98 ATTR_ENUM_BEGIN(L"layout_gravity", Gravity, FALSE) // 对齐方式
99 ATTR_ENUM_VALUE(L"left", G_Left) // 左对齐
100 ATTR_ENUM_VALUE(L"top", G_Top) // 顶部对齐
101 ATTR_ENUM_VALUE(L"center", G_Center) // 居中对齐
102 ATTR_ENUM_VALUE(L"right", G_Right) // 右对齐
103 ATTR_ENUM_VALUE(L"bottom", G_Bottom) // 底部对齐
104 ATTR_ENUM_END(gravity)
105 ATTR_CUSTOM(L"extend", OnAttrExtend) // 扩展属性
106 ATTR_LAYOUTSIZE(L"extend_left", extend_left, FALSE) // 左侧扩展
107 ATTR_LAYOUTSIZE(L"extend_top", extend_top, FALSE) // 顶部扩展
108 ATTR_LAYOUTSIZE(L"extend_right", extend_right, FALSE) // 右侧扩展
109 ATTR_LAYOUTSIZE(L"extend_bottom", extend_bottom, FALSE) // 底部扩展
110 SOUI_ATTRS_BREAK()
111
112 protected:
113 /**
114 * @brief 处理大小属性
115 * @param strValue 属性值字符串
116 * @param bLoading 是否正在加载
117 * @return 处理结果
118 */
119 HRESULT OnAttrSize(const SStringW &strValue, BOOL bLoading);
120
121 /**
122 * @brief 处理宽度属性
123 * @param strValue 属性值字符串
124 * @param bLoading 是否正在加载
125 * @return 处理结果
126 */
127 HRESULT OnAttrWidth(const SStringW &strValue, BOOL bLoading);
128
129 /**
130 * @brief 处理高度属性
131 * @param strValue 属性值字符串
132 * @param bLoading 是否正在加载
133 * @return 处理结果
134 */
135 HRESULT OnAttrHeight(const SStringW &strValue, BOOL bLoading);
136
137 /**
138 * @brief 处理扩展属性
139 * @param strValue 属性值字符串
140 * @param bLoading 是否正在加载
141 * @return 处理结果
142 */
143 HRESULT OnAttrExtend(const SStringW &strValue, BOOL bLoading);
144};
145
146/**
147 * @class SLinearLayout
148 * @brief 线性布局类
149 */
150class SOUI_EXP SLinearLayout : public TObjRefImpl<SObjectImpl<ILayout>> {
151 DEF_SOBJECT(SObjectImpl<ILayout>, L"linearLayout")
152
153 public:
154 /**
155 * @brief 构造函数
156 */
157 SLinearLayout(void);
158
159 /**
160 * @brief 析构函数
161 */
162 ~SLinearLayout(void);
163
164 /**
165 * @brief 检查布局参数是否可接受
166 * @param pLayoutParam 布局参数对象指针
167 * @return 如果可接受返回TRUE,否则返回FALSE
168 */
169 STDMETHOD_(BOOL, IsParamAcceptable)(THIS_ const ILayoutParam *pLayoutParam) SCONST OVERRIDE;
170
171 /**
172 * @brief 布局子窗口
173 * @param pParent 父窗口指针
174 */
175 STDMETHOD_(void, LayoutChildren)(THIS_ IWindow *pParent) OVERRIDE;
176
177 /**
178 * @brief 创建布局参数对象
179 * @return 布局参数对象指针
180 */
181 STDMETHOD_(ILayoutParam *, CreateLayoutParam)(THIS) SCONST OVERRIDE;
182
183 /**
184 * @brief 测量子窗口大小
185 * @param pParent 父窗口指针
186 * @param nWidth 宽度
187 * @param nHeight 高度
188 * @return 测量结果大小
189 */
190 STDMETHOD_(SIZE, MeasureChildren)
191 (THIS_ const IWindow *pParent, int nWidth, int nHeight) SCONST OVERRIDE;
192
193 SOUI_ATTRS_BEGIN()
194 ATTR_ENUM_BEGIN(L"orientation", ORIENTATION, FALSE) // 方向
195 ATTR_ENUM_VALUE(L"horizontal", Horz) // 水平方向
196 ATTR_ENUM_VALUE(L"vertical", Vert) // 垂直方向
197 ATTR_ENUM_END(m_orientation)
198 ATTR_ENUM_BEGIN(L"gravity", Gravity, FALSE) // 对齐方式
199 ATTR_ENUM_VALUE(L"left", G_Left) // 左对齐
200 ATTR_ENUM_VALUE(L"top", G_Top) // 顶部对齐
201 ATTR_ENUM_VALUE(L"center", G_Center) // 居中对齐
202 ATTR_ENUM_VALUE(L"right", G_Right) // 右对齐
203 ATTR_ENUM_VALUE(L"bottom", G_Bottom) // 底部对齐
204 ATTR_ENUM_END(m_gravity)
205 ATTR_LAYOUTSIZE(L"interval", m_interval, FALSE) // 间距
206 SOUI_ATTRS_BREAK()
207
208 protected:
209 ORIENTATION m_orientation; // 方向
210 Gravity m_gravity; // 对齐方式
211 SLayoutSize m_interval; // 间距
212};
213
214/**
215 * @class SVBox
216 * @brief 垂直线性布局类
217 */
218class SVBox : public SLinearLayout {
219 DEF_SOBJECT(SLinearLayout, L"vbox")
220
221 public:
222 /**
223 * @brief 构造函数
224 */
226 {
227 m_orientation = Vert; // 设置方向为垂直
228 }
229};
230
231/**
232 * @class SHBox
233 * @brief 水平线性布局类
234 */
235class SHBox : public SLinearLayout {
236 DEF_SOBJECT(SLinearLayout, L"hbox")
237
238 public:
239 /**
240 * @brief 构造函数
241 */
243 {
244 m_orientation = Horz; // 设置方向为水平
245 }
246};
247
248SNSEND
249
250#endif // __SLINEARLAYOUT__H__
SHBox()
构造函数
布局大小类
Definition SLayoutSize.h:10
void LayoutChildren(IWindow *pParent) OVERRIDE
布局子窗口
BOOL IsParamAcceptable(const ILayoutParam *pLayoutParam) SCONST OVERRIDE
检查布局参数是否可接受
ILayoutParam * CreateLayoutParam() SCONST OVERRIDE
创建布局参数对象
SIZE MeasureChildren(const IWindow *pParent, int nWidth, int nHeight) SCONST OVERRIDE
测量子窗口大小
SLinearLayout(void)
构造函数
SLayoutSize GetSpecifiedSize(ORIENTATION orientation) SCONST OVERRIDE
获取指定大小
void SetMatchParent(ORIENTATION orientation) OVERRIDE
设置匹配父容器大小
void Clear() OVERRIDE
清除布局参数
HRESULT OnAttrSize(const SStringW &strValue, BOOL bLoading)
处理大小属性
HRESULT OnAttrWidth(const SStringW &strValue, BOOL bLoading)
处理宽度属性
BOOL IsSpecifiedSize(ORIENTATION orientation) SCONST OVERRIDE
检查是否指定大小
void * GetRawData() OVERRIDE
获取原始数据指针
void SetWrapContent(ORIENTATION orientation) OVERRIDE
设置包裹内容大小
BOOL IsWrapContent(ORIENTATION orientation) SCONST OVERRIDE
检查是否包裹内容大小
void SetSpecifiedSize(ORIENTATION orientation, const SLayoutSize &layoutSize) OVERRIDE
设置指定大小
HRESULT OnAttrExtend(const SStringW &strValue, BOOL bLoading)
处理扩展属性
HRESULT OnAttrHeight(const SStringW &strValue, BOOL bLoading)
处理高度属性
BOOL IsMatchParent(ORIENTATION orientation) SCONST OVERRIDE
检查是否匹配父容器大小
ILayoutParam * Clone() SCONST OVERRIDE
克隆布局参数
SLinearLayoutParam()
构造函数
A class representing an ASCII string.
Definition sstringw.h:96
SVBox()
构造函数