diff -r a222eb109e52 -r 39d59aee2a1a gui/graph_displayer_canvas.cc --- a/gui/graph_displayer_canvas.cc Thu Jun 16 18:58:15 2005 +0000 +++ b/gui/graph_displayer_canvas.cc Fri Jun 17 12:25:53 2005 +0000 @@ -5,7 +5,8 @@ GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),displayed_graph(*(root()), 0, 0),mapstorage(ms),isbutton(0),active_item(NULL),target_item(NULL) { - actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false); + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_node_event_handler), false); + actual_tool=CREATE_NODE; active_node=INVALID; active_edge=INVALID; @@ -23,7 +24,7 @@ coos.push_back(Gnome::Art::Point(cm[g.source(i)].x,cm[g.source(i)].y)); coos.push_back(Gnome::Art::Point(cm[g.target(i)].x,cm[g.target(i)].y)); - edgesmap[i]=new BrokenEdge(displayed_graph, coos); + edgesmap[i]=new BrokenEdge(displayed_graph, coos, *this); *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green"); edgesmap[i]->property_width_pixels().set_value(10); @@ -309,6 +310,16 @@ { actual_handler.disconnect(); + if(actual_tool==CREATE_EDGE) + { + GdkEvent * generated=new GdkEvent(); + generated->type=GDK_BUTTON_RELEASE; + generated->button.button=3; + create_edge_event_handler(generated); + } + + actual_tool=newtool; + switch(newtool) { case MOVE: @@ -333,6 +344,11 @@ } } +int GraphDisplayerCanvas::get_actual_tool() +{ + return actual_tool; +} + bool GraphDisplayerCanvas::move_event_handler(GdkEvent* e) { switch(e->type) @@ -564,7 +580,7 @@ coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); //drawing new edge - edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos); + edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos, *this); *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green"); edgesmap[active_edge]->property_width_pixels().set_value(10);