# HG changeset patch # User hegyi # Date 1122566040 0 # Node ID c2f95eac652b8f7a08ff4e40f8ad7b514da4fd04 # Parent 739df601808d40a7c7517161aa74dd5e5aa4f33f cout->cerr, node radius and edge width is now scaled, maps are editable by clicking on texts. diff -r 739df601808d -r c2f95eac652b gui/Makefile.am --- a/gui/Makefile.am Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/Makefile.am Thu Jul 28 15:54:00 2005 +0000 @@ -18,8 +18,6 @@ mapstorage.h \ map_win.cc \ map_win.h \ - edit_win.cc \ - edit_win.h \ broken_edge.cc \ broken_edge.h \ new_map_win.cc \ diff -r 739df601808d -r c2f95eac652b gui/all_include.h --- a/gui/all_include.h Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/all_include.h Thu Jul 28 15:54:00 2005 +0000 @@ -22,7 +22,10 @@ #define RANGE 3 #define WIN_WIDTH 900 #define WIN_HEIGHT 600 -#define ALMOST_ONE 0.9999999999 +#define MIN_EDGE_WIDTH 2 +#define MAX_EDGE_WIDTH 40 +#define MIN_NODE_RADIUS 2 +#define MAX_NODE_RADIUS 80 #ifndef MAIN_PART extern std::vector edge_property_strings; diff -r 739df601808d -r c2f95eac652b gui/graph_displayer_canvas-edge.cc --- a/gui/graph_displayer_canvas-edge.cc Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/graph_displayer_canvas-edge.cc Thu Jul 28 15:54:00 2005 +0000 @@ -6,12 +6,18 @@ int GraphDisplayerCanvas::changeEdgeWidth (std::string mapname, Graph::Edge edge) { Graph::EdgeMap * actual_map; + double min, max; + if(mapname=="Default") { + min=edge_property_defaults[E_WIDTH]; + max=edge_property_defaults[E_WIDTH]; actual_map=new Graph::EdgeMap(g,edge_property_defaults[E_WIDTH]); } else { + min=mapstorage.minOfEdgeMap(mapname); + max=mapstorage.maxOfEdgeMap(mapname); actual_map=(mapstorage.edgemap_storage)[mapname]; } @@ -19,11 +25,17 @@ { for (EdgeIt i(g); i!=INVALID; ++i) { - int w=(int)(*actual_map)[i]; - if(w>=0) + double v=abs((*actual_map)[i]); + int w; + if(min==max) { - edgesmap[i]->property_width_units().set_value(w); + w=(int)(edge_property_defaults[E_WIDTH]); } + else + { + w=(int)(MIN_EDGE_WIDTH+(v-min)/(max-min)*(MAX_EDGE_WIDTH-MIN_EDGE_WIDTH)); + } + edgesmap[i]->property_width_units().set_value(w); } } else diff -r 739df601808d -r c2f95eac652b gui/graph_displayer_canvas-event.cc --- a/gui/graph_displayer_canvas-event.cc Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/graph_displayer_canvas-event.cc Thu Jul 28 15:54:00 2005 +0000 @@ -216,7 +216,7 @@ //draw the new node in red at the clicked place case GDK_2BUTTON_PRESS: - std::cout << "double click" << std::endl; + //std::cout << "double click" << std::endl; break; case GDK_BUTTON_PRESS: isbutton=1; @@ -381,7 +381,7 @@ else { target_node=INVALID; - std::cout << "Loop edge is not yet implemented!" << std::endl; + std::cerr << "Loop edge is not yet implemented!" << std::endl; } } //clicked item was not a node. it could be an e.g. edge. we do not deal with it furthermore. @@ -527,189 +527,225 @@ bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e) { - switch(e->type) + if(actual_tool==EDGE_MAP_EDIT) { - case GDK_KEY_PRESS: - //for Escape or Enter hide the displayed widget - { - nodeMapEditEventHandler(e); - break; - } - case GDK_BUTTON_PRESS: - //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge. - { - //find the activated item - window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); - active_item=(get_item_at(clicked_x, clicked_y)); + switch(e->type) + { + case GDK_KEY_PRESS: + //for Escape or Enter hide the displayed widget + { + nodeMapEditEventHandler(e); + break; + } + case GDK_BUTTON_PRESS: + //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge. + { + //for determine, whether it was an edge + Graph::EdgeIt clicked_edge=INVALID; - //determine, whether it was an edge - Graph::EdgeIt clicked_edge=INVALID; - for (EdgeIt i(g); i!=INVALID; ++i) - { - if(edgesmap[i]==active_item) + //find the activated item between texts + active_item=(get_item_at(e->button.x, e->button.y)); + for (EdgeIt i(g); i!=INVALID; ++i) { - clicked_edge=i; + if(edgetextmap[i]==active_item) + { + clicked_edge=i; + } } - } - //if it was really an edge... - if(clicked_edge!=INVALID) - { - //If there is already edited edge, it has to be saved first - if(entrywidget.is_visible()) + + //if it was not between texts, search for it between edges + if(clicked_edge==INVALID) { + window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); + active_item=(get_item_at(clicked_x, clicked_y)); + + for (EdgeIt i(g); i!=INVALID; ++i) + { + //at the same time only one can be active + if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item)) + { + clicked_edge=i; + } + } + } + //if it was really an edge... + if(clicked_edge!=INVALID) + { + //If there is already edited edge, it has to be saved first + if(entrywidget.is_visible()) + { + GdkEvent * generated=new GdkEvent(); + generated->type=GDK_KEY_PRESS; + ((GdkEventKey*)generated)->keyval=GDK_KP_Enter; + entryWidgetChangeHandler(generated); + } + //If the previous value could be saved, we can go further, otherwise not + if(!entrywidget.is_visible()) + { + //and there is activated map + if(edgetextmap[clicked_edge]->property_text().get_value()!="") + { + //activate the general variable for it + active_edge=clicked_edge; + //delete visible widget if there is + if(canvasentrywidget) + { + delete(canvasentrywidget); + } + + //initialize the entry + entrywidget.show(); + + //fill in the correct value + entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value()); + + //replace and resize the entry to the activated edge and put it in a Canvas::Widget to be able to display it on gdc + 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()*4); + canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5); + } + } + } + //if it was not an edge... + else + { + //In this case the click did not happen on an edge + //if there is visible entry we save the value in it + //we pretend like an Enter was presse din the Entry widget GdkEvent * generated=new GdkEvent(); generated->type=GDK_KEY_PRESS; ((GdkEventKey*)generated)->keyval=GDK_KP_Enter; entryWidgetChangeHandler(generated); } - //If the previous value could be saved, we can go further, otherwise not - if(!entrywidget.is_visible()) - { - //and there is activated map - if(edgetextmap[clicked_edge]->property_text().get_value()!="") - { - //activate the general variable for it - active_edge=clicked_edge; - //delete visible widget if there is - if(canvasentrywidget) - { - delete(canvasentrywidget); - } - - //initialize the entry - entrywidget.show(); - - //fill in the correct value - entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value()); - - //replace and resize the entry to the activated edge and put it in a Canvas::Widget to be able to display it on gdc - 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()*4); - canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5); - } - } + break; } - //if it was not an edge... - else - { - //In this case the click did not happen on an edge - //if there is visible entry we save the value in it - //we pretend like an Enter was presse din the Entry widget - GdkEvent * generated=new GdkEvent(); - generated->type=GDK_KEY_PRESS; - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter; - entryWidgetChangeHandler(generated); - } - break; - } - default: - break; + default: + break; + } } return false; } bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e) { - switch(e->type) + if(actual_tool==NODE_MAP_EDIT) { - case GDK_KEY_PRESS: - //for Escape or Enter hide the displayed widget - { - switch(((GdkEventKey*)e)->keyval) + switch(e->type) + { + case GDK_KEY_PRESS: + //for Escape or Enter hide the displayed widget { - case GDK_Escape: - entrywidget.hide(); - break; - case GDK_Return: - case GDK_KP_Enter: - entrywidget.hide(); - break; - default: + switch(((GdkEventKey*)e)->keyval) + { + case GDK_Escape: + entrywidget.hide(); + break; + case GDK_Return: + case GDK_KP_Enter: + entrywidget.hide(); + break; + default: + break; + } + break; } - - break; - } - case GDK_BUTTON_PRESS: - //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge. - { - //find the activated item - window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); - active_item=(get_item_at(clicked_x, clicked_y)); + case GDK_BUTTON_PRESS: + //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge. + { + //for determine, whether it was a node + Graph::NodeIt clicked_node=INVALID; - //determine, whether it was a node - Graph::NodeIt clicked_node=INVALID; - for (NodeIt i(g); i!=INVALID; ++i) - { - if(nodesmap[i]==active_item) + //find the activated item between texts + active_item=(get_item_at(e->button.x, e->button.y)); + for (NodeIt i(g); i!=INVALID; ++i) { - clicked_node=i; + //at the same time only one can be active + if(nodetextmap[i]==active_item) + { + clicked_node=i; + } } - } - //if it was really an edge... - if(clicked_node!=INVALID) - { - //If there is already edited edge, it has to be saved first - if(entrywidget.is_visible()) + //if there was not, search for it between nodes + if(clicked_node==INVALID) { + window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); + active_item=(get_item_at(clicked_x, clicked_y)); + + for (NodeIt i(g); i!=INVALID; ++i) + { + //at the same time only one can be active + if(nodesmap[i]==active_item) + { + clicked_node=i; + } + } + } + //if it was really an edge... + if(clicked_node!=INVALID) + { + //If there is already edited edge, it has to be saved first + if(entrywidget.is_visible()) + { + GdkEvent * generated=new GdkEvent(); + generated->type=GDK_KEY_PRESS; + ((GdkEventKey*)generated)->keyval=GDK_KP_Enter; + entryWidgetChangeHandler(generated); + } + //If the previous value could be saved, we can go further, otherwise not + if(!entrywidget.is_visible()) + { + //and there is activated map + if(nodetextmap[clicked_node]->property_text().get_value()!="") + { + //activate the general variable for it + active_node=clicked_node; + //delete visible widget if there is + if(canvasentrywidget) + { + delete(canvasentrywidget); + } + + //initialize the entry + entrywidget.show(); + + //fill in the correct value + entrywidget.set_text(nodetextmap[active_node]->property_text().get_value()); + + //replace and resize the entry to the activated node and put it in a Canvas::Widget to be able to display it on gdc + xy entry_coos; + entry_coos.x=(nodetextmap[active_node])->property_x().get_value(); + entry_coos.x-=nodetextmap[active_node]->property_text_width().get_value()/2; + entry_coos.y=(nodetextmap[active_node])->property_y().get_value(); + entry_coos.y-=nodetextmap[active_node]->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(nodetextmap[active_node]->property_text_width().get_value()*4); + canvasentrywidget->property_height().set_value(nodetextmap[active_node]->property_text_height().get_value()*1.5); + } + } + } + //if it was not an edge... + else + { + //In this case the click did not happen on an edge + //if there is visible entry we save the value in it + //we pretend like an Enter was presse din the Entry widget GdkEvent * generated=new GdkEvent(); generated->type=GDK_KEY_PRESS; ((GdkEventKey*)generated)->keyval=GDK_KP_Enter; entryWidgetChangeHandler(generated); } - //If the previous value could be saved, we can go further, otherwise not - if(!entrywidget.is_visible()) - { - //and there is activated map - if(nodetextmap[clicked_node]->property_text().get_value()!="") - { - //activate the general variable for it - active_node=clicked_node; - //delete visible widget if there is - if(canvasentrywidget) - { - delete(canvasentrywidget); - } - - //initialize the entry - entrywidget.show(); - - //fill in the correct value - entrywidget.set_text(nodetextmap[active_node]->property_text().get_value()); - - //replace and resize the entry to the activated node and put it in a Canvas::Widget to be able to display it on gdc - xy entry_coos; - entry_coos.x=(nodetextmap[active_node])->property_x().get_value(); - entry_coos.x-=nodetextmap[active_node]->property_text_width().get_value()/2; - entry_coos.y=(nodetextmap[active_node])->property_y().get_value(); - entry_coos.y-=nodetextmap[active_node]->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(nodetextmap[active_node]->property_text_width().get_value()*1.5); - canvasentrywidget->property_height().set_value(nodetextmap[active_node]->property_text_height().get_value()*1.5); - } - } + break; } - //if it was not an edge... - else - { - //In this case the click did not happen on an edge - //if there is visible entry we save the value in it - //we pretend like an Enter was presse din the Entry widget - GdkEvent * generated=new GdkEvent(); - generated->type=GDK_KEY_PRESS; - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter; - entryWidgetChangeHandler(generated); - } - break; - } - default: - break; + default: + break; + } } return false; } @@ -782,7 +818,7 @@ //the text in the entry was not correct for a double else { - std::cout << "ERROR: only handling of double values is implemented yet!" << std::endl; + std::cerr << "ERROR: only handling of double values is implemented yet!" << std::endl; } break; @@ -829,7 +865,7 @@ { if(forming_edge!=INVALID) { - std::cout << "ERROR!!!! Valid edge found!" << std::endl; + std::cerr << "ERROR!!!! Valid edge found!" << std::endl; } else { @@ -850,7 +886,7 @@ } else { - std::cout << "ERROR!!!! Invalid edge found!" << std::endl; + std::cerr << "ERROR!!!! Invalid edge found!" << std::endl; } } diff -r 739df601808d -r c2f95eac652b gui/graph_displayer_canvas-node.cc --- a/gui/graph_displayer_canvas-node.cc Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/graph_displayer_canvas-node.cc Thu Jul 28 15:54:00 2005 +0000 @@ -6,12 +6,17 @@ int GraphDisplayerCanvas::changeNodeRadius (std::string mapname, Graph::Node node) { Graph::NodeMap * actual_map; + double min, max; if(mapname=="Default") { + min=node_property_defaults[N_RADIUS]; + max=node_property_defaults[N_RADIUS]; actual_map=new Graph::NodeMap(g,node_property_defaults[N_RADIUS]); } else { + min=mapstorage.minOfNodeMap(mapname); + max=mapstorage.maxOfNodeMap(mapname); actual_map=(mapstorage.nodemap_storage)[mapname]; } @@ -19,7 +24,16 @@ { for (NodeIt i(g); i!=INVALID; ++i) { - int w=(int)(*actual_map)[i]; + double v=abs((*actual_map)[i]); + int w; + if(min==max) + { + w=(int)(node_property_defaults[N_RADIUS]); + } + else + { + w=(int)(MIN_NODE_RADIUS+(v-min)/(max-min)*(MAX_NODE_RADIUS-MIN_NODE_RADIUS)); + } if(w>=0) { double x1, y1, x2, y2; diff -r 739df601808d -r c2f95eac652b gui/graph_displayer_canvas.cc --- a/gui/graph_displayer_canvas.cc Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/graph_displayer_canvas.cc Thu Jul 28 15:54:00 2005 +0000 @@ -41,6 +41,7 @@ edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, ""); edgetextmap[i]->property_fill_color().set_value("darkgreen"); + edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false); } //afterwards nodes come to be drawn @@ -69,6 +70,7 @@ nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, ""); nodetextmap[i]->property_fill_color().set_value("darkblue"); + nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); } updateScrollRegion(); diff -r 739df601808d -r c2f95eac652b gui/map_win.cc --- a/gui/map_win.cc Thu Jul 28 14:31:32 2005 +0000 +++ b/gui/map_win.cc Thu Jul 28 15:54:00 2005 +0000 @@ -144,7 +144,7 @@ gdc.changeEdgeText(mapname); break; default: - std::cout<<"Error\n"; + std::cerr<<"Error\n"; } } } @@ -175,7 +175,7 @@ gdc.changeNodeText(mapname); break; default: - std::cout<<"Error\n"; + std::cerr<<"Error\n"; } } } @@ -207,7 +207,7 @@ gdc.changeNodeText(mapname, node); break; default: - std::cout<<"Error\n"; + std::cerr<<"Error\n"; } } } @@ -242,7 +242,7 @@ gdc.changeEdgeText(mapname, edge); break; default: - std::cout<<"Error\n"; + std::cerr<<"Error\n"; } } }