void ColMsgTable::save_list(ColMsgList & l, Q3PtrDict<ColMsgList> & saved) { if (saved.find(&l) == 0) { saved.insert(&l, new ColMsgList(l)); Q3PtrListIterator<ColMsg> it(l); for (; it.current(); ++it) { ColMsg * m = it.current(); save_list(m->get_msgs(), saved); save_list(m->in->get_msgs(), saved); } } }
void ArtifactCanvas::update_relations() { // 'this' is a non source, check its associations const Q3PtrDict<BrowserArtifact> * associated = ((ArtifactData *) browser_node->get_data())->get_associated(); Q3PtrDict<BrowserArtifact> associations; Q3PtrListIterator<ArrowCanvas> it(lines); while (it.current()) { if ((it.current()->type() == UmlContain) && (((AssocContainCanvas *) it.current())->get_start() == this)) { DiagramItem * adi = ((AssocContainCanvas *) it.current())->get_end(); if ((adi->type() == UmlArtifact) && (associated != 0) && (associated->find((BrowserArtifact *) ((ArtifactCanvas *) adi)->browser_node) != 0)) { // association must exist BrowserArtifact * c = (BrowserArtifact *) ((ArtifactCanvas *) adi)->browser_node; associations.insert(c, c); ++it; } else // association must not exist it.current()->delete_it(); } else ++it; } if (associated != 0) { Q3PtrDictIterator<BrowserArtifact> it(*associated); while (it.current()) { if (associations.find(it.current()) == 0) { // the association to 'it.current()' is not yet drawn // search 'it.current()' cancas Q3CanvasItemList all = canvas()->allItems(); Q3CanvasItemList::Iterator cit; for (cit = all.begin(); cit != all.end(); ++cit) { if ((*cit)->visible()) { DiagramItem * adi = QCanvasItemToDiagramItem(*cit); if ((adi != 0) && // an uml canvas item (adi->type() == UmlArtifact) && (((ArtifactCanvas *) adi)->browser_node == it.current())) { // find (new AssocContainCanvas(the_canvas(), this, adi, 0, -1.0, -1.0)) ->show(); break; } } } } ++it; } } }