1#ifndef __SADAPTERBASE__H__
2#define __SADAPTERBASE__H__
4#include "interface/SAdapter-i.h"
73 pObserver->onChanged();
86 pObserver->onInvalidated();
100 pObserver->OnItemChanged(iItem);
113template <
class BaseClass>
147 m_obzMgr.registerObserver(observer);
156 m_obzMgr.unregisterObserver(observer);
165 STDMETHOD_(
void,
getView)(
int position, IWindow *pItem,
IXmlNode *pXmlTemplate) OVERRIDE
167 SItemPanel *pItemPanel = sobj_cast<SItemPanel>(pItem);
169 getView(position, pItemPanel, xmlTemplate);
245 STDMETHOD_(
void,
getItemDesc)(
int position, IStringW *pDesc) OVERRIDE
248 pDesc->Copy(&strDesc);
280 pItem->GetDesiredSize(ret, wid, hei);
291 STDMETHOD_(
void,
getViewDesiredSize)(SIZE *ret,
int position, IWindow *pItem,
int wid,
int hei) OVERRIDE
293 SItemPanel *pItemPanel = sobj_cast<SItemPanel>(pItem);
305 return E_NOINTERFACE;
360 STDMETHOD_(BOOL,
OnSort)(
int iCol, UINT *pFmts,
int nCols) OVERRIDE
386 pName->Copy(&strName);
452 pObserver->Release();
494 pObserver->onBranchChanged(hBranch);
510 pObserver->onBranchInvalidated(hBranch, bInvalidParents, bInvalidChildren);
526 pObserver->onBranchExpandedChanged(hBranch, bExpandedOld, bExpandedNew);
540 pObserver->notifyItemBeforeRemove(hItem);
553template <
class BaseClass>
573 m_obzMgr.notifyInvalidated(hBranch, bInvalidParents, bInvalidChildren);
584 m_obzMgr.notifyExpandChanged(hBranch, bExpandedOld, bExpandedNew);
593 m_obzMgr.notifyItemBeforeRemove(hItem);
602 m_obzMgr.registerObserver(observer);
611 m_obzMgr.unregisterObserver(observer);
694 if (hItem == ITEM_ROOT)
708 if (hItem == ITEM_ROOT)
724 if (hItem == ITEM_ROOT)
726 HSTREEITEM hParent =
m_tree.GetParentItem((HSTREEITEM)hItem);
729 return (HSTREEITEM)hParent;
749 SASSERT(hItem != ITEM_NULL);
750 return (HSTREEITEM)
m_tree.GetChildItem((HSTREEITEM)hItem, TRUE);
760 SASSERT(hItem != ITEM_NULL);
761 return (HSTREEITEM)
m_tree.GetChildItem((HSTREEITEM)hItem, FALSE);
771 SASSERT(hItem != ITEM_NULL && hItem != ITEM_ROOT);
772 return (HSTREEITEM)
m_tree.GetPrevSiblingItem((HSTREEITEM)hItem);
782 SASSERT(hItem != ITEM_NULL && hItem != ITEM_ROOT);
783 return (HSTREEITEM)
m_tree.GetNextSiblingItem((HSTREEITEM)hItem);
792 STDMETHOD_(BOOL,
IsDecendentItem)(CTHIS_ HSTREEITEM hItem, HSTREEITEM hChild)
const OVERRIDE
797 if (hParent == hItem)
829 STDMETHOD_(
void,
getView)(THIS_ HSTREEITEM hItem, SItemPanel *pItem,
SXmlNode xmlTemplate)
839 STDMETHOD_(
void,
getView)(THIS_ HSTREEITEM hItem, IWindow *pItem,
IXmlNode *pXmlTemplate) OVERRIDE
841 SItemPanel *pItemPanel = sobj_cast<SItemPanel>(pItem);
843 return getView(hItem, pItemPanel, xmlTemplate);
854 STDMETHOD_(
void,
getViewDesiredSize)(SIZE *ret, HSTREEITEM hItem, SItemPanel *pItem,
int wid,
int hei)
856 pItem->GetDesiredSize(ret, wid, hei);
867 STDMETHOD_(
void,
getViewDesiredSize)(SIZE *ret, HSTREEITEM hItem, IWindow *pItem,
int wid,
int hei) OVERRIDE
869 SItemPanel *pItemPanel = sobj_cast<SItemPanel>(pItem);
906 STDMETHOD_(
void,
ExpandItem)(HSTREEITEM hItem, UINT uCode) OVERRIDE
909 BOOL bExpandedNew = bExpandedOld;
913 bExpandedNew = FALSE;
919 bExpandedNew = !bExpandedOld;
922 if (bExpandedOld == bExpandedNew)
936 if (hItem == ITEM_ROOT)
959 while (hParent != ITEM_NULL)
984 if (hItem == ITEM_NULL)
989 if (hChild == ITEM_NULL)
1005 if (hRet == ITEM_NULL)
1008 if (hRet == ITEM_ROOT)
1025 if (hChild != ITEM_NULL)
1029 HSTREEITEM hParent = hItem;
1030 while (hParent != ITEM_NULL && hParent != ITEM_ROOT)
1048 return E_NOINTERFACE;
1063 return m_tree.InsertItem(ii, hParent, hInsertAfter);
1080 m_tree.DeleteItem(hItem);
1094 return m_tree.DeleteItemEx(hItem);
Tree template for general data types.
Template class for a tree structure.
void notifyDataSetChanged()
通知所有观察者数据集已更改
int getItemViewType(int position)
获取项视图类型
void getView(int position, IWindow *pItem, IXmlNode *pXmlTemplate) OVERRIDE
获取视图
SLvObserverMgr m_obzMgr
观察者管理器
HRESULT QueryInterface(REFGUID id, IObjRef **ppObj) OVERRIDE
查询接口
void InitByTemplate(SXmlNode xmlTemplate)
通过模板初始化适配器
void unregisterDataSetObserver(ILvDataSetObserver *observer) OVERRIDE
注销一个数据集观察者
BOOL isEmpty() OVERRIDE
检查数据集是否为空
SStringW getItemDesc(int position)
获取项描述
void registerDataSetObserver(ILvDataSetObserver *observer) OVERRIDE
注册一个数据集观察者
void notifyItemDataChanged(int iItem)
通知所有观察者指定项的数据已更改
void getViewDesiredSize(SIZE *ret, int position, SItemPanel *pItem, int wid, int hei)
获取视图所需大小
int getViewTypeCount() OVERRIDE
获取视图类型数量
void notifyDataSetInvalidated()
通知所有观察者数据集已失效
int getCount() PURE
获取数据集项数量
void notifyInvalidated()
通知所有观察者数据集已失效
void notifyChanged()
通知所有观察者数据集已更改
void unregisterObserver(ILvDataSetObserver *observer)
注销一个观察者
SList< ILvDataSetObserver * > m_lstObserver
观察者列表
void registerObserver(ILvDataSetObserver *observer)
注册一个观察者
~SLvObserverMgr()
析构函数,释放所有观察者
void notifyItemChanged(int iItem)
通知所有观察者指定项的数据已更改
void InitByTemplate(SXmlNode xmlTemplate)
通过模板初始化适配器
void SetColumnsWidth(int *pColWid, int nCols) OVERRIDE
设置列宽
BOOL OnSort(int iCol, UINT *pFmts, int nCols) OVERRIDE
排序项
SStringW GetColumnName(int iCol) SCONST
获取列名
BOOL IsColumnVisible(int iCol) SCONST OVERRIDE
检查列是否可见
A class representing an ASCII string.
FunTvItemDataFreer m_dataFreer
数据释放函数
void OnDataFree(ItemInfo &data) override
释放数据
HSTREEITEM GetParentItem(HSTREEITEM hItem) const OVERRIDE
获取父项
void SetDataFreer(FunTvItemDataFreer freer)
设置数据释放函数
TreeDataFreer m_treeFreer
树数据释放器
HSTREEITEM GetFirstVisibleItem() const OVERRIDE
获取第一个可见项
void getViewDesiredSize(SIZE *ret, HSTREEITEM hItem, SItemPanel *pItem, int wid, int hei)
获取视图所需大小
HSTREEITEM InsertItem(const T &data, HSTREEITEM hParent=STVI_ROOT, HSTREEITEM hInsertAfter=STVI_LAST)
插入项
void(* FunTvItemDataFreer)(T cb)
数据释放函数类型
BOOL IsDecendentItem(HSTREEITEM hItem, HSTREEITEM hChild) const OVERRIDE
检查是否为后代项
void getView(HSTREEITEM hItem, SItemPanel *pItem, SXmlNode xmlTemplate)
获取视图
CSTree< ItemInfo > m_tree
树对象
BOOL IsItemExpanded(HSTREEITEM hItem) const OVERRIDE
检查项是否展开
void ExpandItem(HSTREEITEM hItem, UINT uCode) OVERRIDE
展开或折叠项
BOOL IsItemVisible(HSTREEITEM hItem) const OVERRIDE
检查项是否可见
HSTREEITEM GetNextSiblingItem(HSTREEITEM hItem) const OVERRIDE
获取下一个兄弟项
HSTREEITEM GetFirstChildItem(HSTREEITEM hItem) const OVERRIDE
获取第一个子项
HSTREEITEM GetNextVisibleItem(HSTREEITEM hItem) const OVERRIDE
获取下一个可见项
ULONG_PTR m_rootUserData[DATA_INDEX_NUMBER]
根节点用户数据
BOOL HasChildren(HSTREEITEM hItem) const OVERRIDE
检查是否有子项
void DeleteItem(HSTREEITEM hItem, BOOL bNotifyChange=TRUE)
删除项
void SetItemData(HSTREEITEM hItem, const T &data)
设置项数据
const T & GetItemData(HSTREEITEM hItem) const
获取项数据
HSTREEITEM GetPrevVisibleItem(HSTREEITEM hItem) const OVERRIDE
获取前一个可见项
HSTREEITEM GetPrevSiblingItem(HSTREEITEM hItem) const OVERRIDE
获取前一个兄弟项
HRESULT QueryInterface(REFGUID id, IObjRef **ppObj) OVERRIDE
查询接口
ULONG_PTR GetItemDataByIndex(HSTREEITEM hItem, DATA_INDEX idx) const OVERRIDE
获取hItem中的指定索引的数据
void InitByTemplate(SXmlNode xmlTemplate)
通过模板初始化适配器
BOOL isViewWidthMatchParent() const OVERRIDE
检查视图宽度是否匹配父容器
HSTREEITEM GetLastVisibleItem() const OVERRIDE
获取最后一个可见项
int getViewTypeCount() const OVERRIDE
获取视图类型数量
HSTREEITEM GetLastChildItem(HSTREEITEM hItem) const OVERRIDE
获取最后一个子项
void SetItemExpanded(HSTREEITEM hItem, BOOL bExpanded) OVERRIDE
设置项展开状态
int getViewType(HSTREEITEM hItem) const OVERRIDE
获取项视图类型
BOOL DeleteItemEx(HSTREEITEM hItem)
删除项(扩展)
void SetItemDataByIndex(HSTREEITEM hItem, DATA_INDEX idx, ULONG_PTR data) OVERRIDE
保存hItem指定索引的数据
void notifyChanged(HSTREEITEM hBranch)
通知所有观察者分支已更改
void notifyExpandChanged(HSTREEITEM hBranch, BOOL bExpandedOld, BOOL bExpandedNew)
通知所有观察者分支展开状态已更改
void registerObserver(ITvDataSetObserver *observer)
注册一个观察者
SList< ITvDataSetObserver * > m_lstObserver
观察者列表
void unregisterObserver(ITvDataSetObserver *observer)
注销一个观察者
void notifyInvalidated(HSTREEITEM hBranch, bool bInvalidParents, bool bInvalidChildren)
通知所有观察者分支已失效
void notifyItemBeforeRemove(HSTREEITEM hItem)
通知所有观察者项将被移除
~STvObserverMgr()
析构函数,释放所有观察者
Class representing an XML node.
void registerDataSetObserver(ITvDataSetObserver *observer) OVERRIDE
注册一个数据集观察者
void notifyBranchInvalidated(HSTREEITEM hBranch, bool bInvalidParents=true, bool bInvalidChildren=true)
通知所有观察者分支已失效
void notifyBranchChanged(HSTREEITEM hBranch)
通知所有观察者分支已更改
void notifyItemBeforeRemove(HSTREEITEM hItem)
通知所有观察者项将被移除
STvObserverMgr m_obzMgr
观察者管理器
void unregisterDataSetObserver(ITvDataSetObserver *observer) OVERRIDE
注销一个数据集观察者
void notifyBranchExpandChanged(HSTREEITEM hBranch, BOOL bExpandedOld, BOOL bExpandedNew)
通知所有观察者分支展开状态已更改
Interface for reference counting.
ULONG_PTR userData[DATA_INDEX_NUMBER]
用户数据数组