1.1 --- a/graph_displayer_canvas.cc Mon Jun 13 19:49:33 2005 +0000
1.2 +++ b/graph_displayer_canvas.cc Tue Jun 14 15:58:12 2005 +0000
1.3 @@ -322,6 +322,11 @@
1.4 case CREATE_EDGE:
1.5 actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false);
1.6 break;
1.7 +
1.8 + case ERASER:
1.9 + actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraser_event_handler), false);
1.10 + break;
1.11 +
1.12 default:
1.13 break;
1.14 }
1.15 @@ -584,3 +589,87 @@
1.16 return false;
1.17 }
1.18
1.19 +bool GraphDisplayerCanvas::eraser_event_handler(GdkEvent* e)
1.20 +{
1.21 + switch(e->type)
1.22 + {
1.23 + case GDK_BUTTON_PRESS:
1.24 + active_item=(get_item_at(e->button.x, e->button.y));
1.25 + active_node=INVALID;
1.26 + active_edge=INVALID;
1.27 + for (NodeIt i(g); i!=INVALID; ++i)
1.28 + {
1.29 + if(nodesmap[i]==active_item)
1.30 + {
1.31 + active_node=i;
1.32 + }
1.33 + }
1.34 + if(active_node==INVALID)
1.35 + {
1.36 + for (EdgeIt i(g); i!=INVALID; ++i)
1.37 + {
1.38 + if(edgesmap[i]==active_item)
1.39 + {
1.40 + active_edge=i;
1.41 + }
1.42 + }
1.43 + }
1.44 + *active_item << Gnome::Canvas::Properties::fill_color("red");
1.45 + break;
1.46 +
1.47 + case GDK_BUTTON_RELEASE:
1.48 + if(active_item==(get_item_at(e->button.x, e->button.y)))
1.49 + {
1.50 + if(active_node!=INVALID)
1.51 + {
1.52 + EdgeIt e;
1.53 + g.firstOut(e,active_node);
1.54 + for(;e!=INVALID;g.nextOut(e))
1.55 + {
1.56 + delete_item(edgesmap[e]);
1.57 + //edgesmap[e]->property_points().set_value(coos);
1.58 + //edgetextmap[e]->property_y().set_value((y1+y2)/2);
1.59 + }
1.60 +
1.61 + g.firstIn(e,active_node);
1.62 + for(;e!=INVALID;g.nextIn(e))
1.63 + {
1.64 + delete_item(edgesmap[e]);
1.65 + //edgesmap[e]->get_bounds(x1, y1, x2, y2);
1.66 + //edgetextmap[e]->property_y().set_value((y1+y2)/2);
1.67 + }
1.68 + }
1.69 + delete_item(active_item);
1.70 +
1.71 + }
1.72 + else
1.73 + {
1.74 + if(active_node!=INVALID)
1.75 + {
1.76 + *active_item << Gnome::Canvas::Properties::fill_color("blue");
1.77 + }
1.78 + else
1.79 + {
1.80 + *active_item << Gnome::Canvas::Properties::fill_color("green");
1.81 + }
1.82 + }
1.83 + active_item=NULL;
1.84 + active_edge=INVALID;
1.85 + active_node=INVALID;
1.86 + break;
1.87 +
1.88 + case GDK_MOTION_NOTIFY:
1.89 + break;
1.90 +
1.91 + default:
1.92 + break;
1.93 + }
1.94 + return true;
1.95 +}
1.96 +
1.97 +void GraphDisplayerCanvas::delete_item(Gnome::Canvas::Item * item_to_delete)
1.98 +{
1.99 + //item_to_delete->hide();
1.100 + delete(item_to_delete);
1.101 +}
1.102 +