620 case GDK_BUTTON_RELEASE: |
620 case GDK_BUTTON_RELEASE: |
621 if(active_item==(get_item_at(e->button.x, e->button.y))) |
621 if(active_item==(get_item_at(e->button.x, e->button.y))) |
622 { |
622 { |
623 if(active_node!=INVALID) |
623 if(active_node!=INVALID) |
624 { |
624 { |
625 // EdgeIt e; |
625 |
626 // g.firstOut(e,active_node); |
626 //collecting edges to delete |
627 // for(;e!=INVALID;g.nextOut(e)) |
627 EdgeIt e; |
628 // { |
628 std::set<Graph::Edge> edges_to_delete; |
629 // if(e!=INVALID)delete_item(e); |
629 |
630 // } |
630 g.firstOut(e,active_node); |
631 |
631 for(;e!=INVALID;g.nextOut(e)) |
632 // g.firstIn(e,active_node); |
632 { |
633 // for(;e!=INVALID;g.nextIn(e)) |
633 edges_to_delete.insert(e); |
634 // { |
634 } |
635 // if(e!=INVALID)delete_item(e); |
635 |
636 // } |
636 g.firstIn(e,active_node); |
637 for (EdgeIt i(g); i!=INVALID; ++i) |
637 for(;e!=INVALID;g.nextIn(e)) |
638 { |
638 { |
639 //std::cout << g.source(i).id << "-" << g.target(i).id << " " << active_node.id << std::endl; |
639 edges_to_delete.insert(e); |
640 if((g.source(i)==active_node)||(g.target(i)==active_node)) |
640 } |
641 { |
641 |
642 delete_item(i); |
642 //deleting collected edges |
643 } |
643 for(std::set<Graph::Edge>::iterator edge_set_it=edges_to_delete.begin();edge_set_it!=edges_to_delete.end();edge_set_it++) |
|
644 { |
|
645 delete_item(*edge_set_it); |
644 } |
646 } |
645 delete_item(active_node); |
647 delete_item(active_node); |
646 } |
648 } |
|
649 //a simple edge was chosen |
647 else |
650 else |
648 { |
651 { |
649 delete_item(active_edge); |
652 delete_item(active_edge); |
650 } |
653 } |
651 |
654 |
652 |
655 |
653 } |
656 } |
|
657 //pointer was moved, deletion is cancelled |
654 else |
658 else |
655 { |
659 { |
656 if(active_node!=INVALID) |
660 if(active_node!=INVALID) |
657 { |
661 { |
658 *active_item << Gnome::Canvas::Properties::fill_color("blue"); |
662 *active_item << Gnome::Canvas::Properties::fill_color("blue"); |