/** * Destructor for node - removes edge controls on incidient edges and disconnects item from scene */ GNode::~GNode() { graph()->invalidateRanking(); if ( ( isEdgeControl() || isEdgeLabel()) && isNotNullP( firstPred()) && isNotNullP( firstSucc()) && isNotNullP( firstPred()->pred()) && isNotNullP( firstSucc()->succ())) { GRAPH_ASSERTD( areEqP( firstPred()->style(), firstSucc()->style()), "Different styles on the same edge"); GEdge *e = graph()->newEdge( firstPred()->pred(), firstSucc()->succ()); e->setStyle( firstPred()->style()); } else if ( isSimple()) { QList< GNode *> nodes; GEdge* edge; Marker m = graph()->newMarker(); for ( edge = firstSucc(); isNotNullP( edge); edge = edge->nextSucc()) { edge->item()->adjust(); GNode* succ = edge->succ(); while ( succ->isEdgeControl() || succ->isEdgeLabel()) { assert( isNotNullP( succ->firstSucc())); if ( succ->mark( m)) { nodes << succ; } succ = succ->firstSucc()->succ(); } } for ( edge = firstPred(); isNotNullP( edge); edge = edge->nextPred()) { if ( edge->isSelf()) // We've already processed this one in previous loop continue; edge->item()->adjust(); GNode* pred = edge->pred(); while ( pred->isEdgeControl() || pred->isEdgeLabel()) { assert( isNotNullP( pred->firstPred())); if ( pred->mark( m)) { nodes << pred; } pred = pred->firstPred()->pred(); } } foreach ( GNode *n, nodes) { graph()->deleteNode( n); } graph()->freeMarker( m); }
Node::~Node() { Edge *edge; //out("Deleted Node"); /** delete incidient edges */ for ( edge = firstSucc(); isNotNullP( edge);) { Edge* next = edge->nextSucc(); //edge->detachFromNode( GRAPH_DIR_DOWN);// Edge is detached from succ node graph()->deleteEdge( edge); edge = next; } for ( edge = firstPred(); isNotNullP( edge);) { Edge* next = edge->nextPred(); //edge->detachFromNode( GRAPH_DIR_UP);// Edge is detached from pred node graph()->deleteEdge( edge); edge = next; } element.parentNode().removeChild( element); /** delete myself from graph */ graph_p->detachNode( this); }
/** * Destructor. Corrects list of nodes in corresponding graph and deletes adjacent edges */ Node::~Node() { out ("deleting node# "); debugPrint(); out ("\n\n\n"); Edge *edge; /** delete incidient edges */ for ( edge = firstSucc(); isNotNullP( edge);) { Edge* next = edge->nextSucc(); edge->detachFromNode( GRAPH_DIR_DOWN);// Edge is detached from succ node delete edge; edge = next; } for ( edge = firstPred(); isNotNullP( edge);) { Edge* next = edge->nextPred(); edge->detachFromNode( GRAPH_DIR_UP);// Edge is detached from pred node delete edge; edge = next; } /** delete myself from graph */ graph->detachNode( this); }