2#include "helper/SListViewItemLocator.h"
5#pragma warning(disable : 4985)
85double logbase(
double a,
double base)
87 return log(a) / log(base);
90#define SEGMENT_SIZE 50
135 int iSeg = idx / SEGMENT_SIZE;
136 int nRemain = position - offset;
140 for (
int i = 0; i < psi->
nItems; i++)
143 if (nRemain <= nItemHei)
156 int iSeg = iItem / SEGMENT_SIZE;
157 int iSubItem = iItem % SEGMENT_SIZE;
161 for (
int i = 0; i < iSubItem; i++)
184 int iSeg = iItem / SEGMENT_SIZE;
185 int iSubItem = iItem % SEGMENT_SIZE;
193 if (nOldHei != nHeight)
195 int nHeiDif = nHeight - nOldHei;
196 HSTREEITEM hBranch = psi->
hItem;
210 int iSeg = iItem / SEGMENT_SIZE;
211 int iSubItem = iItem % SEGMENT_SIZE;
237 int nBranchSize = SEGMENT_SIZE;
239 for (
int i = 0; i < nTreeDeep; i++)
240 nBranchSize *= INDEX_WIDTH;
252 if (nItems > SEGMENT_SIZE)
254 int nRemain = nItems;
255 int nSubBranchSize = nBranchSize / INDEX_WIDTH;
258 int nItems2 = nSubBranchSize;
259 if (nItems2 > nRemain)
261 InitIndex(hBranch, nItems2, nSubBranchSize);
282 return (
int)ceil(logbase((
m_adapter->getCount() + SEGMENT_SIZE - 1) / SEGMENT_SIZE, INDEX_WIDTH));
288 for (
int i = 0; i < (int)
m_segments.GetCount(); i++)
void SetScale(int nScale) OVERRIDE
设置缩放比例
int Position2Item(int position) OVERRIDE
将位置转换为项索引
int Item2Position(int iItem) OVERRIDE
将项索引转换为位置
SListViewItemLocatorFix(SLayoutSize nItemHei, SLayoutSize nDividerSize=SLayoutSize())
构造函数
int GetTotalHeight() OVERRIDE
获取总高度
SAutoRefPtr< ILvAdapter > m_adapter
列表适配器对象指针
int GetDividerSize() SCONST OVERRIDE
获取分隔符大小
void SetAdapter(ILvAdapter *pAdapter) OVERRIDE
设置适配器
int GetScrollLineSize() SCONST OVERRIDE
获取滚动行大小
int GetItemHeight(int iItem) SCONST OVERRIDE
获取指定项的高度
BOOL IsFixHeight() SCONST OVERRIDE
检查是否为固定高度
SLayoutSize m_nDividerSize
分隔符的高度
void SetItemHeight(int iItem, int nHeight) OVERRIDE
设置指定项的高度
int GetFixItemHeight() const
获取固定项的高度
SLayoutSize m_nItemHeight
每个项的高度
int * pItemHeight
段中每一个项的高度
int GetDividerSize() SCONST OVERRIDE
获取分隔符大小
SAutoRefPtr< ILvAdapter > m_adapter
列表适配器对象指针
~SListViewItemLocatorFlex()
析构函数
void SetAdapter(ILvAdapter *pAdapter) OVERRIDE
设置适配器
SListViewItemLocatorFlex(SLayoutSize nItemHei, SLayoutSize nDividerSize=SLayoutSize())
构造函数
void InitIndex(HSTREEITEM hParent, int nItems, int nSubBranchSize)
初始化索引
int Position2Item(int position) OVERRIDE
将位置转换为项索引
int GetIndexDeep() const
获取索引深度
BOOL IsFixHeight() SCONST OVERRIDE
检查是否为固定高度
SLayoutSize m_nItemHeight
每个项的高度
int Item2Position(int iItem) OVERRIDE
将项索引转换为位置
int GetTotalHeight() OVERRIDE
获取总高度
int Branch2Offset(HSTREEITEM hBranch) const
将分支转换为偏移量
void OnDataSetChanged() OVERRIDE
数据集发生变化时调用
int GetFixItemHeight() const
获取固定项的高度
HSTREEITEM Offset2Branch(HSTREEITEM hParent, int nOffset)
将偏移量转换为分支
SArray< SegmentInfo * > m_segments
段信息数组
void SetItemHeight(int iItem, int nHeight) OVERRIDE
设置指定项的高度
SLayoutSize m_nDividerSize
分隔符的高度
void SetScale(int nScale) OVERRIDE
设置缩放比例
int GetScrollLineSize() SCONST OVERRIDE
获取滚动行大小
int Branch2Index(HSTREEITEM hBranch) const
将分支转换为索引
CSTree< BranchInfo > m_itemPosIndex
记录分支高度
int GetItemHeight(int iItem) SCONST OVERRIDE
获取指定项的高度
int nBranchSize
分支中包含的节点数量