diff -r ddd2ee3406e6 -r e73d7540bd24 graph_displayer_canvas-event.cc --- a/graph_displayer_canvas-event.cc Thu Jul 28 19:09:39 2005 +0000 +++ b/graph_displayer_canvas-event.cc Fri Jul 29 12:01:37 2005 +0000 @@ -1,5 +1,5 @@ -#include -#include +#include "graph_displayer_canvas.h" +#include "broken_edge.h" #include @@ -99,7 +99,7 @@ active_item=(get_item_at(clicked_x, clicked_y)); active_node=INVALID; - for (NodeIt i(g); i!=INVALID; ++i) + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) { if(nodesmap[i]==active_item) { @@ -125,6 +125,8 @@ //we only have to do sg. if the mouse button is pressed AND the click was on a node that was found in the set of nodes if(active_node!=INVALID) { + mapstorage.modified = true; + mapstorage.coords.set(active_node, xy(clicked_x, clicked_y)); //new coordinates will be the old values, //because the item will be moved to the //new coordinate therefore the new movement @@ -147,17 +149,17 @@ //all the edges connected to the moved point has to be redrawn EdgeIt ei; - g.firstOut(ei,active_node); + mapstorage.graph.firstOut(ei,active_node); - for(;ei!=INVALID;g.nextOut(ei)) + for(;ei!=INVALID;mapstorage.graph.nextOut(ei)) { Gnome::Canvas::Points coos; double x1, x2, y1, y2; - nodesmap[g.source(ei)]->get_bounds(x1, y1, x2, y2); + nodesmap[mapstorage.graph.source(ei)]->get_bounds(x1, y1, x2, y2); coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); - nodesmap[g.target(ei)]->get_bounds(x1, y1, x2, y2); + nodesmap[mapstorage.graph.target(ei)]->get_bounds(x1, y1, x2, y2); coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); if(isbutton==3) @@ -176,16 +178,16 @@ edgetextmap[ei]->property_y().set_value(text_pos.y); } - g.firstIn(ei,active_node); - for(;ei!=INVALID;g.nextIn(ei)) + mapstorage.graph.firstIn(ei,active_node); + for(;ei!=INVALID;mapstorage.graph.nextIn(ei)) { Gnome::Canvas::Points coos; double x1, x2, y1, y2; - nodesmap[g.source(ei)]->get_bounds(x1, y1, x2, y2); + nodesmap[mapstorage.graph.source(ei)]->get_bounds(x1, y1, x2, y2); coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); - nodesmap[g.target(ei)]->get_bounds(x1, y1, x2, y2); + nodesmap[mapstorage.graph.target(ei)]->get_bounds(x1, y1, x2, y2); coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); if(isbutton==3) @@ -219,24 +221,33 @@ //std::cout << "double click" << std::endl; break; case GDK_BUTTON_PRESS: + mapstorage.modified = true; + isbutton=1; - active_node=NodeIt(g,g.addNode()); + active_node=NodeIt(mapstorage.graph,mapstorage.graph.addNode()); //initiating values corresponding to new node in maps window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); - nodesmap[active_node]=new Gnome::Canvas::Ellipse(displayed_graph, clicked_x-20, clicked_y-20, clicked_x+20, clicked_y+20); + mapstorage.coords.set(active_node, xy(clicked_x, clicked_y)); + (*mapstorage.nodemap_storage["id"])[active_node] = + mapstorage.graph.id(active_node); + + nodesmap[active_node]=new Gnome::Canvas::Ellipse(displayed_graph, + clicked_x-20, clicked_y-20, clicked_x+20, clicked_y+20); active_item=(Gnome::Canvas::Item *)(nodesmap[active_node]); *(nodesmap[active_node]) << Gnome::Canvas::Properties::fill_color("red"); *(nodesmap[active_node]) << Gnome::Canvas::Properties::outline_color("black"); (nodesmap[active_node])->show(); - nodetextmap[active_node]=new Gnome::Canvas::Text(displayed_graph, clicked_x+node_property_defaults[N_RADIUS]+5, clicked_y+node_property_defaults[N_RADIUS]+5, ""); + nodetextmap[active_node]=new Gnome::Canvas::Text(displayed_graph, + clicked_x+node_property_defaults[N_RADIUS]+5, + clicked_y+node_property_defaults[N_RADIUS]+5, ""); nodetextmap[active_node]->property_fill_color().set_value("darkblue"); - mapwin->updateNode(active_node); + mapwin.updateNode(active_node); break; @@ -300,7 +311,7 @@ active_item=(get_item_at(clicked_x, clicked_y)); active_node=INVALID; - for (NodeIt i(g); i!=INVALID; ++i) + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) { if(nodesmap[i]==active_item) { @@ -329,7 +340,7 @@ window_to_world (e->button.x, e->button.y, clicked_x, clicked_y); target_item=(get_item_at(clicked_x, clicked_y)); Graph::NodeIt target_node=INVALID; - for (NodeIt i(g); i!=INVALID; ++i) + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) { if(nodesmap[i]==target_item) { @@ -341,13 +352,16 @@ { if(target_node!=active_node) { + mapstorage.modified = true; + *(nodesmap[target_node]) << Gnome::Canvas::Properties::fill_color("red"); //creating new edge - active_edge=EdgeIt(g,g.addEdge(active_node, target_node)); + active_edge=EdgeIt(mapstorage.graph,mapstorage.graph.addEdge(active_node, target_node)); //initiating values corresponding to new edge in maps mapstorage.initMapsForEdge(active_edge); + (*mapstorage.edgemap_storage["id"])[active_edge] = mapstorage.graph.id(active_edge); //calculating coordinates of new edge Gnome::Canvas::Points coos; @@ -376,7 +390,7 @@ edgetextmap[active_edge]->property_fill_color().set_value("darkgreen"); //updating its properties - mapwin->updateEdge(active_edge); + mapwin.updateEdge(active_edge); } else { @@ -429,9 +443,8 @@ active_item=(get_item_at(clicked_x, clicked_y)); active_node=INVALID; active_edge=INVALID; - //was it a node? - for (NodeIt i(g); i!=INVALID; ++i) + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) { if(nodesmap[i]==active_item) { @@ -441,7 +454,7 @@ //or was it an edge? if(active_node==INVALID) { - for (EdgeIt i(g); i!=INVALID; ++i) + for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i) { if(edgesmap[i]==active_item) { @@ -467,19 +480,20 @@ //a node was found if(active_node!=INVALID) { + mapstorage.modified = true; //collecting edges to delete EdgeIt e; std::set edges_to_delete; - g.firstOut(e,active_node); - for(;e!=INVALID;g.nextOut(e)) + mapstorage.graph.firstOut(e,active_node); + for(;e!=INVALID;mapstorage.graph.nextOut(e)) { edges_to_delete.insert(e); } - g.firstIn(e,active_node); - for(;e!=INVALID;g.nextIn(e)) + mapstorage.graph.firstIn(e,active_node); + for(;e!=INVALID;mapstorage.graph.nextIn(e)) { edges_to_delete.insert(e); } @@ -545,7 +559,7 @@ //find the activated item between texts active_item=(get_item_at(e->button.x, e->button.y)); - for (EdgeIt i(g); i!=INVALID; ++i) + for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i) { if(edgetextmap[i]==active_item) { @@ -559,7 +573,7 @@ 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) + for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i) { //at the same time only one can be active if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item)) @@ -663,7 +677,7 @@ //find the activated item between texts active_item=(get_item_at(e->button.x, e->button.y)); - for (NodeIt i(g); i!=INVALID; ++i) + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) { //at the same time only one can be active if(nodetextmap[i]==active_item) @@ -678,7 +692,7 @@ 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) + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) { //at the same time only one can be active if(nodesmap[i]==active_item) @@ -803,12 +817,12 @@ case EDGE_MAP_EDIT: edgetextmap[active_edge]->property_text().set_value(ostr.str()); (*(mapstorage.edgemap_storage)[edgemap_to_edit])[active_edge]=mapvalue_d; - mapwin->updateEdge(active_edge); + mapwin.updateEdge(active_edge); break; case NODE_MAP_EDIT: nodetextmap[active_node]->property_text().set_value(ostr.str()); (*(mapstorage.nodemap_storage)[nodemap_to_edit])[active_node]=mapvalue_d; - mapwin->updateNode(active_node); + mapwin.updateNode(active_node); break; default: break; @@ -835,21 +849,21 @@ { delete(nodetextmap[node_to_delete]); delete(nodesmap[node_to_delete]); - g.erase(node_to_delete); + mapstorage.graph.erase(node_to_delete); } void GraphDisplayerCanvas::deleteItem(EdgeIt edge_to_delete) { delete(edgetextmap[edge_to_delete]); delete(edgesmap[edge_to_delete]); - g.erase(edge_to_delete); + mapstorage.graph.erase(edge_to_delete); } void GraphDisplayerCanvas::deleteItem(Graph::Edge edge_to_delete) { delete(edgetextmap[edge_to_delete]); delete(edgesmap[edge_to_delete]); - g.erase(edge_to_delete); + mapstorage.graph.erase(edge_to_delete); } void GraphDisplayerCanvas::textReposition(xy new_place) @@ -869,7 +883,7 @@ } else { - for (EdgeIt i(g); i!=INVALID; ++i) + for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i) { if(edgesmap[i]==active_bre) { @@ -895,7 +909,7 @@ int GraphDisplayerCanvas::addNewEdgeMap(double default_value, std::string mapname) { //create the new map - Graph::EdgeMap * emptr=new Graph::EdgeMap (g,default_value); + Graph::EdgeMap * emptr=new Graph::EdgeMap (mapstorage.graph, default_value); //if addition was not successful addEdgeMap returns one. //cause can be that there is already a map named like the new one @@ -906,7 +920,7 @@ //add it to the list of the displayable maps - mapwin->registerNewEdgeMap(mapname); + mapwin.registerNewEdgeMap(mapname); //display it changeEdgeText(mapname); @@ -917,7 +931,7 @@ int GraphDisplayerCanvas::addNewNodeMap(double default_value, std::string mapname) { //create the new map - Graph::NodeMap * emptr=new Graph::NodeMap (g,default_value); + Graph::NodeMap * emptr=new Graph::NodeMap (mapstorage.graph,default_value); //if addition was not successful addNodeMap returns one. //cause can be that there is already a map named like the new one @@ -927,7 +941,7 @@ } //add it to the list of the displayable maps - mapwin->registerNewNodeMap(mapname); + mapwin.registerNewNodeMap(mapname); //display it changeNodeText(mapname);