/** * 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); }
/** * Change edge's style */ void GGraph::setEdgeStyle( GStyle *style) { if ( sel_edges.isEmpty()) return; GEdge* edge = sel_edges.first(); edge->setStyle( style); edge->item()->adjust(); }
void EdgeItem::keyPressEvent(QKeyEvent *event) { int key = event->key(); GNode *n = NULL; GEdge *e = NULL; VEdge vedge( edge()); NavSector sector = edge()->graph()->nodeNavigationSector(); GNode *curr_node = edge()->graph()->nodeInFocus(); NodeNav node_nav( curr_node, sector); switch( key) { case Qt::Key_Up: if ( isNotNullP( curr_node) && ( sector == LEFT_SECTOR || sector == RIGHT_SECTOR)) { e = node_nav.edgeInDir( edge(), NAV_DIR_UP); } else { n = vedge.nodeUp(); } break; case Qt::Key_Down: if ( isNotNullP( curr_node) && ( sector == LEFT_SECTOR || sector == RIGHT_SECTOR) ) { e = node_nav.edgeInDir( edge(), NAV_DIR_DOWN); } else { n = vedge.nodeDown(); } break; case Qt::Key_Left: if ( isNotNullP( curr_node) && ( sector == TOP_SECTOR || sector == BOTTOM_SECTOR) ) { e = node_nav.edgeInDir( edge(), NAV_DIR_LEFT); } else { n = vedge.nodeLeft(); } break; case Qt::Key_Right: if ( isNotNullP( curr_node) && ( sector == TOP_SECTOR || sector == BOTTOM_SECTOR) ) { e = node_nav.edgeInDir( edge(), NAV_DIR_RIGHT); } else { n = vedge.nodeRight(); } break; default: break; } if ( isNotNullP( n)) { if ( edge()->graph()->view()->isContext()) { edge()->graph()->emptySelection(); edge()->graph()->selectNode( n); edge()->graph()->view()->findContext(); } edge()->graph()->view()->focusOnNode( n, true); scene()->clearFocus(); scene()->clearSelection(); n->item()->setFocus(); n->item()->setSelected( true); } else if ( isNotNullP( e)) { // Get focus on edge scene()->clearFocus(); scene()->clearSelection(); e->item()->setFocus(); e->item()->setSelected( true); } //QGraphicsItem::keyPressEvent( event); }