soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SAdapter-i.h
1#ifndef __SADAPTER_I__H__
2#define __SADAPTER_I__H__
3
4#include <interface/obj-ref-i.h>
5#include <interface/SWindow-i.h>
6#include <interface/sstring-i.h>
7
8SNSBEGIN
9
10#undef INTERFACE
11#define INTERFACE ILvDataSetObserver
12DECLARE_INTERFACE_(ILvDataSetObserver, IObjRef)
13{
14 /**
15 * @brief 添加引用
16 * @return long -- 引用计数
17 */
18 STDMETHOD_(long, AddRef)(THIS) PURE;
19
20 /**
21 * @brief 释放引用
22 * @return long -- 引用计数
23 */
24 STDMETHOD_(long, Release)(THIS) PURE;
25
26 /**
27 * @brief 释放对象
28 * @return void
29 */
30 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
31
32 /**
33 * @brief 当整个数据集发生变化时调用
34 * @return void
35 */
36 STDMETHOD_(void, onChanged)(THIS) PURE;
37
38 /**
39 * @brief 当整个数据集变得无效时调用
40 * @return void
41 */
42 STDMETHOD_(void, onInvalidated)(THIS) PURE;
43
44 /**
45 * @brief 通知列表项数据变化
46 * @param iItem int -- 列表索引
47 * @return void
48 */
49 STDMETHOD_(void, OnItemChanged)(THIS_ int iItem) PURE;
50};
51
52#undef INTERFACE
53#define INTERFACE ILvAdapter
54DECLARE_INTERFACE_(ILvAdapter, IObjRef)
55{
56 /**
57 * @brief 添加引用
58 * @return long -- 引用计数
59 */
60 STDMETHOD_(long, AddRef)(THIS) PURE;
61
62 /**
63 * @brief 释放引用
64 * @return long -- 引用计数
65 */
66 STDMETHOD_(long, Release)(THIS) PURE;
67
68 /**
69 * @brief 释放对象
70 * @return void
71 */
72 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
73
74 /**
75 * @brief 注册一个观察者,当数据发生变化时调用
76 * @param observer ILvDataSetObserver* -- 观察者对象
77 * @return void
78 */
79 STDMETHOD_(void, registerDataSetObserver)(THIS_ ILvDataSetObserver * observer) PURE;
80
81 /**
82 * @brief 取消注册一个观察者
83 * @param observer ILvDataSetObserver* -- 观察者对象
84 * @return void
85 */
86 STDMETHOD_(void, unregisterDataSetObserver)(THIS_ ILvDataSetObserver * observer) PURE;
87
88 /**
89 * @brief 获取数据集中项目的数量
90 * @return int -- 项目数量
91 */
92 STDMETHOD_(int, getCount)(THIS) PURE;
93
94 /**
95 * @brief 获取显示指定位置数据的视图
96 * @param position int -- 数据集中的位置
97 * @param pItem IWindow* -- 旧视图,如果可能,重用它
98 * @param xmlTemplate IXmlNode* -- 提供的XML模板
99 * @return void
100 */
101 STDMETHOD_(void, getView)(THIS_ int position, IWindow *pItem, IXmlNode *xmlTemplate) PURE;
102
103 /**
104 * @brief 获取将由getView创建的视图类型
105 * @param position int -- 数据集中的位置
106 * @param dwState DWORD -- 视图状态
107 * @return int -- 视图类型
108 */
109 STDMETHOD_(int, getItemViewType)(THIS_ int position, DWORD dwState) PURE;
110
111 /**
112 * @brief 返回将由getView创建的视图类型数量
113 * @return int -- 视图类型数量
114 */
115 STDMETHOD_(int, getViewTypeCount)(THIS) PURE;
116
117 /**
118 * @brief 计算列表项显示大小
119 * @param ret SIZE* -- 列表项大小
120 * @param position int -- 列表项索引
121 * @param pItem IWindow* -- 列表项窗口
122 * @param wid int -- 父窗口宽度
123 * @param hei int -- 父窗口高度
124 * @return void
125 */
126 STDMETHOD_(void, getViewDesiredSize)(THIS_ SIZE * ret, int position, IWindow *pItem, int wid, int hei) PURE;
127
128 /**
129 * @brief 判断数据是否为空
130 * @return BOOL -- TRUE: 为空,FALSE: 不为空
131 */
132 STDMETHOD_(BOOL, isEmpty)(THIS) PURE;
133
134 /**
135 * @brief 获取列表项描述
136 * @param positoin int -- 列表项索引
137 * @param pDesc IStringW* -- 字符串描述返回值
138 * @return void
139 */
140 STDMETHOD_(void, getItemDesc)(THIS_ int positoin, IStringW *pDesc) PURE;
141
142 /**
143 * @brief 从指定的模板XML数据初始化适配器
144 * @param xmlTemplate IXmlNode* -- XML模板
145 * @return void
146 */
147 STDMETHOD_(void, InitByTemplate)(THIS_ IXmlNode * xmlTemplate) PURE;
148
149 /**
150 * @brief 从适配器查询用户定义的接口
151 * @param id REFGUID -- 接口ID
152 * @param ppObj IObjRef** -- 返回的接口
153 * @return HRESULT -- S_OK: 成功
154 */
155 STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFGUID id, IObjRef * *ppObj) PURE;
156};
157
158#undef INTERFACE
159#define INTERFACE IMcAdapter
160DECLARE_INTERFACE_(IMcAdapter, ILvAdapter)
161{
162 /**
163 * @brief 添加引用
164 * @return long -- 引用计数
165 */
166 STDMETHOD_(long, AddRef)(THIS) PURE;
167
168 /**
169 * @brief 释放引用
170 * @return long -- 引用计数
171 */
172 STDMETHOD_(long, Release)(THIS) PURE;
173
174 /**
175 * @brief 释放对象
176 * @return void
177 */
178 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
179
180 /**
181 * @brief 注册一个观察者,当数据发生变化时调用
182 * @param observer ILvDataSetObserver* -- 观察者对象
183 * @return void
184 */
185 STDMETHOD_(void, registerDataSetObserver)(THIS_ ILvDataSetObserver * observer) PURE;
186
187 /**
188 * @brief 取消注册一个观察者
189 * @param observer ILvDataSetObserver* -- 观察者对象
190 * @return void
191 */
192 STDMETHOD_(void, unregisterDataSetObserver)(THIS_ ILvDataSetObserver * observer) PURE;
193
194 /**
195 * @brief 获取数据集中项目的数量
196 * @return int -- 项目数量
197 */
198 STDMETHOD_(int, getCount)(THIS) PURE;
199
200 /**
201 * @brief 获取显示指定位置数据的视图
202 * @param position int -- 数据集中的位置
203 * @param pItem IWindow* -- 旧视图,如果可能,重用它
204 * @param xmlTemplate IXmlNode* -- 提供的XML模板
205 * @return void
206 */
207 STDMETHOD_(void, getView)(THIS_ int position, IWindow *pItem, IXmlNode *xmlTemplate) PURE;
208
209 /**
210 * @brief 获取将由getView创建的视图类型
211 * @param position int -- 数据集中的位置
212 * @param dwState DWORD -- 视图状态
213 * @return int -- 视图类型
214 */
215 STDMETHOD_(int, getItemViewType)(THIS_ int position, DWORD dwState) PURE;
216
217 /**
218 * @brief 返回将由getView创建的视图类型数量
219 * @return int -- 视图类型数量
220 */
221 STDMETHOD_(int, getViewTypeCount)(THIS) PURE;
222
223 /**
224 * @brief 计算列表项显示大小
225 * @param ret SIZE* -- 列表项大小
226 * @param position int -- 列表项索引
227 * @param pItem IWindow* -- 列表项窗口
228 * @param wid int -- 父窗口宽度
229 * @param hei int -- 父窗口高度
230 * @return void
231 */
232 STDMETHOD_(void, getViewDesiredSize)(THIS_ SIZE * ret, int position, IWindow *pItem, int wid, int hei) PURE;
233
234 /**
235 * @brief 判断数据是否为空
236 * @return BOOL -- TRUE: 为空,FALSE: 不为空
237 */
238 STDMETHOD_(BOOL, isEmpty)(THIS) PURE;
239
240 /**
241 * @brief 获取列表项描述
242 * @param positoin int -- 列表项索引
243 * @param pDesc IStringW* -- 字符串描述返回值
244 * @return void
245 */
246 STDMETHOD_(void, getItemDesc)(THIS_ int positoin, IStringW *pDesc) PURE;
247
248 /**
249 * @brief 从指定的模板XML数据初始化适配器
250 * @param xmlTemplate IXmlNode* -- XML模板
251 * @return void
252 */
253 STDMETHOD_(void, InitByTemplate)(THIS_ IXmlNode * xmlTemplate) PURE;
254
255 /**
256 * @brief 从适配器查询用户定义的接口
257 * @param id REFGUID -- 接口ID
258 * @param ppObj IObjRef** -- 返回的接口
259 * @return HRESULT -- S_OK: 成功
260 */
261 STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFGUID id, IObjRef * *ppObj) PURE;
262
263 /**
264 * @brief 获取一个列在模板中对应的窗口名称
265 * @param iCol int -- 列索引
266 * @param pName IStringW* -- 列名
267 * @return void
268 */
269 STDMETHOD_(void, GetColumnName)(CTHIS_ int iCol, IStringW *pName) SCONST PURE;
270
271 /**
272 * @brief 由Adapter决定一列是否需要显示
273 * @param iCol int -- 列序号
274 * @return BOOL -- TRUE: 显示,FALSE: 隐藏
275 * @remark 默认显示
276 */
277 STDMETHOD_(BOOL, IsColumnVisible)(CTHIS_ int iCol) SCONST PURE;
278
279 /**
280 * @brief 排序接口
281 * @param iCol int -- 排序列
282 * @param pFmts UINT* -- 当前列排序标志
283 * @param nCols int -- 总列数,pFmts数组长度
284 * @return BOOL -- TRUE: 执行排序,FALSE: 没有执行排序
285 */
286 STDMETHOD_(BOOL, OnSort)(THIS_ int iCol, UINT *pFmts, int nCols) PURE;
287
288 /**
289 * @brief 设置列宽接口
290 * @param pColWid int* -- 列宽数据
291 * @param nCols int -- 总列数
292 * @return void
293 */
294 STDMETHOD_(void, SetColumnsWidth)(THIS_ int *pColWid, int nCols) PURE;
295};
296
297#undef INTERFACE
298#define INTERFACE ITvDataSetObserver
299DECLARE_INTERFACE_(ITvDataSetObserver, IObjRef)
300{
301 /**
302 * @brief 添加引用
303 * @return long -- 引用计数
304 */
305 STDMETHOD_(long, AddRef)(THIS) PURE;
306
307 /**
308 * @brief 释放引用
309 * @return long -- 引用计数
310 */
311 STDMETHOD_(long, Release)(THIS) PURE;
312
313 /**
314 * @brief 释放对象
315 * @return void
316 */
317 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
318
319 /**
320 * @brief 当整个数据集发生变化时调用
321 * @param hBranch HSTREEITEM -- 目标分支
322 * @return void
323 */
324 STDMETHOD_(void, onBranchChanged)(THIS_ HSTREEITEM hBranch) PURE;
325
326 /**
327 * @brief 当指定树项数据变得无效时调用
328 * @param hBranch HSTREEITEM -- 目标分支
329 * @param bInvalidParents BOOL -- 目标的父项变得无效
330 * @param bInvalidChildren BOOL -- 目标的子项变得无效
331 * @return void
332 */
333 STDMETHOD_(void, onBranchInvalidated)
334 (THIS_ HSTREEITEM hBranch, BOOL bInvalidParents, BOOL bInvalidChildren) PURE;
335
336 /**
337 * @brief 当指定树项展开状态改变时调用
338 * @param hBranch HSTREEITEM -- 目标分支
339 * @param bExpandedOld BOOL -- 旧的展开状态
340 * @param bExpandedNew BOOL -- 新的展开状态
341 * @return void
342 */
343 STDMETHOD_(void, onBranchExpandedChanged)
344 (THIS_ HSTREEITEM hBranch, BOOL bExpandedOld, BOOL bExpandedNew) PURE;
345
346 /**
347 * @brief 当指定树项即将被移除时调用
348 * @param hItem HSTREEITEM -- 目标项
349 * @return void
350 */
351 STDMETHOD_(void, notifyItemBeforeRemove)
352 (THIS_ HSTREEITEM hItem) PURE;
353};
354
355#define ITEM_NULL 0
356#define ITEM_ROOT STVI_ROOT
357#define ITEM_LAST STVI_LAST
358#define ITEM_FIRST STVI_FIRST
359
360typedef enum DATA_INDEX
361{
362 DATA_INDEX_ITEM_HEIGHT = 0, // 行高
363 DATA_INDEX_ITEM_WIDTH, // 行宽度
364 DATA_INDEX_BRANCH_HEIGHT, // 分枝高度
365 DATA_INDEX_BRANCH_WIDTH, // 分枝宽度,不包含缩进
366 DATA_INDEX_ITEM_EXPANDED, // 子项展开状态
367 DATA_INDEX_ITEM_OFFSET, // 当前节点在父节点中的Y方向偏移
368 DATA_INDEX_ITEM_USER, // 自定义数据
369 DATA_INDEX_NUMBER
370} DATA_INDEX;
371
372enum
373{
374 TVC_COLLAPSE = 0x0001,
375 TVC_EXPAND = 0x0002,
376 TVC_TOGGLE = 0x0003,
377};
378
379#undef INTERFACE
380#define INTERFACE ITvAdapter
381DECLARE_INTERFACE_(ITvAdapter, IObjRef)
382{
383 /**
384 * @brief 添加引用
385 * @return long -- 引用计数
386 */
387 STDMETHOD_(long, AddRef)(THIS) PURE;
388
389 /**
390 * @brief 释放引用
391 * @return long -- 引用计数
392 */
393 STDMETHOD_(long, Release)(THIS) PURE;
394
395 /**
396 * @brief 释放对象
397 * @return void
398 */
399 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
400
401 /**
402 * @brief 注册一个观察者,当数据发生变化时调用
403 * @param observer ITvDataSetObserver* -- 观察者对象
404 * @return void
405 */
406 STDMETHOD_(void, registerDataSetObserver)(THIS_ ITvDataSetObserver * observer) PURE;
407
408 /**
409 * @brief 取消注册一个观察者
410 * @param observer ITvDataSetObserver* -- 观察者对象
411 * @return void
412 */
413 STDMETHOD_(void, unregisterDataSetObserver)(THIS_ ITvDataSetObserver * observer) PURE;
414
415 /**
416 * @brief 获取hItem中的指定索引的数据
417 * @param hItem HSTREEITEM -- 表项索引
418 * @param idx DATA_INDEX -- 数据类型
419 * @return ULONG_PTR -- 数据
420 */
421 STDMETHOD_(ULONG_PTR, GetItemDataByIndex)(CTHIS_ HSTREEITEM hItem, DATA_INDEX idx) SCONST PURE;
422
423 /**
424 * @brief 保存hItem指定索引的数据
425 * @param hItem HSTREEITEM -- 表项索引
426 * @param idx DATA_INDEX -- 数据类型
427 * @param data ULONG_PTR -- 数据
428 * @return void
429 */
430 STDMETHOD_(void, SetItemDataByIndex)
431 (THIS_ HSTREEITEM hItem, DATA_INDEX idx, ULONG_PTR data) PURE;
432
433 /**
434 * @brief 获取父级表项
435 * @param hItem HSTREEITEM -- 表项索引
436 * @return HSTREEITEM -- 父级表项
437 */
438 STDMETHOD_(HSTREEITEM, GetParentItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
439
440 /**
441 * @brief 获取第一个子项
442 * @param hItem HSTREEITEM -- 表项索引
443 * @return HSTREEITEM -- 第一个子项
444 */
445 STDMETHOD_(HSTREEITEM, GetFirstChildItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
446
447 /**
448 * @brief 获取最后一个子项
449 * @param hItem HSTREEITEM -- 表项索引
450 * @return HSTREEITEM -- 最后一个子项
451 */
452 STDMETHOD_(HSTREEITEM, GetLastChildItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
453
454 /**
455 * @brief 获取前一个兄弟项
456 * @param hItem HSTREEITEM -- 表项索引
457 * @return HSTREEITEM -- 前一个兄弟项
458 */
459 STDMETHOD_(HSTREEITEM, GetPrevSiblingItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
460
461 /**
462 * @brief 获取后一个兄弟项
463 * @param hItem HSTREEITEM -- 表项索引
464 * @return HSTREEITEM -- 后一个兄弟项
465 */
466 STDMETHOD_(HSTREEITEM, GetNextSiblingItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
467
468 /**
469 * @brief 是否包含子项
470 * @param hItem HSTREEITEM -- 表项索引
471 * @return BOOL -- TRUE: 有子项,FALSE: 无子项
472 */
473 STDMETHOD_(BOOL, HasChildren)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
474
475 /**
476 * @brief 表项是否当前可见
477 * @param hItem HSTREEITEM -- 表项索引
478 * @return BOOL -- TRUE: 可见,FALSE: 不可见,被折叠
479 */
480 STDMETHOD_(BOOL, IsItemVisible)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
481
482 /**
483 * @brief 获取第一个可见项
484 * @return HSTREEITEM -- 第一个可见项
485 */
486 STDMETHOD_(HSTREEITEM, GetFirstVisibleItem)(CTHIS) SCONST PURE;
487
488 /**
489 * @brief 获取最后一个可见项
490 * @return HSTREEITEM--最后一个可见项
491 */
492 STDMETHOD_(HSTREEITEM, GetLastVisibleItem)(CTHIS) SCONST PURE;
493
494 /**
495 * @brief 测试一个节点是否为另一个节点的子孙节点
496 * @param HSTREEITEM--hItem 父节点
497 * @param HSTREEITEM--hChild 被测试的子节点
498 * @return TRUE--是子孙节点
499 */
500 STDMETHOD_(BOOL, IsDecendentItem)(CTHIS_ HSTREEITEM hItem, HSTREEITEM hChild) SCONST PURE;
501
502 /**
503 * @brief 获取前一个可见项
504 * @return HSTREEITEM--前一个可见项
505 */
506 STDMETHOD_(HSTREEITEM, GetPrevVisibleItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
507
508 /**
509 * @brief 获取后一个可见项
510 * @return HSTREEITEM--后一个可见项
511 */
512 STDMETHOD_(HSTREEITEM, GetNextVisibleItem)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
513
514 /**
515 * @brief 展开/折叠子项
516 * @param hItem HSTREEITEM--目标项
517 * @param code int TVC_COLLAPSE,TVC_EXPAND,TVC_TOGGLE
518 * @return
519 */
520 STDMETHOD_(void, ExpandItem)(THIS_ HSTREEITEM hItem, UINT code) PURE;
521
522 /**
523 * @brief 判断表项是否展开
524 * @param hItem HSTREEITEM--目标项
525 * @return TRUE--展开,FALSE--折叠
526 */
527 STDMETHOD_(BOOL, IsItemExpanded)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
528
529 /**
530 * @brief 设置表项展开标志
531 * @param hItem HSTREEITEM--目标项
532 * @param bExpanded TRUE--展开,FALSE--折叠
533 * @return
534 */
535 STDMETHOD_(void, SetItemExpanded)(THIS_ HSTREEITEM hItem, BOOL bExpanded) PURE;
536
537 /**
538 * Get a View that displays the data at the specified position in the data set. You can either
539 * create a View manually or inflate it from an XML layout file. When the View is inflated, the
540 * parent View (GridView, ListView...) will apply default layout parameters unless you use
541 * {@link android.view.LayoutInflater#inflate(int, android.view.ViewGroup, boolean)}
542 * to specify a root view and to prevent attachment to the root.
543 *
544 * @param position The position of the item within the adapter's data set of the item whose view
545 * we want.
546 * @param pItem The old view to reuse, if possible. Note: You should check that this view
547 * is non-null and of an appropriate type before using. If it is not possible to convert
548 * this view to display the correct data, this method can create a new view.
549 * Heterogeneous lists can specify their number of view types, so that this View is
550 * always of the right type (see {@link #getViewTypeCount()} and
551 * {@link #getItemViewType(int,DWORD)}).
552 * @param xmlTemplate the xml template provided by its owner
553 */
554 STDMETHOD_(void, getView)
555 (THIS_ HSTREEITEM hItem, IWindow * pItem, IXmlNode * pXmlTemplate) PURE;
556
557 /**
558 * @brief 获取表项对应的模板ID
559 * @param hItem HSTREEITEM--目标项
560 * @return int--模板ID
561 */
562 STDMETHOD_(int, getViewType)(CTHIS_ HSTREEITEM hItem) SCONST PURE;
563
564 /**
565 * @brief 获取表项模板数量
566 * @return int--模板数量
567 */
568 STDMETHOD_(int, getViewTypeCount)(CTHIS) SCONST PURE;
569
570 /**
571 * @brief 获取表项大小
572 * @param SIZE *ret -- 窗口大小
573 * @param hItem HSTREEITEM--目标项
574 * @param pItem IWindow *--窗口指针
575 * @param wid int--父窗口宽度
576 * @param hei int--你窗口高度
577 * @return void
578 */
579 STDMETHOD_(void, getViewDesiredSize)
580 (THIS_ SIZE * ret, HSTREEITEM hItem, IWindow * pItem, int wid, int hei) PURE;
581
582 /**
583 * @brief 定义行宽度和treeview客户区宽度相同
584 * @return TRUE--表项宽度占满父窗口,FALSE--表项宽度和父窗口无关
585 */
586 STDMETHOD_(BOOL, isViewWidthMatchParent)(CTHIS) SCONST PURE;
587
588 /**
589 * @brief init adapter from the specified template xml data
590 * @param pXmlTemplate IXmlNode *--XML模板
591 * @return void
592 */
593 STDMETHOD_(void, InitByTemplate)(THIS_ IXmlNode * pXmlTemplate) PURE;
594
595 /**
596 * @brief query user defined interface from adapter
597 * @param REFGUID id-- __uuidof(interface)
598 * @param [out] IObjRef ** ppObj -- the return interface
599 * @return HRESULT S_OK--SUCCEED
600 */
601 STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFGUID id, IObjRef * *ppObj) PURE;
602};
603
604SNSEND
605#endif // __SADAPTER_I__H__
Interface for reference counting.
Definition obj-ref-i.h:19
Interface for XML nodes.
Definition sxml-i.h:128