void CACollectionView::loadCollectionCell() { CCRect rect = this->getBounds(); rect.origin = getContentOffset(); rect.origin.y -= rect.size.height * 0.1f; rect.size.height *= 1.2f; std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_pUsedCollectionCells.begin(); itr != m_pUsedCollectionCells.end(); itr++) { CC_CONTINUE_IF(itr->second != NULL); CAIndexPath3E r = itr->first; CCRect cellRect = m_rUsedCollectionCellRects[r]; CC_CONTINUE_IF(!rect.intersectsRect(cellRect)); CACollectionViewCell* cell = m_pCollectionViewDataSource->collectionCellAtIndex(this, cellRect.size, r.section, r.row, r.item); if (cell) { cell->m_nSection = r.section; cell->m_nRow = r.row; cell->m_nItem = r.item; cell->updateDisplayedAlpha(this->getAlpha()); this->addSubview(cell); cell->setFrame(cellRect); itr->second = cell; if (m_pSelectedCollectionCells.count(r)) { cell->setControlStateSelected(); } } } }
void AutoCollectionViewHorizontalTest::collectionViewDidSelectCellAtIndexPath(CAAutoCollectionView *collectionView, unsigned int section, unsigned int item) { CACollectionViewCell* cell = collectionView->cellForRowAtIndexPath(section, item); cell->getContentView()->setRotation(-360); cell->getContentView()->setScale(0.5f); CAViewAnimation::beginAnimations("", NULL); cell->getContentView()->setRotation(0); cell->getContentView()->setScale(1.0f); CAViewAnimation::commitAnimations(); }
CACollectionViewCell* CACollectionViewCell::create(const std::string& reuseIdentifier) { CACollectionViewCell* cell = new CACollectionViewCell(); if (cell && cell->initWithReuseIdentifier(reuseIdentifier)) { cell->autorelease(); return cell; } CC_SAFE_DELETE(cell); return NULL; }
CACollectionViewCell* CACollectionView::dequeueReusableCellWithIdentifier(const char* reuseIdentifier) { CACollectionViewCell* cell = NULL; if (reuseIdentifier && !m_mpFreedCollectionCells[reuseIdentifier].empty()) { cell = m_mpFreedCollectionCells[reuseIdentifier].back(); cell->retain()->autorelease(); m_mpFreedCollectionCells[reuseIdentifier].popBack(); } return cell; }
bool CAAutoCollectionView::ccTouchBegan(CATouch *pTouch, CAEvent *pEvent) { if (!m_vTouches.empty()) { m_vTouches.replace(0, pTouch); return true; } bool isInertia = m_tInertia.getLength() < 1.0f; if (!CAScrollView::ccTouchBegan(pTouch, pEvent)) return false; if (m_bAllowsSelection && this->isScrollWindowNotOutSide() == false && isInertia) { DPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_mpUsedCollectionCells.begin(); itr != m_mpUsedCollectionCells.end(); ++itr) { CACollectionViewCell* pCell = itr->second; CC_CONTINUE_IF(pCell == NULL); if (pCell->getFrame().containsPoint(point) && pCell->isVisible()) { CC_BREAK_IF(pCell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells != pCell) { if (m_pHighlightedCollectionCells) { m_pHighlightedCollectionCells->setControlStateNormal(); } m_pHighlightedCollectionCells = pCell; } CC_BREAK_IF(pCell->getControlState() == CAControlStateSelected); CAViewAnimation::beginAnimations(m_s__StrID, NULL); CAViewAnimation::setAnimationDuration(0.05f); CAViewAnimation::setAnimationDidStopSelector(pCell, CAViewAnimation0_selector(CACollectionViewCell::setControlStateHighlighted)); CAViewAnimation::commitAnimations(); break; } } } return true; }
bool CACollectionView::ccTouchBegan(CATouch *pTouch, CAEvent *pEvent) { if (m_pTouches->count() > 0) { m_pTouches->replaceObjectAtIndex(0, pTouch); return true; } bool isInertia = m_tInertia.getLength() < 1.0f; if (!CAScrollView::ccTouchBegan(pTouch, pEvent)) return false; if (m_bAllowsSelection && this->isScrollWindowNotOutSide() == false && isInertia) { CCPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_pUsedCollectionCells.begin(); itr != m_pUsedCollectionCells.end(); ++itr) { CACollectionViewCell* pCell = itr->second; CC_CONTINUE_IF(pCell == NULL); if (pCell->getFrame().containsPoint(point) && pCell->isVisible()) { CC_BREAK_IF(pCell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells) { m_pHighlightedCollectionCells->setControlStateNormal(); } m_pHighlightedCollectionCells = pCell; CC_BREAK_IF(pCell->getControlState() == CAControlStateSelected); CCDelayTime* delayTime = CCDelayTime::create(0.05f); CCCallFunc* func = CCCallFunc::create(pCell, callfunc_selector(CACollectionViewCell::setControlStateHighlighted)); CCSequence* actions = CCSequence::create(delayTime, func, NULL); m_pContainer->runAction(actions); break; } } } return true; }
void CAAutoCollectionView::clearData() { m_mpUsedCollectionCells.clear(); m_rUsedCollectionCellRects.clear(); m_pSelectedCollectionCells.clear(); m_rCollectionViewSection.clear(); for (int i = 0; i < m_vpUsedCollectionCells.size(); i++) { CACollectionViewCell* cell = m_vpUsedCollectionCells.at(i); CC_CONTINUE_IF(cell == NULL); m_mpFreedCollectionCells[cell->getReuseIdentifier()].pushBack(cell); cell->removeFromSuperview(); cell->resetCollectionViewCell(); } m_vpUsedCollectionCells.clear(); m_pHighlightedCollectionCells = NULL; }
CACollectionViewCell* ThirdViewController::collectionCellAtIndex(CACollectionView *collectionView, const CCSize& cellSize, unsigned int section, unsigned int row, unsigned int item) { CACollectionViewCell* pCell = new CACollectionViewCell(); char cIdentifier[1024] = { 0 }; sprintf(cIdentifier, "{%d, %d, %d}" ,section, row, item); pCell->initWithReuseIdentifier(cIdentifier); CALabel* label = CALabel::createWithCenter(CCRectMake(cellSize.width / 2, cellSize.height - 30, cellSize.width, cellSize.height)); label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter); label->setTextAlignment(CATextAlignmentCenter); label->setFontSize(28); label->setText(pCell->getReuseIdentifier()); pCell->addSubview(label); CAImageView* pCellImage = CAImageView::createWithCenter(CCRectMake(cellSize.width / 2, cellSize.height / 2 - 20, cellSize.width*0.7f, cellSize.height*0.7f)); pCell->addSubview(pCellImage); pCellImage->setImageAsyncWithFile("1.jpg"); return pCell; }
void CACollectionView::mouseMoved(CATouch* pTouch, CAEvent* pEvent) { if (m_bAllowsSelection) { DPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_mpUsedCollectionCells.begin(); itr != m_mpUsedCollectionCells.end(); ++itr) { CACollectionViewCell* cell = itr->second; CC_CONTINUE_IF(cell == NULL); if (cell->getFrame().containsPoint(point) && cell->isVisible()) { CC_BREAK_IF(cell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells) { CAIndexPath3E index = CAIndexPath3E(m_pHighlightedCollectionCells->getSection(), m_pHighlightedCollectionCells->getRow(), m_pHighlightedCollectionCells->getItem()); if (m_pSelectedCollectionCells.count(index)) { m_pHighlightedCollectionCells->setControlStateHighlighted(); } else { m_pHighlightedCollectionCells->setControlStateNormal(); } } m_pHighlightedCollectionCells = cell; cell->setControlStateHighlighted(); break; } } } }
void CACollectionView::recoveryCollectionCell() { CCRect rect = this->getBounds(); rect.origin = getContentOffset(); rect.origin.y -= rect.size.height * 0.1f; rect.size.height *= 1.2f; std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_pUsedCollectionCells.begin(); itr != m_pUsedCollectionCells.end(); itr++) { CACollectionViewCell* cell = itr->second; CC_CONTINUE_IF(cell == NULL); CCRect cellRect = cell->getFrame(); CC_CONTINUE_IF(rect.intersectsRect(cellRect)); m_pFreedCollectionCells[cell->getReuseIdentifier()].pushBack(cell); cell->removeFromSuperview(); cell->resetCollectionViewCell(); itr->second = NULL; } }
void CACollectionView::reloadData() { CC_RETURN_IF(m_pCollectionViewDataSource == NULL); this->reloadViewSizeData(); this->removeAllSubviews(); DRect winRect = this->getBounds(); winRect.origin = getContentOffset(); float width = winRect.size.width; int y = 0; if (m_nCollectionHeaderHeight > 0 && m_pCollectionHeaderView) { m_pCollectionHeaderView->setDisplayRange(true); m_pCollectionHeaderView->setFrame(DRect(0, y, width, m_nCollectionHeaderHeight)); addSubview(m_pCollectionHeaderView); y += m_nCollectionHeaderHeight; } ; int begin = (int)m_rSectionRects.size(); m_rSectionRects.resize(m_rSectionRects.size() + m_nSections); for (int i = 0; i < m_nSections; i++) { unsigned int iSectionHeaderHeight = m_nSectionHeaderHeights.at(i); DRect sectionHeaderRect = DRect(0, y, width, iSectionHeaderHeight); if (iSectionHeaderHeight>0) { CAView* pSectionHeaderView = m_pCollectionViewDataSource->collectionViewSectionViewForHeaderInSection(this, sectionHeaderRect.size, i); if (pSectionHeaderView != NULL) { pSectionHeaderView->setDisplayRange(true); pSectionHeaderView->setFrame(sectionHeaderRect); insertSubview(pSectionHeaderView, 1); m_pSectionHeaderViews[i] = pSectionHeaderView; y += iSectionHeaderHeight; } } y += m_nVertInterval; unsigned int rowCount = m_nRowsInSections.at(i); for (int j = 0; j < rowCount; j++) { int iHeight = m_nRowHeightss.at(i).at(j); unsigned int itemCount = m_pCollectionViewDataSource->numberOfItemsInRowsInSection(this, i, j); unsigned int cellWidth = 0; if (itemCount>0) { cellWidth = (width - m_nHoriInterval) / itemCount - m_nHoriInterval; } for (int k = 0; k < itemCount; k++) { CAIndexPath3E indexPath = CAIndexPath3E(i, j, k); DRect cellRect = DRect(m_nHoriInterval + (cellWidth + m_nHoriInterval)*k, y, cellWidth, iHeight); m_rUsedCollectionCellRects[indexPath] = cellRect; std::pair<std::map<CAIndexPath3E, CACollectionViewCell*>::iterator, bool> itrResult = m_mpUsedCollectionCells.insert(std::make_pair(indexPath, (CACollectionViewCell*)NULL)); CC_CONTINUE_IF(!winRect.intersectsRect(cellRect)); CACollectionViewCell* cell = m_pCollectionViewDataSource->collectionCellAtIndex(this, cellRect.size, i, j, k); if (cell) { addSubview(cell); cell->setFrame(cellRect); cell->m_nSection = i; cell->m_nRow = j; cell->m_nItem = k; itrResult.first->second = cell; m_vpUsedCollectionCells.pushBack(cell); if (m_pCollectionViewDataSource) { m_pCollectionViewDataSource->collectionViewWillDisplayCellAtIndex(this, cell, i, j, k); } } } y += (iHeight + m_nVertInterval); } unsigned int iSectionFooterHeight = m_nSectionFooterHeights.at(i); DRect sectionFooterRect = DRect(0, y, width, iSectionFooterHeight); if (iSectionFooterHeight > 0) { CAView* pSectionFooterView = m_pCollectionViewDataSource->collectionViewSectionViewForFooterInSection(this, sectionFooterRect.size, i); if (pSectionFooterView != NULL) { pSectionFooterView->setDisplayRange(true); pSectionFooterView->setFrame(sectionFooterRect); insertSubview(pSectionFooterView, 1); m_pSectionFooterViews[i] = pSectionFooterView; y += iSectionFooterHeight; } } DRect sectionRect = sectionHeaderRect; sectionRect.size.height = sectionFooterRect.origin.y + sectionFooterRect.size.height - sectionHeaderRect.origin.y; m_rSectionRects[begin + i] = sectionRect; } if (m_nCollectionFooterHeight > 0 && m_pCollectionFooterView) { m_pCollectionFooterView->setFrame(DRect(0, y, width, m_nCollectionFooterHeight)); addSubview(m_pCollectionFooterView); y += m_nCollectionFooterHeight; } this->updateSectionHeaderAndFooterRects(); this->layoutPullToRefreshView(); this->startDeaccelerateScroll(); }