# HG changeset patch # User hegyi # Date 1121462238 0 # Node ID 2cb1fc37f742c85f0f36ad40b4a2a00c70f2a736 # Parent 8dc87bc15ec590393eb50c6c3c3f0ae79ee8645c EdgeMapEditor is on its way, but it is far not yet ready. diff -r 8dc87bc15ec5 -r 2cb1fc37f742 graph_displayer_canvas-event.cc --- a/graph_displayer_canvas-event.cc Tue Jul 12 21:45:39 2005 +0000 +++ b/graph_displayer_canvas-event.cc Fri Jul 15 21:17:18 2005 +0000 @@ -13,51 +13,65 @@ void GraphDisplayerCanvas::changeEditorialTool(int newtool) { - actual_handler.disconnect(); + if(actual_tool!=newtool) + { - if(actual_tool==CREATE_EDGE) - { - GdkEvent * generated=new GdkEvent(); - generated->type=GDK_BUTTON_RELEASE; - generated->button.button=3; - createEdgeEventHandler(generated); - } + actual_handler.disconnect(); - actual_tool=newtool; + switch(actual_tool) + { + case CREATE_EDGE: + { + GdkEvent * generated=new GdkEvent(); + generated->type=GDK_BUTTON_RELEASE; + generated->button.button=3; + createEdgeEventHandler(generated); + break; + } + case EDGE_MAP_EDIT: + break; + default: + break; + } - active_item=NULL; - target_item=NULL; - active_edge=INVALID; - active_node=INVALID; + active_item=NULL; + target_item=NULL; + active_edge=INVALID; + active_node=INVALID; - switch(newtool) - { - case MOVE: - actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); - break; - case CREATE_NODE: - actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createNodeEventHandler), false); - break; + actual_tool=newtool; + + switch(newtool) + { + case MOVE: + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); + break; - case CREATE_EDGE: - actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createEdgeEventHandler), false); - break; + case CREATE_NODE: + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createNodeEventHandler), false); + break; - case ERASER: - actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false); - break; + case CREATE_EDGE: + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createEdgeEventHandler), false); + break; - case EDGE_MAP_EDIT: - actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false); - break; + case ERASER: + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false); + break; - case NODE_MAP_EDIT: - actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); - break; + case EDGE_MAP_EDIT: + grab_focus(); + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false); + break; - default: - break; + case NODE_MAP_EDIT: + actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); + break; + + default: + break; + } } } @@ -492,35 +506,60 @@ { switch(e->type) { + case GDK_KEY_PRESS: + { + std::cout << "Any button was pressed" << std::endl; + switch(((GdkEventKey*)e)->keyval) + { + case GDK_A: + std::cout << "A button was pressed" << std::endl; + break; + default: + break; + } + + break; + } case GDK_BUTTON_PRESS: - window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); - active_item=(get_item_at(clicked_x, clicked_y)); - active_edge=INVALID; - for (EdgeIt i(g); i!=INVALID; ++i) - { - if(edgesmap[i]==active_item) - { - active_edge=i; - } - } - if((active_edge!=INVALID)&&(edgetextmap[active_edge]->property_text().get_value()!="")) - { - if(canvasentrywidget) - { - delete(canvasentrywidget); - } - entrywidget.show(); - entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value()); - xy entry_coos; - entry_coos.x=(edgetextmap[active_edge])->property_x().get_value(); - entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2; - entry_coos.y=(edgetextmap[active_edge])->property_y().get_value(); - entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2; - canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget); - canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*1.5); - canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5); - } - break; + { + window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); + active_item=(get_item_at(clicked_x, clicked_y)); + Graph::EdgeIt clicked_edge=INVALID; + for (EdgeIt i(g); i!=INVALID; ++i) + { + if(edgesmap[i]==active_item) + { + clicked_edge=i; + } + } + if(clicked_edge!=INVALID) + { + if(edgetextmap[clicked_edge]->property_text().get_value()!="") + { + active_edge=clicked_edge; + if(canvasentrywidget) + { + delete(canvasentrywidget); + } + entrywidget.show(); + entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value()); + xy entry_coos; + entry_coos.x=(edgetextmap[active_edge])->property_x().get_value(); + entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2; + entry_coos.y=(edgetextmap[active_edge])->property_y().get_value(); + entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2; + canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget); + canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*1.5); + canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5); + } + } + else + { + //mentse el -> problema, hogy nem tudja melyik map-be + entrywidget.hide(); + } + break; + } default: break; } @@ -533,6 +572,14 @@ return false; } +bool GraphDisplayerCanvas::entryWidgetChangeHandler(GdkEvent* e) +{ + Glib::ustring mapvalue = entrywidget.get_text(); + std::cout << mapvalue << std::endl; + e=e; + return false; +} + void GraphDisplayerCanvas::deleteItem(NodeIt node_to_delete) { delete(nodetextmap[node_to_delete]); diff -r 8dc87bc15ec5 -r 2cb1fc37f742 graph_displayer_canvas.cc --- a/graph_displayer_canvas.cc Tue Jul 12 21:45:39 2005 +0000 +++ b/graph_displayer_canvas.cc Fri Jul 15 21:17:18 2005 +0000 @@ -5,12 +5,16 @@ GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms, MapWin * mw):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),nodetextmap(g),displayed_graph(*(root()), 0, 0),canvasentrywidget(NULL),mapstorage(ms),isbutton(0),active_item(NULL),target_item(NULL),mapwin(mw) { + active_node=INVALID; + active_edge=INVALID; + + //setting event handler for the editor widget + entrywidget.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::entryWidgetChangeHandler), false); + + //base event handler is move tool actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); actual_tool=CREATE_NODE; - active_node=INVALID; - active_edge=INVALID; - //set_center_scroll_region(true); //first edges are drawn, to hide joining with nodes later diff -r 8dc87bc15ec5 -r 2cb1fc37f742 graph_displayer_canvas.h --- a/graph_displayer_canvas.h Tue Jul 12 21:45:39 2005 +0000 +++ b/graph_displayer_canvas.h Fri Jul 15 21:17:18 2005 +0000 @@ -90,6 +90,9 @@ ///event handler for the case when node map editor tool is active bool nodeMapEditEventHandler(GdkEvent*); + ///event handler for the case when the entry widget is changed + bool entryWidgetChangeHandler(GdkEvent*); + public: ///Moves the text to new place void textReposition(xy);