void RadioButtonGroup::handleButtonDeselected(ButtonSelectedEventDetails* const e) { if(getSelectedButton() == e->getSource()) { setSelectedButton(NULL); } }
//============================================================= //============================================================= void CC3DCircleListLayer::endUpdateToCenter() { CCButton* pSelButton = getSelectedButton(); if(!pSelButton) return; moveToCenter(pSelButton,true); }
bool RadioButtonGroup::isSelected(const RadioButton* const Button) const { if(Button == getSelectedButton()) { return true; } else { return false; } }
void RadioButtonGroup::handleButtonSelected(ButtonSelectedEventDetails* const e) { RadioButtonRefPtr TheButton = dynamic_cast<RadioButton*>(e->getSource()); RadioButtonRefPtr PreviousSelected(getSelectedButton()); if(PreviousSelected != TheButton) { setSelectedButton(TheButton); if(PreviousSelected != NULL) { PreviousSelected->setSelected(false); } } }
void RadioButtonGroup::addButton(RadioButton* const Button) { pushToGroupButtons(Button); if(Button->getSelected()) { RadioButtonRefPtr SelectedButton(getSelectedButton()); if(SelectedButton == NULL) { setSelectedButton(SelectedButton); } else { Button->setSelected(false); } } }
void RadioButtonGroup::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { Inherited::changed(whichField, origin, details); if(whichField & GroupButtonsFieldMask) { for(UInt32 i(0) ; i<_ButtonConnections.size() ; ++i) { _ButtonConnections[i].disconnect(); } _ButtonConnections.clear(); for(UInt32 i(0) ; i<getMFGroupButtons()->size() ; ++i) { _ButtonConnections.push_back(getGroupButtons(i)->connectButtonSelected(boost::bind(&RadioButtonGroup::handleButtonSelected, this, _1))); _ButtonConnections.push_back(getGroupButtons(i)->connectButtonDeselected(boost::bind(&RadioButtonGroup::handleButtonDeselected, this, _1))); } } if(whichField & SelectedButtonFieldMask) { RadioButtonRefPtr SelectedButton(getSelectedButton()); RadioButtonRefPtr tmpButton; for(UInt32 i(0) ; i<getMFGroupButtons()->size() ; ++i) { tmpButton = getGroupButtons(i); if(tmpButton == SelectedButton) tmpButton->setSelected(true); else tmpButton->setSelected(false); } } }
//============================================================= //============================================================= void CC3DCircleListLayer::refreshItemWithMoveDegree(float fMoveDegree) { float fMoveX = getContentSize().width*0.5; float fMoveY = getContentSize().height*0.5; float fScaleMax = 1; float fScaleMin = 0.5; int zOrderMax = 1000; // float fCameraDegreeMax = 45; // float fCameraDegreeMin = 0; for(int i=0;i<m_pButtonArray->count();i++) { CCButton* pButton = (CCButton*)m_pButtonArray->objectAtIndex(i); CCString* pFOldDegree = (CCString*)pButton->getUserData(); float fOldDegree = pFOldDegree->floatValue(); fOldDegree = fabsf(fOldDegree); float fCurDegree = fOldDegree + fMoveDegree; if(fCurDegree < 0) { fCurDegree = 2*M_PI - fabsf(fCurDegree); } int nCircleCount = (int)fCurDegree/(2*M_PI); fCurDegree = fCurDegree - nCircleCount*(2*M_PI); //============================================================= //============================================================= delete pFOldDegree; CCString* pString = new CCString(); pString->initWithFormat("%f",fabs(fCurDegree)); pButton->setUserData(pString); //============================================================= //============================================================= // // // //============================================================= //============================================================= float fCircleX = m_fEllipseA * cosf(fCurDegree); float fCircleY = m_fEllipseB * sinf(fCurDegree); fCircleX += fMoveX; fCircleY += fMoveY; CCPoint buttonPos = ccp(fCircleX,fCircleY); pButton->setPosition(buttonPos); //============================================================= //============================================================= // // // //============================================================= //============================================================= float fScaleDegree = fCurDegree - M_PI_2; float fScalePercent = (1-cosf(fScaleDegree))/2.0; float fScale = fScaleMin + (fScaleMax - fScaleMin)*fScalePercent; pButton->setScale(fScale); int nOrder = zOrderMax * fScalePercent + 1; pButton->setZOrder(nOrder); //============================================================= //============================================================= m_pSelectedButton = getSelectedButton(); if(m_pSelectedButton) { if(m_pDelegate) { int nIndex = m_pSelectedButton->getTag(); m_pDelegate->onCC3DCircleListLayerSelectIndex(nIndex); } } // //============================================================= // //camera // //============================================================= // int flagMove = 1; // if(buttonPos.x > getContentSize().width*0.5) // { // flagMove = 1; // } // else // { // flagMove = -1; // } // float fCameraDegree = fCameraDegreeMin + (fCameraDegreeMax - fCameraDegreeMin)*(1-fScalePercent); // fCameraDegree *= -flagMove; // float radians = (float)CC_DEGREES_TO_RADIANS(fCameraDegree); // float fSin = sinf(radians) * CCCamera::getZEye(); // CCCamera* pCamera = pButton->getCamera(); // pCamera->setCenterXYZ(fSin, 0, 0); // //============================================================= // //============================================================= } }