# HG changeset patch # User hegyi # Date 1118834101 0 # Node ID c60369a1c987f439a86d6b99948c55fff0d46f2a # Parent 71676735a6ef2fa9392c01b34d67800b32c4b567 At last, the most simple task, the graph-item deletion is solved... diff -r 71676735a6ef -r c60369a1c987 gui/graph_displayer_canvas.cc --- a/gui/graph_displayer_canvas.cc Wed Jun 15 11:01:55 2005 +0000 +++ b/gui/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 71676735a6ef -r c60369a1c987 gui/graph_displayer_canvas.h --- a/gui/graph_displayer_canvas.h Wed Jun 15 11:01:55 2005 +0000 +++ b/gui/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;