void BrowserClassInstance::compute_referenced_by(QList<BrowserNode *> & l, BrowserNode * target) { IdIterator<BrowserClassInstance> it(all); while(it.hasNext()){ it.next(); if(it.value()) { if (!it.value()->deletedp()) { ClassInstanceData * data = it.value()->def; bool add = (data->get_class() == target); if (!add && (target->get_type() == UmlAttribute)) { const QList<SlotAttr> & attrs = data->get_attributes(); QList<SlotAttr>::ConstIterator it_a; for (it_a = attrs.begin(); it_a != attrs.end(); ++it_a) { if ((*it_a).att == target) { add = TRUE; break; } } } if (!add) { const QList<SlotRel> & rels = data->get_relations(); QList<SlotRel>::ConstIterator it_r; for (it_r = rels.begin(); it_r != rels.end(); ++it_r) { const SlotRel & slot = *it_r; if ((slot.is_a) ? (slot.rel->get_start() == target) : (slot.rel->get_end() == target)) { add = TRUE; break; } if (slot.value == target) { add = TRUE; break; } } } if (add) l.append(it.value()); } } } }
void OdClassInstCanvas::draw_all_relations(OdClassInstCanvas * end) { QCanvasItemList all = canvas()->allItems(); QCanvasItemList::Iterator cit; ClassInstanceData * d = (ClassInstanceData *) browser_node->get_data(); const QValueList<SlotRel> & rels = d->get_relations(); QValueList<SlotRel>::ConstIterator it_rel; for (it_rel = rels.begin(); it_rel != rels.end(); it_rel++) { const SlotRel & slot_rel = *it_rel; if (!has_relation(slot_rel)) { BrowserClassInstance * end_inst = slot_rel.value; DiagramItem * di; if (end_inst == browser_node) di = this; else { di = 0; for (cit = all.begin(); cit != all.end(); ++cit) { DiagramItem * adi = QCanvasItemToDiagramItem(*cit); if ((adi != 0) && // an uml canvas item (adi->type() == UmlClassInstance) && (((OdClassInstCanvas *) adi)->browser_node == end_inst) && ((((OdClassInstCanvas *) adi) == end) || (*cit)->visible())) { // other class canvas find di = adi; break; } } } if (di != 0) { if (slot_rel.is_a) (new ObjectLinkCanvas(the_canvas(), this, di, slot_rel.rel->get_type(), 0, -1.0, -1.0, slot_rel.rel)) ->show(); else (new ObjectLinkCanvas(the_canvas(), di, this, slot_rel.rel->get_type(), 0, -1.0, -1.0, slot_rel.rel)) ->show(); } } } if ((end == 0) && !DrawingSettings::just_modified() && !on_load_diagram()) { for (cit = all.begin(); cit != all.end(); ++cit) { DiagramItem * di = QCanvasItemToDiagramItem(*cit); if ((di != 0) && // an uml canvas item (di->type() == UmlClassInstance) && (((OdClassInstCanvas *) di) != this) && !((OdClassInstCanvas *) di)->browser_node->deletedp() && ((OdClassInstCanvas *) di)->visible()) ((OdClassInstCanvas *) di)->draw_all_relations(this); } } }