Q3CanvasItem * UmlCanvas::collision(const QPoint & p) const { Q3CanvasItemList l = collisions(p); Q3CanvasItemList::ConstIterator it; Q3CanvasItemList::ConstIterator end = l.end(); ArrowCanvas * arrow = 0; for (it = l.begin(); it != end; ++it) if (((*it)->visible()) && // at least not deleted !isa_alien(*it) && !isa_col_msg_dirs(*it)) { switch ((*it)->rtti()) { case RTTI_ARROW: if (arrow == 0) arrow = (ArrowCanvas *) *it; break; case RTTI_LABEL: return (arrow == 0) ? *it : arrow; default: // isa DiagramCanvas return ((arrow == 0) || (small_element(((DiagramCanvas *) *it)->rect()) && ((DiagramCanvas *) *it)->attached_to(arrow))) ? *it : arrow; } } return arrow; }
QGraphicsItem * UmlCanvas::collision(const QPoint & p, int except) const { QList<QGraphicsItem*> l = items(p); QList<QGraphicsItem*>::ConstIterator it; QList<QGraphicsItem*>::ConstIterator end = l.end(); ArrowCanvas * arrow = 0; for (it = l.begin(); it != end; ++it) if (((*it)->isVisible()) && // at least not deleted !isa_alien(*it) && !isa_col_msg_dirs(*it) ) { int k = (*it)->type(); if (k != except) { switch (k) { case RTTI_ARROW: if (arrow == 0) arrow = (ArrowCanvas *) *it; break; case RTTI_LABEL: return (arrow == 0) ? *it : arrow; default: // isa DiagramCanvas return ((arrow == 0) || (small_element(((DiagramCanvas *) *it)->rect()) && ((DiagramCanvas *) *it)->attached_to(arrow))) ? *it : arrow; } } } return arrow; }