Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}