diff -r 1db7a6dd17f8 -r 0b2281cc1e32 graph_displayer_canvas.cc --- a/graph_displayer_canvas.cc Mon Jun 13 19:49:33 2005 +0000 +++ b/graph_displayer_canvas.cc Tue Jun 14 15:58:12 2005 +0000 @@ -322,6 +322,11 @@ case CREATE_EDGE: actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false); break; + + case ERASER: + actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraser_event_handler), false); + break; + default: break; } @@ -584,3 +589,87 @@ return false; } +bool GraphDisplayerCanvas::eraser_event_handler(GdkEvent* e) +{ + switch(e->type) + { + case GDK_BUTTON_PRESS: + active_item=(get_item_at(e->button.x, e->button.y)); + active_node=INVALID; + active_edge=INVALID; + for (NodeIt i(g); i!=INVALID; ++i) + { + if(nodesmap[i]==active_item) + { + active_node=i; + } + } + if(active_node==INVALID) + { + for (EdgeIt i(g); i!=INVALID; ++i) + { + if(edgesmap[i]==active_item) + { + active_edge=i; + } + } + } + *active_item << Gnome::Canvas::Properties::fill_color("red"); + break; + + case GDK_BUTTON_RELEASE: + if(active_item==(get_item_at(e->button.x, e->button.y))) + { + if(active_node!=INVALID) + { + EdgeIt e; + g.firstOut(e,active_node); + for(;e!=INVALID;g.nextOut(e)) + { + delete_item(edgesmap[e]); + //edgesmap[e]->property_points().set_value(coos); + //edgetextmap[e]->property_y().set_value((y1+y2)/2); + } + + g.firstIn(e,active_node); + for(;e!=INVALID;g.nextIn(e)) + { + delete_item(edgesmap[e]); + //edgesmap[e]->get_bounds(x1, y1, x2, y2); + //edgetextmap[e]->property_y().set_value((y1+y2)/2); + } + } + delete_item(active_item); + + } + else + { + if(active_node!=INVALID) + { + *active_item << Gnome::Canvas::Properties::fill_color("blue"); + } + else + { + *active_item << Gnome::Canvas::Properties::fill_color("green"); + } + } + active_item=NULL; + active_edge=INVALID; + active_node=INVALID; + break; + + case GDK_MOTION_NOTIFY: + break; + + default: + break; + } + return true; +} + +void GraphDisplayerCanvas::delete_item(Gnome::Canvas::Item * item_to_delete) +{ + //item_to_delete->hide(); + delete(item_to_delete); +} +