void PortionDrawer::updateNodePositions(DiagramDrawer &drawer) { if(mGraph) { if(mGraph->getNodes().size() != mNodePositions.size()) { mNodePositions.resize(mGraph->getNodes().size()); } std::vector<size_t> depths = getCallDepths(); std::vector<int> columnPositions = getColumnPositions(drawer, depths); int yOffset = 0; const int margin = 20; int pad = static_cast<int>(drawer.getTextExtentHeight("W")); for(size_t i=0; i<mNodePositions.size(); i++) { GraphRect rect = getNodeRect(drawer, i); rect.start.y = yOffset; yOffset += pad + rect.size.y; rect.start.y += margin; rect.start.x = margin + columnPositions[depths[i]]; mNodePositions[i] = rect.start; } } #define PORTION_GENES 1 #if(PORTION_GENES) if(mNodePositions.size() > 0) { DiagramDependencyGenes genes; GraphRect rect = getNodeRect(drawer, 0); genes.initialize(*this, static_cast<size_t>(rect.size.y)); genes.updatePositionsInDrawer(); } #endif }
void PortionDrawer::drawConnections(DiagramDrawer &drawer) { size_t lastColorIndex = NO_INDEX; for(auto const &conn : mGraph->getConnections()) { GraphRect suppRect = getNodeRect(drawer, conn.mSupplierNodeIndex); GraphRect consRect = getNodeRect(drawer, conn.mConsumerNodeIndex); GraphPoint suppPoint; GraphPoint consPoint; drawer.getConnectionPoints(consRect, suppRect, consPoint, suppPoint); size_t colorIndex = conn.mSupplierNodeIndex; if(colorIndex != lastColorIndex) { if(lastColorIndex != NO_INDEX) { drawer.groupShapes(false, 0, 0); } Color lineColor = DistinctColors::getColor(colorIndex % DistinctColors::getNumColors()); drawer.groupShapes(true, lineColor, Color(245,245,255)); lastColorIndex = colorIndex; } drawArrowDependency(drawer, consPoint, suppPoint); } if(lastColorIndex != NO_INDEX) { drawer.groupShapes(false, 0, 0); } }
void PortionDrawer::drawNodes(DiagramDrawer &drawer) { drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); for(size_t i=0; i<mNodePositions.size(); i++) { if(mGraph->getNodes()[i].getNodeType() == PNT_Attribute) { drawer.drawRect(getNodeRect(drawer, i)); } else { drawer.drawEllipse(getNodeRect(drawer, i)); } } drawer.groupShapes(false, 0, 0); drawer.groupShapes(true, Color(0,0,255), Color(245,245,255)); for(size_t i=0; i<mNodePositions.size(); i++) { if(mGraph->getNodes()[i].getNodeType() == PNT_NonMemberVariable) { drawer.drawRect(getNodeRect(drawer, i)); } } drawer.groupShapes(false, 0, 0); }
bool TeachLayer::checkChildType(cocos2d::Node *pNode, cocos2d::Rect stencilRect) { if (!pNode) return false; if (0 >= pNode->getChildrenCount()) return false; for (auto child : pNode->getChildren()) { if (dynamic_cast<SpriteButton*>(child)) { auto spriteButton = dynamic_cast<SpriteButton*>(child); Rect btnRect = getNodeRect(spriteButton); if (stencilRect.intersectsRect(btnRect)) { removeFromParent(); // spriteButton->execCallBackEvent(); return true; } } } for (auto child : pNode->getChildren()) { if (checkChildType(child, stencilRect)) return true; } return false; }
bool RCCheckButton::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { bool bRet = false; CCRect checkBtnRect = getNodeRect(); if(checkBtnRect.containsPoint(convertToNodeSpace(pTouch->getLocation()))) { m_pText->setColor(m_selectedLabelColor); bRet = true; } return bRet; }
GraphSize PortionDrawer::getDrawingSize(DiagramDrawer &drawer) const { GraphRect graphRect; for(size_t i=0; i<mGraph->getNodes().size(); i++) { graphRect.unionRect(getNodeRect(drawer, i)); } // Add some margin. graphRect.size.x += 5; graphRect.size.y += 5; return graphRect.size; }
void RCCheckButton::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) { CCRect checkBtnRect = getNodeRect(); if(checkBtnRect.containsPoint(convertToNodeSpace(pTouch->getLocation()))) { m_pText->setColor(m_selectedLabelColor); } else { m_pText->setColor(m_normalLabelColor); } }
void RCCheckButton::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { CCRect checkBtnRect = getNodeRect(); if(checkBtnRect.containsPoint(convertToNodeSpace(pTouch->getLocation()))) { toggleSelected(); if(m_pListener && m_pfnSelector) { (m_pListener->*m_pfnSelector)(this); } } m_pText->setColor(m_normalLabelColor); }
void TeachLayer::stencilTouchCallBack(cocos2d::Ref* ref) { if (_touchCallback) { _touchCallback(this); removeFromParent(); } else { auto pSender = dynamic_cast<Node*>(ref); auto pLayer = pSender->getParent()->getParent(); auto stencilRect = getNodeRect(pSender); checkChildType(pLayer, stencilRect); } }
void PortionDrawer::getNodeText(DiagramDrawer &drawer, std::vector<DrawString> &drawStrings, std::vector<bool> &virtOpers) { float textHeight = drawer.getTextExtentHeight("W"); int pad = static_cast<int>(textHeight / 7.f * 2); int yTextOffset = static_cast<int>(textHeight) + pad; for(size_t i=0; i<mGraph->getNodes().size(); i++) { GraphRect rect = getNodeRect(drawer, i); rect.start.x += pad; rect.start.y += yTextOffset; PortionNode const &node = mGraph->getNodes()[i]; drawStrings.push_back(DrawString(rect.start, node.getDisplayName().getStr())); virtOpers.push_back(node.isVirtualOperation()); } }