예제 #1
0
파일: TableView.cpp 프로젝트: 110440/Tui-x
void CTableView::reloadData()
{
#if USING_LUA
	CCAssert(
		(m_nDataSourceAdapterScriptHandler != 0) ||
		(m_pDataSourceAdapterListener && m_pDataSourceAdapterHandler), "reloadData");
#else
	CCAssert(m_pDataSourceAdapterListener && m_pDataSourceAdapterHandler, "reloadData");
#endif
	CCAssert((int)m_tCellsSize.width != 0 && (int)m_tCellsSize.height != 0, "reloadData");
    CCAssert(m_eDirection != eScrollViewDirectionBoth, "reloadData");

	vector<CTableViewCell*>::iterator itr = m_vCellsUsed.begin();
	vector<CTableViewCell*>::iterator end = m_vCellsUsed.end();

	for(; itr != end; ++itr )
	{
		CTableViewCell* pCell = (*itr);
		m_vCellsFreed.pushBack(pCell);
		m_pContainer->removeChild(pCell, true);
		pCell->reset();
	}

	m_vCellsUsed.clear();

	m_sIndices.clear();
	m_vPositions.clear();
	this->updatePositions();
	this->setContentOffsetToTop();
    this->onScrolling();

	relocateContainer();
}
예제 #2
0
파일: TableView.cpp 프로젝트: 110440/Tui-x
void CTableView::onScrolling()
{
	if( m_uCellsCount == 0 )
		return;

    unsigned uBeginIdx = 0, uEndIdx = 0;

	uBeginIdx = cellBeginIndexFromOffset( getContentOffset() );
	uEndIdx = cellEndIndexFromOffset( getContentOffset() );
	
#if 0
	CCLOG("cell begin %u  end %u", uBeginIdx, uEndIdx);
#endif

	while( !m_vCellsUsed.empty() )
    {
        CTableViewCell* pCell = m_vCellsUsed.front();
		unsigned int uIdx = pCell->getIdx();

        if( uIdx < uBeginIdx )
        {
			m_sIndices.erase(uIdx);
			m_vCellsUsed.erase(m_vCellsUsed.begin());
            m_vCellsFreed.pushBack(pCell);
            pCell->reset();
            m_pContainer->removeChild(pCell, true);
        }
        else
        {
            break;
        }
    }

	while( !m_vCellsUsed.empty() )
    {
        CTableViewCell* pCell = m_vCellsUsed.back();
		unsigned int uIdx = pCell->getIdx();

        if( uIdx > uEndIdx && uIdx < m_uCellsCount )
        {
			m_sIndices.erase(uIdx);
			m_vCellsUsed.popBack();
            m_vCellsFreed.pushBack(pCell);
            pCell->reset();
            m_pContainer->removeChild(pCell, true);
        }
        else
        {
            break;
        }
    }
    
    for( unsigned int idx = uBeginIdx; idx <= uEndIdx && idx < m_uCellsCount; ++idx )
    {
		if( m_sIndices.find(idx) != m_sIndices.end() )
		{
			continue;
		}
		updateCellAtIndex(idx);
    }
}