MCPcopy Create free account
hub / github.com/SOUI2/soui / UpdateVisibleItems

Method UpdateVisibleItems

SOUI/src/control/STileView.cpp:270–390  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

268}
269
270void STileView::UpdateVisibleItems()
271{
272 if(!m_adapter)
273 {
274 return;
275 }
276 int iOldFirstVisible = m_iFirstVisible;
277 int iOldLastVisible = m_iFirstVisible + (int)m_lstItems.GetCount();
278
279 int iNewFirstVisible = m_tvItemLocator->Position2Item(m_siVer.nPos);
280 int iNewLastVisible = iNewFirstVisible;
281
282 int pos = m_tvItemLocator->Item2Position(iNewFirstVisible);
283 int iHoverItem = m_pHoverItem?(int)m_pHoverItem->GetItemIndex():-1;
284
285 ItemInfo *pItemInfos = new ItemInfo[m_lstItems.GetCount()];
286 SPOSITION spos = m_lstItems.GetHeadPosition();
287 int i = 0;
288 while(spos)
289 {
290 pItemInfos[i++] = m_lstItems.GetNext(spos);
291 }
292
293 m_lstItems.RemoveAll();
294
295 if(iNewFirstVisible != -1)
296 {
297 while(pos < m_siVer.nPos + (int)m_siVer.nPage && iNewLastVisible < m_adapter->getCount())
298 {
299 DWORD dwState = WndState_Normal;
300 if(iHoverItem == iNewLastVisible) dwState |= WndState_Hover;
301 if(m_iSelItem == iNewLastVisible) dwState |= WndState_Check;
302
303 ItemInfo ii = {NULL, -1};
304 ii.nType = m_adapter->getItemViewType(iNewLastVisible,dwState);
305 if(iNewLastVisible >= iOldFirstVisible && iNewLastVisible < iOldLastVisible)
306 {
307 //use the old visible item
308 int iItem = iNewLastVisible - iOldFirstVisible;
309 SASSERT(iItem >= 0 && iItem <= (iOldLastVisible - iOldFirstVisible));
310 if(ii.nType == pItemInfos[iItem].nType)
311 {
312 ii = pItemInfos[iItem];
313 pItemInfos[iItem].pItem = NULL;//标记该行已经被重用
314 }
315 }
316 if(!ii.pItem)
317 {
318 //create new visible item
319 SList<SItemPanel *> *lstRecycle = m_itemRecycle.GetAt(ii.nType);
320 if(lstRecycle->IsEmpty())
321 {
322 //创建一个新的列表项
323 ii.pItem = SItemPanel::Create(this, pugi::xml_node(), this);
324 ii.pItem->GetEventSet()->subscribeEvent(EventItemPanelClick::EventID,Subscriber(&STileView::OnItemClick,this));
325 }
326 else
327 {

Callers

nothing calls this directly

Calls 15

SubscriberFunction · 0.85
GetHeadPositionMethod · 0.80
RemoveHeadMethod · 0.80
MoveToXYMethod · 0.80
ModifyItemStateMethod · 0.80
DoColorizeMethod · 0.80
AddTailMethod · 0.80
IsLastInRowMethod · 0.80
GetMarginSizeMethod · 0.80
GetStateMethod · 0.80
ClearFocusMethod · 0.80
CreateFunction · 0.50

Tested by

no test coverage detected