# HG changeset patch # User hegyi # Date 1118834101 0 # Node ID 319a4fa65e0568ec978b46b16b4b381653c36337 # Parent e8c21454f1258bd0f9b1133eef1c984149f66a53 At last, the most simple task, the graph-item deletion is solved... diff -r e8c21454f125 -r 319a4fa65e05 graph_displayer_canvas.cc --- a/graph_displayer_canvas.cc Wed Jun 15 10:19:44 2005 +0000 +++ b/graph_displayer_canvas.cc Wed Jun 15 11:15:01 2005 +0000 @@ -622,28 +622,31 @@ { if(active_node!=INVALID) { -// EdgeIt e; -// g.firstOut(e,active_node); -// for(;e!=INVALID;g.nextOut(e)) -// { -// if(e!=INVALID)delete_item(e); -// } -// g.firstIn(e,active_node); -// for(;e!=INVALID;g.nextIn(e)) -// { -// if(e!=INVALID)delete_item(e); -// } - for (EdgeIt i(g); i!=INVALID; ++i) + //collecting edges to delete + EdgeIt e; + std::set edges_to_delete; + + g.firstOut(e,active_node); + for(;e!=INVALID;g.nextOut(e)) { - //std::cout << g.source(i).id << "-" << g.target(i).id << " " << active_node.id << std::endl; - if((g.source(i)==active_node)||(g.target(i)==active_node)) - { - delete_item(i); - } + edges_to_delete.insert(e); + } + + g.firstIn(e,active_node); + for(;e!=INVALID;g.nextIn(e)) + { + edges_to_delete.insert(e); + } + + //deleting collected edges + for(std::set::iterator edge_set_it=edges_to_delete.begin();edge_set_it!=edges_to_delete.end();edge_set_it++) + { + delete_item(*edge_set_it); } delete_item(active_node); } + //a simple edge was chosen else { delete_item(active_edge); @@ -651,6 +654,7 @@ } + //pointer was moved, deletion is cancelled else { if(active_node!=INVALID) @@ -662,6 +666,7 @@ *active_item << Gnome::Canvas::Properties::fill_color("green"); } } + //reseting datas active_item=NULL; active_edge=INVALID; active_node=INVALID; @@ -688,3 +693,9 @@ g.erase(edge_to_delete); } +void GraphDisplayerCanvas::delete_item(Graph::Edge edge_to_delete) +{ + delete(edgesmap[edge_to_delete]); + g.erase(edge_to_delete); +} + diff -r e8c21454f125 -r 319a4fa65e05 graph_displayer_canvas.h --- a/graph_displayer_canvas.h Wed Jun 15 10:19:44 2005 +0000 +++ b/graph_displayer_canvas.h Wed Jun 15 11:15:01 2005 +0000 @@ -73,6 +73,8 @@ void delete_item(NodeIt); ///Deletes the given element. void delete_item(EdgeIt); + ///Deletes the given element. + void delete_item(Graph::Edge); ///The graph, on which we work Graph g;